{"id":18008965,"url":"https://github.com/koide3/gtsam_points","last_synced_at":"2025-04-12T19:42:13.643Z","repository":{"id":248617649,"uuid":"819211095","full_name":"koide3/gtsam_points","owner":"koide3","description":"A collection of GTSAM factors and optimizers for point cloud SLAM","archived":false,"fork":false,"pushed_at":"2025-04-11T02:37:40.000Z","size":11183,"stargazers_count":269,"open_issues_count":10,"forks_count":38,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-11T03:33:53.356Z","etag":null,"topics":["bundle-adjustment","continuous-time","cuda","factor-graph","gpu","gtsam","kdtree","localization","mapping","point-cloud","registration","slam","voxelmap"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/koide3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-06-24T04:08:00.000Z","updated_at":"2025-04-11T02:35:58.000Z","dependencies_parsed_at":"2024-12-20T21:12:08.583Z","dependency_job_id":"a987bf78-0b98-45b5-a429-48dd4eb62fd7","html_url":"https://github.com/koide3/gtsam_points","commit_stats":null,"previous_names":["koide3/gtsam_points"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koide3%2Fgtsam_points","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koide3%2Fgtsam_points/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koide3%2Fgtsam_points/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koide3%2Fgtsam_points/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/koide3","download_url":"https://codeload.github.com/koide3/gtsam_points/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248625260,"owners_count":21135511,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bundle-adjustment","continuous-time","cuda","factor-graph","gpu","gtsam","kdtree","localization","mapping","point-cloud","registration","slam","voxelmap"],"created_at":"2024-10-30T02:08:20.386Z","updated_at":"2025-04-12T19:42:13.619Z","avatar_url":"https://github.com/koide3.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"# gtsam_points\n\nThis is a collection of [GTSAM](https://gtsam.org/) factors and optimizers for range-based SLAM.\n\nTested on Ubuntu 22.04 / 24.04 and CUDA 12.2, and NVIDIA Jetson Orin with **GTSAM 4.2a9**.\n\n\n[![DOI](https://zenodo.org/badge/819211095.svg)](https://zenodo.org/doi/10.5281/zenodo.13378351) [![Doc](https://img.shields.io/badge/API_list-Doxygen-blue)](https://koide3.github.io/gtsam_points/doc_cpp/index.html) [![Build](https://github.com/koide3/gtsam_points/actions/workflows/build.yml/badge.svg)](https://github.com/koide3/gtsam_points/actions/workflows/build.yml)\n\n## Factors\n\n### Scan Matching Factors\n\n- **IntegratedICPFactor \u0026 IntegratedPointToPlaneICPFactor**  \n    The conventional point-to-point and point-to-plane ICP [[1]](#ICP).\n- **IntegratedGICPFactor**  \n    Generalized ICP based on the distribution-to-distribution distance [[2]](#GICP).\n- **IntegratedVGICPFactor**  \n    GICP with voxel-based data association and multi-distribution-correspondence [[3]](#VGICP1)[[4]](#VGICP2).\n- **IntegratedVGICPFactorGPU**  \n    GPU implementation of VGICP [[3]](#VGICP1)[[4]](#VGICP2).  \n    To enable this factor, set ```-DBUILD_WITH_CUDA=ON```.\n- **IntegratedLOAMFactor**  \n    Matching cost factor based on the combination of point-to-plane and point-to-edge distances [[5]](#LOAM)[[6]](#LEGO).\n\n\n### Colored Scan Matching Factors\n\n- **IntegratedColorConsistencyFactor**  \n    Photometric ICP error [[7]](#COLORED).\n- **IntegratedColoredGICPFactor**  \n    Photometric ICP error + GICP geometric error [[2]](#GICP)[[7]](#COLORED).\n\n\n### Continuous-time ICP Factors\n\n- **IntegratedCT_ICPFactor**  \n    Continuous Time ICP Factor [[8]](#CTICP).\n- **IntegratedCT_GICPFactor**  \n    Continuous Time ICP with GICP's D2D matching cost [[2]](#GICP)[[8]](#CTICP).\n\n\n### Bundle Adjustment Factors\n\n- **PlaneEVMFactor and EdgeEVMFactor**  \n    Bundle adjustment factor based on Eigenvalue minimization [[9]](#BA_EVM).\n- **LsqBundleAdjustmentFactor**  \n    Bundle adjustment factor based on EVM and EF optimal condition satisfaction [[10]](#BA_LSQ).\n\n\n## Optimizers for GPU Factors\n\nAll the following optimizers were derived from the implementations in GTSAM.\n\n- **LevenbergMarquardtOptimizerExt**\n- **ISAM2Ext**\n- **IncrementalFixedLagSmootherExt**\n\n\n## Nearest Neighbor Search\n- **KdTree**\n    KdTree with parallel tree construction. Derived from [nanoflann](https://github.com/jlblancoc/nanoflann).\n- **IncrementalVoxelMap**\n    Incremental voxel-based nearest neighbor search (iVox) [[11]](#IVOX).\n- **IncrementalCovarianceVoxelMap**\n    Incremental voxelmap with online normal and covariance estimation.\n- **FastOccupancyGrid**\n    Binary occupancy grid with bit blocks and flat hashing for efficient point cloud overlap estimation.\n\n## Point Features and Global Point Cloud Registration\n- **Point Feature Histogram (PFH)** [[13]](#PFH)\n- **Fast Point Feature Histogram (FPFH)** [[14]](#FPFH)\n- **RANSAC**\n    RANSAC-based global point cloud registration. Supports 6DoF and 4DoF (XYZ + Yaw) estimation [[15]](#RANSAC).\n- **Graduated Non-Convexity**\n    Graduated Non-Contexity-based global point cloud registration. Supports 6DoF and 4DoF (XYZ + Yaw) estimation [[16]](#GNC).\n\n## Object Segmentation\n- **Region Growing Segmentation** [[17]](#RegionGrowing)\n- **Min-Cut Segmentation** [[18]](#MinCut)\n\n## Continuous-Time Trajectory (Under development)\n- **B-Spline**\n    Cubic B-Spline-based interpolation and linear acceleration and angular velocity expressions [[12]](#BSPLINE_D).\n- **ContinuousTrajectory**\n    Cubic B-Spline-based continuous trajectory representation for offline batch optimization.\n\n\n## Installation\n\n### Install from source\n\n```bash\n# Install gtsam\ngit clone https://github.com/borglab/gtsam\ncd gtsam\ngit checkout 4.2a9\n\nmkdir build \u0026\u0026 cd build\ncmake .. \\\n  -DGTSAM_BUILD_EXAMPLES_ALWAYS=OFF \\\n  -DGTSAM_BUILD_TESTS=OFF \\\n  -DGTSAM_WITH_TBB=OFF \\\n  -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF\n\nmake -j$(nproc)\nsudo make install\n\n# [optional] Install iridescence visualization library\n# This is required for only demo programs\nsudo apt install -y libglm-dev libglfw3-dev libpng-dev\ngit clone https://github.com/koide3/iridescence --recursive\nmkdir iridescence/build \u0026\u0026 cd iridescence/build\ncmake .. -DCMAKE_BUILD_TYPE=Release\nmake -j$(nproc)\nsudo make install\n\n## Build gtsam_points\ngit clone https://github.com/koide3/gtsam_points\nmkdir gtsam_points/build \u0026\u0026 cd gtsam_points/build\ncmake .. -DCMAKE_BUILD_TYPE=Release\n\n# Optional cmake arguments\n# cmake .. \\\n#   -DBUILD_DEMO=OFF \\\n#   -DBUILD_TESTS=OFF \\\n#   -DBUILD_WITH_CUDA=OFF \\\n#   -DBUILD_WITH_MARCH_NATIVE=OFF\n\nmake -j$(nproc)\nsudo make install\n```\n\n### Install from [PPA](https://github.com/koide3/ppa) [AMD64, ARM64]\n\n#### Setup PPA\n\n##### Ubuntu 24.04\n\n```bash\ncurl -s --compressed \"https://koide3.github.io/ppa/ubuntu2404/KEY.gpg\" | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/koide3_ppa.gpg \u003e/dev/null\necho \"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\n```\n\n##### Ubuntu 22.04\n\n```bash\ncurl -s --compressed \"https://koide3.github.io/ppa/ubuntu2204/KEY.gpg\" | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/koide3_ppa.gpg \u003e/dev/null\necho \"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\n```\n\n##### Ubuntu 20.04\n\n```bash\ncurl -s --compressed \"https://koide3.github.io/ppa/ubuntu2004/KEY.gpg\" | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/koide3_ppa.gpg \u003e/dev/null\necho \"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\n```\n\n#### Install GTSAM and gtsam_points\n\n##### Without CUDA\n\n```bash\nsudo apt update \u0026\u0026 sudo apt install -y libgtsam-points-dev\n```\n\n##### With CUDA 12.2\n\n```bash\nsudo apt update \u0026\u0026 sudo apt install -y libgtsam-points-cuda12.2-dev\n```\n\n##### With CUDA 12.5\n\n```bash\nsudo apt update \u0026\u0026 sudo apt install -y libgtsam-points-cuda12.5-dev\n```\n\n## Demo\n\n```bash\ncd gtsam_points\n./build/demo_matching_cost_factors\n./build/demo_bundle_adjustment\n./build/demo_continuous_time\n./build/demo_continuous_trajectory\n./build/demo_colored_registration\n```\n\n## Videos\n\n- [Multi-scan registration of 5 frames (= A graph with 10 registration factors)](https://youtu.be/HCXCWlx_VOM)\n- [Bundle adjustment factor](https://youtu.be/tuDV0GCOZXg)\n- [Continuous-time ICP factor](https://youtu.be/Xv2-qDlzQYM)\n- [Colored ICP factor](https://youtu.be/xEQmiFV79LU)\n- [Incremental voxel mapping and normal estimation](https://youtu.be/gDiKqQDc7yo)\n- [SE3 BSpline interpolation](https://youtu.be/etAI8go3b8U)\n\n## License\n\nThis library is released under the MIT license.\n\n## Citation\n\n```\n@software{gtsam_points,\n  author       = {Kenji Koide},\n  title        = {gtsam_points : A collection of GTSAM factors and optimizers for point cloud SLAM},\n  month        = Aug,\n  year         = 2024,\n  publisher    = {Zenodo},\n  version      = {1.0.4},\n  doi          = {10.5281/zenodo.13378352},\n  url          = {https://github.com/koide3/gtsam_points)}}\n}\n```\n\n## Dependencies\n- [Eigen](https://eigen.tuxfamily.org/index.php)\n- [nanoflann](https://github.com/jlblancoc/nanoflann)\n- [GTSAM](https://gtsam.org/)\n- [optional] [PCL]([https://www.openmp.org/](https://pointclouds.org/))\n- [optional] [OpenMP](https://www.openmp.org/)\n- [optional] [CUDA](https://developer.nvidia.com/cuda-toolkit)\n- [optional] [iridescence](https://github.com/koide3/iridescence)\n\n\n## Disclaimer\n\nThe test data in ```data``` directory are generated from [The KITTI Vision Benchmark Suite](http://www.cvlibs.net/datasets/kitti/) and [The Newer College Dataset](https://ori-drs.github.io/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.\n\n## References\n\u003ca name=\"ICP\"\u003e\u003c/a\u003e [1] Zhang, \"Iterative Point Matching for Registration of Free-Form Curve\", IJCV1994  \n\u003ca name=\"GICP\"\u003e\u003c/a\u003e [2] Segal et al., \"Generalized-ICP\", RSS2005  \n\u003ca name=\"VGICP1\"\u003e\u003c/a\u003e [3] Koide et al., \"Voxelized GICP for Fast and Accurate 3D Point Cloud Registration\", ICRA2021  \n\u003ca name=\"VGICP2\"\u003e\u003c/a\u003e [4] Koide et al., \"Globally Consistent 3D LiDAR Mapping with GPU-accelerated GICP Matching Cost Factors\", RA-L2021  \n\u003ca name=\"LOAM\"\u003e\u003c/a\u003e [5] Zhang and Singh, \"Low-drift and real-time lidar odometry and mapping\", Autonomous Robots, 2017  \n\u003ca name=\"LEGO\"\u003e\u003c/a\u003e [6] Tixiao and Brendan, \"LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain\", IROS2018  \n\u003ca name=\"COLORED\"\u003e\u003c/a\u003e [7] Park et al., \"Colored Point Cloud Registration Revisited\", ICCV2017  \n\u003ca name=\"CTICP\"\u003e\u003c/a\u003e [8] Bellenbach et al., \"CT-ICP: Real-time Elastic LiDAR Odometry with Loop Closure\", 2021  \n\u003ca name=\"BA_EVM\"\u003e\u003c/a\u003e [9] Liu and Zhang, \"BALM: Bundle Adjustment for Lidar Mapping\", IEEE RA-L, 2021  \n\u003ca name=\"BA_LSQ\"\u003e\u003c/a\u003e [10] Huang et al, \"On Bundle Adjustment for Multiview Point Cloud Registration\", IEEE RA-L, 2021  \n\u003ca name=\"IVOX\"\u003e\u003c/a\u003e [11] Bai et al., \"Faster-LIO: Lightweight Tightly Coupled Lidar-Inertial Odometry Using Parallel Sparse Incremental Voxels\", IEEE RA-L, 2022  \n\u003ca name=\"BSPLINE_D\"\u003e\u003c/a\u003e [12] Sommer et al., \"Efficient Derivative Computation for Cumulative B-Splines on Lie Groups\", CVPR2020  \n\u003ca name=\"PFH\"\u003e\u003c/a\u003e [13] Rusu et al., \"ligning Point Cloud Views using Persistent Feature Histograms\", IROS2008  \n\u003ca name=\"FPFH\"\u003e\u003c/a\u003e [14] Rusu et al., \"Fast Point Feature Histograms (FPFH) for 3D Registration\", ICRA2009  \n\u003ca name=\"RANSAC\"\u003e\u003c/a\u003e [15] Buch et al., \"Pose Estimation using Local Structure-Specific Shape and Appearance Context\", ICRA2013  \n\u003ca name=\"GNC\"\u003e\u003c/a\u003e [16] Zhou et al., \"Fast Global Registration\", ECCV2016  \n\u003ca name=\"RegionGrowing\"\u003e\u003c/a\u003e [17] Rabbani et al., \"Segmentation of Point Clouds Using Smoothness Constraint\", Remote Sensing and Spatial Information Sciences, 2006  \n\u003ca name=\"MinCut\"\u003e\u003c/a\u003e [18] Golovinskiy et al., \"Min-Cut Based Segmentation of Point Clouds\", S3DV-WS@ICCV2009  \n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoide3%2Fgtsam_points","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkoide3%2Fgtsam_points","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoide3%2Fgtsam_points/lists"}