{"repo":"koide3/glim","free":true,"listed":false,"github":"https://github.com/koide3/glim","clone":"git clone https://github.com/koide3/glim.git","description":"GLIM: versatile and extensible point cloud-based 3D localization and mapping framework","language":"C++","stars":1743,"topics":["3d","gpu","imu","lidar","localization","mapping","rgb-d","ros","ros2","slam"],"license":"MIT","category":"slam_framework","readme_excerpt":"![GLIM](docs/assets/logo2.png \"GLIM Logo\")\n\n## Introduction\n\n**GLIM** is a versatile and extensible range-based 3D mapping framework.\n\n- ***Accuracy:*** GLIM is based on direct multi-scan registration error minimization on factor graphs that enables to accurately retain the consistency of mapping results. GPU acceleration is supported to maximize the mapping speed and quality.\n- ***Easy-to-use:*** GLIM offers an interactive map correction interface that enables the user to manually correct mapping failures and easily refine mapping results.\n- ***Versatility:*** As we eliminated sensor-specific processes, GLIM can be applied to any kind of range sensors including:\n    - Spinning-type LiDAR (e.g., Velodyne HDL32e and Ouster OS1-32)\n    - Non-repetitive scan LiDAR (e.g., Livox Avia and MID360)\n    - Solid-state LiDAR (e.g., Intel Realsense L515)\n    - RGB-D camera (e.g., Microsoft Azure Kinect)\n- ***Extensibility:*** GLIM provides the global callback slot mechanism that allows to access the internal states of the mapping process and insert additional constraints to the factor graph. We also release [glim_ext](https://github.com/koide3/glim_ext) that offers example implementations of several extension functions (e.g., explicit loop detection, LiDAR-Visual-Inertial odometry estimation).\n\n**Documentation: [https://koide3.github.io/glim/](https://koide3.github.io/glim/)**\n**Docker hub:** [koide3/glim_ros2](https://hub.docker.com/repository/docker/koide3/glim_ros2/tags)\n**Related packages:** [gtsam_points](https://github.com/koide3/gtsam_points), [glim](https://github.com/koide3/glim), ~~[glim_ros1](https://github.com/koide3/glim_ros1),~~ [glim_ros2](https://github.com/koide3/glim_ros2), [glim_ext](https://github.com/koide3/glim_ext)\n\nTested on Ubuntu 22.04 / 24.04 with CUDA 12.2 / 12.6 / 13.1, and NVIDIA Jetson Orin (Jetpack 6.1).\n\nIf you find this package useful for your project, please consider leaving a comment [here](https://github.com/koide3/glim/issues/19). It would help the author receive recognition in his organization and keep working on this project.\n\n[![Build](https://github.com/koide3/glim/actions/workflows/build.yml/badge.svg)](https://github.com/koide3/glim/actions/workflows/build.yml)\n[![ROS2](https://github.com/koide3/glim_ros2/actions/workflows/build.yml/badge.svg)](https://github.com/koide3/glim_ros2/actions/workflows/build.yml)\n[![EXT](https://github.com/koide3/glim_ext/actions/workflows/build.yml/badge.svg)](https://github.com/koide3/glim_ext/actions/workflows/build.yml)\n\n## Updates\n\n- 2026/07/12 : v1.2.2 released. Fix errors on GTSAM 4.3a1.\n- 2026/02/15 : v1.2.1 released. Backface culling support.\n- 2026/01/24 : v1.2.0 released. Added Support for both **GTSAM 4.2a9** and **GTSAM 4.3a0**, and **CUDA 13.1**. Added intensity visualization support.\n- 2025/06/15 : The base GTSAM version has been changed. Make sure you have rebuilt and installed **GTSAM 4.3a0** and **gtsam_points 1.2.0**.\n\n## Dependencies\n### Mandatory\n- [Eigen](https://eigen.tuxfamily.org/index.php)\n- [nanoflann](https://github.com/jlblancoc/nanoflann)\n- [GTSAM](https://github.com/borglab/gtsam)\n- [gtsam_points](https://github.com/koide3/gtsam_points)\n\n### Optional\n- [CUDA](https://developer.nvidia.com/cuda-toolkit)\n- [OpenCV](https://opencv.org/)\n- [OpenMP](https://www.openmp.org/)\n- [ROS/ROS2](https://www.ros.org/)\n- [Iridescence](https://github.com/koide3/iridescence)\n\n## Gallery\n\nSee more at [Video Gallery](https://github.com/koide3/glim/wiki/Video-Gallery).\n\n| Mapping with various range sensors | Outdoor driving test with Livox MID360 |\n|---|---|\n|[<img width=\"480\" src=\"https://github.com/user-attachments/assets/95e153cd-1538-4ca6-8dd0-691e920dccd9\">](https://www.youtube.com/watch?v=_fwK4awbW18)|[<img width=\"480\" src=\"https://github.com/user-attachments/assets/6b337369-a32c-4b07-b0e0-b63f6747cdab\">](https://www.youtube.com/watch?v=CIfRqeV0irE)|\n\n| Manual loop closing | Merging multiple mapping sessions |\n|---|---|\n|![Image](https://github.com/user-attachments/assets/0f02950a-6b7b-437c-a100-21d6575f7c93)|![Image](https://github.com/user-attachments/assets/c77cca29-921b-4e1c-9583-2b962ccda2cb)|\n\n| Object segmentation and removal |  |\n|---|---|\n|![Image](https://github.com/user-attachments/assets/fd1038e7-c33d-44b1-86f9-8e6474c04210)| |\n\n## Estimation modules\n\nGLIM provides several estimation modules to cover use scenarios, from robust and accurate mapping with a GPU to lightweight real-time mapping with a low-specification PC like Raspberry Pi.\n\n![modules](docs/assets/module.png)\n\n## Thirdparty works using GLIM\n\nIf you are willing to add your work here, feel free to let me know in [this thread](https://github.com/koide3/glim/issues/19) :)\n\n- [kamibukuro5656/MapCleaner_Unofficial](https://github.com/kamibukuro5656/MapCleaner_Unofficial)\n\n## License\n\nThis package is released under the MIT license. For commercial support, please contact ```k.koide@aist.go.jp```.\n\nIf you find this package useful for your project, please consider leaving a comment [here](https://github.com/koide3/glim/issues/19). It would help the author receive recognition in his organization and keep working on this project. Please also cite the following paper if you use this package in your academic work.\n\n## Related work\n\nKoide et al., \"GLIM: 3D Range-Inertial Localization and Mapping with GPU-Accelerated Scan Matching Factors\", Robotics and Autonomous Systems, 2024, [[DOI]](https://doi.org/10.1016/j.robot.2024.104750) [[Arxiv]](https://arxiv.org/abs/2407.10344)\n\nThe GLIM framework involves ideas expanded from the following papers:\n- (LiDAR-IMU odometry and mapping) \"Globally Consistent and Tightly Coupled 3D LiDAR Inertial Mapping\", ICRA2022 [[DOI]](https://doi.org/10.1109/ICRA46639.2022.9812385)\n- (Global registration error minimization) \"Globally Consistent 3D LiDAR Mapping with GPU-accelerated GICP Matching Cost Factors\", IEEE RA-L, 2021, [[DOI]](https://doi.org/10.1109/LRA.2021.3113043)\n- (GPU-accelerated scan matching) \"Voxelized GICP for Fast and Accurate 3D Point Cloud Registration\", ICRA2021, [[DOI]](https://doi.org/10.1109/ICRA48506.2021.9560835)\n\n## Contact\n[Kenji Koide](https://staff.aist.go.jp/k.koide/), k.koide@aist.go.jp<br>\nNational Institute of Advanced Industrial Science and Technology (AIST), Japan\n\n","default_branch":"master","files":211,"tree":[".clang-format",".dockerignore",".github/ISSUE_TEMPLATE/bug_report.md",".github/ISSUE_TEMPLATE/feature_request.md",".github/workflows/build.yml",".github/workflows/gendoc.yml",".gitignore",".gitmodules","CMakeLists.txt","LICENSE","README.md","cmake/glim-config.cmake.in","config/config.json","config/config_global_mapping_cpu.json","config/config_global_mapping_gpu.json","config/config_global_mapping_pose_graph.json","config/config_logging.json","config/config_odometry_cpu.json","config/config_odometry_ct.json","config/config_odometry_gpu.json","config/config_preprocess.json","config/config_ros.json","config/config_sensors.json","config/config_sub_mapping_cpu.json","config/config_sub_mapping_gpu.json","config/config_sub_mapping_passthrough.json","config/config_viewer.json","docker/ubuntu/Dockerfile.gcc","docker/ubuntu/Dockerfile.llvm","docs/Doxyfile","docs/Makefile","docs/api.md","docs/assets/build.svg","docs/assets/favicon.png","docs/assets/frontend_status.png","docs/assets/glim_color.png","docs/assets/glim_gray.png","docs/assets/glim_inv.png","docs/assets/logo2.png","docs/assets/logo2_w.png","docs/assets/module.png","docs/assets/ros1.svg","docs/assets/ros2.svg","docs/css/custom.css","docs/demo.md","docs/docker.md","docs/edit.md","docs/extend.md","docs/extensions.md","docs/faq.md","docs/index.md","docs/installation.md","docs/merge.md","docs/parameters.md","docs/quickstart.md","include/glim/common/cloud_covariance_estimation.hpp","include/glim/common/cloud_deskewing.hpp","include/glim/common/imu_integration.hpp","include/glim/common/imu_validation.hpp","include/glim/mapping/async_global_mapping.hpp","include/glim/mapping/async_sub_mapping.hpp","include/glim/mapping/callbacks.hpp","include/glim/mapping/global_mapping.hpp","include/glim/mapping/global_mapping_base.hpp","include/glim/mapping/global_mapping_pose_graph.hpp","include/glim/mapping/sub_map.hpp","include/glim/mapping/sub_mapping.hpp","include/glim/mapping/sub_mapping_base.hpp","include/glim/mapping/sub_mapping_passthrough.hpp","include/glim/odometry/async_odometry_estimation.hpp","include/glim/odometry/callbacks.hpp","include/glim/odometry/estimation_frame.hpp","include/glim/odometry/initial_state_estimation.hpp","include/glim/odometry/loose_initial_state_estimation.hpp","include/glim/odometry/odometry_estimation_base.hpp","include/glim/odometry/odometry_estimation_cpu.hpp","include/glim/odometry/odometry_estimation_ct.hpp","include/glim/odometry/odometry_estimation_gpu.hpp","include/glim/odometry/odometry_estimation_imu.hpp","include/glim/preprocess/callbacks.hpp","include/glim/preprocess/cloud_preprocessor.hpp","include/glim/preprocess/preprocessed_frame.hpp","include/glim/util/callback_slot.hpp","include/glim/util/concurrent_vector.hpp","include/glim/util/config.hpp","include/glim/util/config_impl.hpp","include/glim/util/convert_to_string.hpp","include/glim/util/data_validator.hpp","include/glim/util/debug.hpp","include/glim/util/extension_module.hpp","include/glim/util/extension_module_ros.hpp","include/glim/util/extension_module_ros2.hpp","include/glim/util/interpolation_helper.hpp","include/glim/util/load_module.hpp","include/glim/util/logging.hpp","include/glim/util/raw_points.hpp","include/glim/util/ros_cloud_converter.hpp","include/glim/util/serialization.hpp","include/glim/util/time_keeper.hpp","include/glim/util/trajectory_manager.hpp","include/glim/viewer/editor/map_cell.hpp","include/glim/viewer/editor/points_selector.hpp","include/glim/viewer/interactive/bundle_adjustment_modal.hpp","include/glim/viewer/interactive/manual_loop_close_modal.hpp","include/glim/viewer/interactive_viewer.hpp","include/glim/viewer/map_editor.hpp","include/glim/viewer/offline_viewer.hpp","include/glim/viewer/standard_viewer.hpp","include/glim/viewer/standard_viewer_mem.hpp","mkdocs.yml","package.xml","src/glim/common/cloud_covariance_estimation.cpp","src/glim/common/cloud_deskewing.cpp","src/glim/common/imu_integration.cpp","src/glim/common/imu_validation.cpp","src/glim/mapping/async_global_mapping.cpp","src/glim/mapping/async_sub_mapping.cpp","src/glim/mapping/callbacks.cpp","src/glim/mapping/global_mapping.cpp","src/glim/mapping/global_mapping_base.cpp","src/glim/mapping/global_mapping_create.cpp","src/glim/mapping/global_mapping_pose_graph.cpp","src/glim/mapping/global_mapping_pose_graph_create.cpp","src/glim/mapping/sub_map.cpp","src/glim/mapping/sub_mapping.cpp","src/glim/mapping/sub_mapping_base.cpp","src/glim/mapping/sub_mapping_create.cpp","src/glim/mapping/sub_mapping_passthrough.cpp","src/glim/mapping/sub_mapping_passthrough_create.cpp","src/glim/odometry/async_odometry_estimation.cpp","src/glim/odometry/callbacks.cpp","src/glim/odometry/estimation_frame.cpp","src/glim/odometry/initial_state_estimation.cpp","src/glim/odometry/loose_initial_state_estimation.cpp","src/glim/odometry/odometry_estimation_base.cpp","src/glim/odometry/odometry_estimation_cpu.cpp","src/glim/odometry/odometry_estimation_cpu_create.cpp","src/glim/odometry/odometry_estimation_ct.cpp","src/glim/odometry/odometry_estimation_ct_create.cpp","src/glim/odometry/odometry_estimation_gpu.cpp","src/glim/odometry/odometry_estimation_gpu_create.cpp","src/glim/odometry/odometry_estimation_imu.cpp","src/glim/preprocess/callbacks.cpp","src/glim/preprocess/cloud_preprocessor.cpp","src/glim/util/config.cpp","src/glim/util/data_validator.cpp","src/glim/util/debug.cpp","src/glim/util/export_factors.cpp","src/glim/util/extension_module.cpp","src/glim/util/load_module.cpp","src/glim/util/logging.cpp","src/glim/util/serialization.cpp","src/glim/util/time_keeper.cpp","src/glim/util/trajectory_manager.cpp","src/glim/viewer/editor/map_cell.cpp","src/glim/viewer/editor/points_selector.cpp","src/glim/viewer/interactive/bundle_adjustment_modal.cpp","src/glim/viewer/interactive/manual_loop_close_modal.cpp","src/glim/viewer/interactive_viewer.cpp","src/glim/viewer/map_editor.cpp","src/glim/viewer/memory_monitor.cpp","src/glim/viewer/offline_viewer.cpp","src/glim/viewer/standard_viewer.cpp","src/glim/viewer/standard_viewer_callbacks.cpp","src/glim/viewer/standard_viewer_mem.cpp","src/glim/viewer/standard_viewer_ui.cpp","thirdparty/json/include/nlohmann/adl_serializer.hpp","thirdparty/json/include/nlohmann/byte_container_with_subtype.hpp","thirdparty/json/include/nlohmann/detail/abi_macros.hpp","thirdparty/json/include/nlohmann/detail/conversions/from_json.hpp","thirdparty/json/include/nlohmann/detail/conversions/to_chars.hpp","thirdparty/json/include/nlohmann/detail/conversions/to_json.hpp","thirdparty/json/include/nlohmann/detail/exceptions.hpp","thirdparty/json/include/nlohmann/detail/hash.hpp","thirdparty/json/include/nlohmann/detail/input/binary_reader.hpp","thirdparty/json/include/nlohmann/detail/input/input_adapters.hpp","thirdparty/json/include/nlohmann/detail/input/json_sax.hpp","thirdparty/json/include/nlohmann/detail/input/lexer.hpp","thirdparty/json/include/nlohmann/detail/input/parser.hpp","thirdparty/json/include/nlohmann/detail/input/position_t.hpp","thirdparty/json/include/nlohmann/detail/iterators/internal_iterator.hpp","thirdparty/json/include/nlohmann/detail/iterators/iter_impl.hpp","thirdparty/json/include/nlohmann/detail/iterators/iteration_proxy.hpp","thirdparty/json/include/nlohmann/detail/iterators/iterator_traits.hpp","thirdparty/json/include/nlohmann/detail/iterators/json_reverse_iterator.hpp","thirdparty/json/include/nlohmann/detail/iterators/primitive_iterator.hpp","thirdparty/json/include/nlohmann/detail/json_custom_base_class.hpp","thirdparty/json/include/nlohmann/detail/json_pointer.hpp","thirdparty/json/include/nlohmann/detail/json_ref.hpp","thirdparty/json/include/nlohmann/detail/macro_scope.hpp","thirdparty/json/include/nlohmann/detail/macro_unscope.hpp","thirdparty/json/include/nlohmann/detail/meta/call_std/begin.hpp","thirdparty/json/include/nlohmann/detail/meta/call_std/end.hpp","thirdparty/json/include/nlohmann/detail/meta/cpp_future.hpp","thirdparty/json/include/nlohmann/detail/meta/detected.hpp","thirdparty/json/include/nlohmann/detail/meta/identity_tag.hpp","thirdparty/json/include/nlohmann/detail/meta/is_sax.hpp","thirdparty/json/include/nlohmann/detail/meta/std_fs.hpp","thirdparty/json/include/nlohmann/detail/meta/type_traits.hpp","thirdparty/json/include/nlohmann/detail/meta/void_t.hpp","thirdparty/json/include/nlohmann/detail/output/binary_writer.hpp","thirdparty/json/include/nlohmann/detail/output/output_adapters.hpp","thirdparty/json/include/nlohmann/detail/output/serializer.hpp","thirdparty/json/include/nlohmann/detail/string_concat.hpp","thirdparty/json/include/nlohmann/detail/string_escape.hpp","thirdparty/json/include/nlohmann/detail/value_t.hpp","thirdparty/json/include/nlohmann/json.hpp","thirdparty/json/include/nlohmann/json_fwd.hpp","thirdparty/json/include/nlohmann/ordered_map.hpp","thirdparty/json/include/nlohmann/thirdparty/hedley/hedley.hpp","thirdparty/json/include/nlohmann/thirdparty/hedley/hedley_undef.hpp"],"storefront":"/r/koide3","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/koide3/glim/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}