gtsam_points
gtsam_points

This is a collection of GTSAM factors and optimizers for range-based SLAM.

Tested on Ubuntu 22.04 / 24.04 and CUDA 12.2, and NVIDIA Jetson Orin with GTSAM 4.2a9.

Doc Build

Factors

Scan Matching Factors

  • IntegratedICPFactor & IntegratedPointToPlaneICPFactor
    The conventional point-to-point and point-to-plane ICP [1].
  • IntegratedGICPFactor
    Generalized ICP based on the distribution-to-distribution distance [2].
  • IntegratedVGICPFactor
    GICP with voxel-based data association and multi-distribution-correspondence [3][4].
  • IntegratedVGICPFactorGPU
    GPU implementation of VGICP [3][4].
    To enable this factor, set -DBUILD_WITH_CUDA=ON.
  • IntegratedLOAMFactor
    Matching cost factor based on the combination of point-to-plane and point-to-edge distances [5][6].

Colored Scan Matching Factors

  • IntegratedColorConsistencyFactor
    Photometric ICP error [7].
  • IntegratedColoredGICPFactor
    Photometric ICP error + GICP geometric error [2][7].

Continuous-time ICP Factors

  • IntegratedCT_ICPFactor
    Continuous Time ICP Factor [8].
  • IntegratedCT_GICPFactor
    Continuous Time ICP with GICP's D2D matching cost [2][8].

Bundle Adjustment Factors

  • PlaneEVMFactor and EdgeEVMFactor
    Bundle adjustment factor based on Eigenvalue minimization [9].
  • LsqBundleAdjustmentFactor
    Bundle adjustment factor based on EVM and EF optimal condition satisfaction [10].

Optimizers for GPU Factors

All the following optimizers were derived from the implementations in GTSAM.

  • LevenbergMarquardtOptimizerExt
  • ISAM2Ext
  • IncrementalFixedLagSmootherExt

Nearest Neighbor Search

  • KdTree KdTree with parallel tree construction. Derived from nanoflann.
  • IncrementalVoxelMap Incremental voxel-based nearest neighbor search (iVox) [11].
  • IncrementalCovarianceVoxelMap Incremental voxelmap with online normal and covariance estimation.

Continuous-Time Trajectory (Under development)

  • B-Spline Cubic B-Spline-based interpolation and linear acceleration and angular velocity expressions [12].
  • ContinuousTrajectory Cubic B-Spline-based continuous trajectory representation for offline batch optimization.

Installation

Install from source

# Install gtsam
git clone https://github.com/borglab/gtsam
cd gtsam
git checkout 4.2a9
mkdir build && cd build
cmake .. \
-DGTSAM_BUILD_EXAMPLES_ALWAYS=OFF \
-DGTSAM_BUILD_TESTS=OFF \
-DGTSAM_WITH_TBB=OFF \
-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF
make -j$(nproc)
sudo make install
# [optional] Install iridescence visualization library
# This is required for only demo programs
sudo apt install -y libglm-dev libglfw3-dev libpng-dev
git clone https://github.com/koide3/iridescence --recursive
mkdir iridescence/build && cd iridescence/build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install
## Build gtsam_points
git clone https://github.com/koide3/gtsam_points
mkdir gtsam_points/build && cd gtsam_points/build
cmake .. -DCMAKE_BUILD_TYPE=Release
# Optional cmake arguments
# cmake .. \
# -DBUILD_DEMO=OFF \
# -DBUILD_TESTS=OFF \
# -DBUILD_WITH_CUDA=OFF \
# -DBUILD_WITH_MARCH_NATIVE=OFF
make -j$(nproc)
sudo make install

Install from <a href="https://github.com/koide3/ppa">PPA</a> [AMD64, ARM64]

Setup PPA

Ubuntu 24.04

curl -s --compressed "https://koide3.github.io/ppa/ubuntu2404/KEY.gpg" | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/koide3_ppa.gpg >/dev/null
echo "deb [signed-by=/etc/apt/trusted.gpg.d/koide3_ppa.gpg] https://koide3.github.io/ppa/ubuntu2404 ./" | sudo tee /etc/apt/sources.list.d/koide3_ppa.list

Ubuntu 22.04

curl -s --compressed "https://koide3.github.io/ppa/ubuntu2204/KEY.gpg" | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/koide3_ppa.gpg >/dev/null
echo "deb [signed-by=/etc/apt/trusted.gpg.d/koide3_ppa.gpg] https://koide3.github.io/ppa/ubuntu2204 ./" | sudo tee /etc/apt/sources.list.d/koide3_ppa.list

Ubuntu 20.04

curl -s --compressed "https://koide3.github.io/ppa/ubuntu2004/KEY.gpg" | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/koide3_ppa.gpg >/dev/null
echo "deb [signed-by=/etc/apt/trusted.gpg.d/koide3_ppa.gpg] https://koide3.github.io/ppa/ubuntu2004 ./" | sudo tee /etc/apt/sources.list.d/koide3_ppa.list

Install GTSAM and gtsam_points

Without CUDA

sudo apt update && sudo apt install -y libgtsam-points-dev

With CUDA 12.2

sudo apt update && sudo apt install -y libgtsam-points-cuda12.2-dev

With CUDA 12.5

sudo apt update && sudo apt install -y libgtsam-points-cuda12.5-dev

Demo

cd gtsam_points
./build/demo_matching_cost_factors
./build/demo_bundle_adjustment
./build/demo_continuous_time
./build/demo_continuous_trajectory
./build/demo_colored_registration

Videos

License

This library is released under the MIT license.

Dependencies

Disclaimer

The test data in data directory are generated from The KITTI Vision Benchmark Suite and The Newer College Dataset. Because they employ Creative Commons BY-NC-SA License 3.0 and 4.0, the test data must not be used for commercial purposes.

References

[1] Zhang, "Iterative Point Matching for Registration of Free-Form Curve", IJCV1994
[2] Segal et al., "Generalized-ICP", RSS2005
[3] Koide et al., "Voxelized GICP for Fast and Accurate 3D Point Cloud Registration", ICRA2021
[4] Koide et al., "Globally Consistent 3D LiDAR Mapping with GPU-accelerated GICP Matching Cost Factors", RA-L2021
[5] Zhang and Singh, "Low-drift and real-time lidar odometry and mapping", Autonomous Robots, 2017
[6] Tixiao and Brendan, "LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain", IROS2018
[7] Park et al., "Colored Point Cloud Registration Revisited", ICCV2017
[8] Bellenbach et al., "CT-ICP: Real-time Elastic LiDAR Odometry with Loop Closure", 2021
[9] Liu and Zhang, "BALM: Bundle Adjustment for Lidar Mapping", IEEE RA-L, 2021
[10] Huang et al, "On Bundle Adjustment for Multiview Point Cloud Registration", IEEE RA-L, 2021
[11] Bai et al., "Faster-LIO: Lightweight Tightly Coupled Lidar-Inertial Odometry Using Parallel Sparse Incremental Voxels", IEEE RA-L, 2022
[12] Sommer et al., "Efficient Derivative Computation for Cumulative B-Splines on Lie Groups", CVPR2020