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.
- 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].
- IntegratedColorConsistencyFactor
Photometric ICP error [7]. - IntegratedColoredGICPFactor
Photometric ICP error + GICP geometric error [2][7].
- IntegratedCT_ICPFactor
Continuous Time ICP Factor [8]. - IntegratedCT_GICPFactor
Continuous Time ICP with GICP's D2D matching cost [2][8].
- PlaneEVMFactor and EdgeEVMFactor
Bundle adjustment factor based on Eigenvalue minimization [9]. - LsqBundleAdjustmentFactor
Bundle adjustment factor based on EVM and EF optimal condition satisfaction [10].
All the following optimizers were derived from the implementations in GTSAM.
- LevenbergMarquardtOptimizerExt
- ISAM2Ext
- IncrementalFixedLagSmootherExt
- 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.
- 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.
# 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 PPA [AMD64, ARM64]
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
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
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
sudo apt update && sudo apt install -y libgtsam-points-dev
sudo apt update && sudo apt install -y libgtsam-points-cuda12.2-dev
sudo apt update && sudo apt install -y libgtsam-points-cuda12.5-dev
cd gtsam_points
./build/demo_matching_cost_factors
./build/demo_bundle_adjustment
./build/demo_continuous_time
./build/demo_continuous_trajectory
./build/demo_colored_registration
- Multi-scan registration of 5 frames (= A graph with 10 registration factors)
- Bundle adjustment factor
- Continuous-time ICP factor
- Colored ICP factor
- Incremental voxel mapping and normal estimation
- SE3 BSpline interpolation
This library is released under the MIT license.
@software{gtsam_points,
author = {Kenji Koide},
title = {gtsam_points : A collection of GTSAM factors and optimizers for point cloud SLAM},
month = Aug,
year = 2024,
publisher = {Zenodo},
version = {1.0.4},
doi = {10.5281/zenodo.13378352},
url = {https://github.com/koide3/gtsam_points)}}
}
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.
[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