Skip to content

Latest commit

 

History

History
96 lines (65 loc) · 4.07 KB

README.md

File metadata and controls

96 lines (65 loc) · 4.07 KB

Geman-McClure Robust Registration

C++ Formatter Python Formatter

About

Official implementation of my master thesis "Algorithms for Geman-McClure Robust Estimation and Applications for Spatial Perceptions". This library is written in C++ and we support Python interface.

Table of Contents

⚙️ Setup

The following setup is tested in Ubuntu 22.04.

Prerequisites

sudo apt update
sudo apt install -y g++ build-essential cmake
sudo apt install -y libeigen3-dev libomp-dev
# python (optional)
sudo apt install -y python3 python3-dev python3-venv

git clone --recurse-submodules -j8 https://github.com/doggydoggy0101/master-thesis.git
cd master-thesis

# If you did not clone the repository with --recurse-submodules option,
# you may need to run the following command.
git submodule update --init

Build

mkdir build
cd build
cmake .. 
make

(optional) Build with Python binding

python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install --upgrade pip
python3 -m pip install numpy

mkdir build
cd build
cmake .. -DBUILD_PYTHON=ON
make

cd python && pip install .

📚 Example usages

We provide the following robust point cloud registration solvers:

Solver Robust Description
IrlsSolver TLS & GM IRLS-based registration solver with linear relaxation approach.
GncSolver TLS & GM GNC-based registration solver with linear relaxation approach.
FracgmSolver GM FracGM-based registration solver with linear relaxation approach.

Note that QGM is IrlsSolver with the Geman-McClure robust function.

Implementation of other solvers used in the synthetic dataset experiments can be found here.

🎮 Numerical results

We benchmark the solvers against RANSAC, FGR, and TEASER++ on the 3DMatch dataset. All experiments are conducted over 40 Monte Carlo runs.

images

TEASER++ has two runtime patterns, some runs complete with (~0.0005s), while others take (~0.2-0.4s) for the same scene. Despite these runtime differences, the final rotation and translation errors remain consistent across runs, which suggests that TEASER++ is completing the registration successfully in all cases. I am still looking for the reason why this happens.

🗃️ Related works