Available Open Source SLAM#
This page provides the list of available open source Simultaneous Localization And Mapping (SLAM) implementation that can be used to generate a point cloud (.pcd) map file.
Selecting which implementation to use#
Lidar odometry drifts accumulatively as time goes by and there is solutions to solve that problem such as graph optimization, loop closure and using gps sensor to decrease accumulative drift error. Because of that, a SLAM algorithm should have loop closure feature, graph optimization and should use gps sensor. Additionally, some of the algorithms are using IMU sensor to add another factor to graph for decreasing drift error. While some of the algorithms requires 9-axis IMU sensor strictly, some of them requires only 6-axis IMU sensor or not even using the IMU sensor. Before choosing an algorithm to create maps for Autoware please consider these factors depends on your sensor setup or expected quality of generated map.
Tips#
Commonly used open-source SLAM implementations are lidarslam-ros2 (LiDAR, IMU*) and LIO-SAM (LiDAR, IMU, GNSS). The required sensor data for each algorithm is specified in the parentheses, where an asterisk (*) indicates that such sensor data is optional. For supported LiDAR models, please check the GitHub repository of each algorithm. While these ROS 2-based SLAM implementations can be easily installed and used directly on the same machine that runs Autoware, it is important to note that they may not be as well-tested or as mature as ROS 1-based alternatives.
The notable open-source SLAM implementations that are based on ROS 1 include hdl-graph-slam (LiDAR, IMU*, GNSS*), LeGO-LOAM (LiDAR, IMU*), LeGO-LOAM-BOR (LiDAR), and LIO-SAM (LiDAR, IMU, GNSS).
Most of these algorithms already have a built-in loop-closure and pose graph optimization. However, if the built-in, automatic loop-closure fails or does not work correctly, you can use Interactive SLAM to adjust and optimize a pose graph manually.
List of Third Party SLAM Implementations#
Package Name | Explanation | Repository Link | Loop Closure | Sensors | ROS Version | Dependencies |
---|---|---|---|---|---|---|
DLIO | Direct LiDAR-Inertial Odometry is a new lightweight LiDAR-inertial odometry algorithm with a novel coarse-to-fine approach in constructing continuous-time trajectories for precise motion correction | github.com/vectr-ucla/direct_lidar_inertial_odometry | ✔️ | Lidar IMU |
ROS 2 | PCL Eigen OpenMP |
FAST-LIO-LC | A computationally efficient and robust LiDAR-inertial odometry package with loop closure module and graph optimization | github.com/yanliang-wang/FAST_LIO_LC | ✔️ | Lidar IMU GPS [Optional] |
ROS 1 | ROS Melodic PCL >= 1.8 Eigen >= 3.3.4 GTSAM >= 4.0.0 |
FAST_LIO_SLAM | FAST_LIO_SLAM is the integration of FAST_LIO and SC-PGO which is scan context based loop detection and GTSAM based pose-graph optimization | github.com/gisbi-kim/FAST_LIO_SLAM | ✔️ | Lidar IMU GPS [Optional] |
ROS 1 | PCL >= 1.8 Eigen >= 3.3.4 |
FD-SLAM | FD_SLAM is Feature&Distribution-based 3D LiDAR SLAM method based on Surface Representation Refinement. In this algorithm novel feature-based Lidar odometry used for fast scan-matching, and used a proposed UGICP method for keyframe matching | github.com/SLAMWang/FD-SLAM | ✔️ | Lidar IMU [Optional] GPS |
ROS 1 | PCL g2o Suitesparse |
GenZ-ICP | GenZ-ICP is a Generalizable and Degeneracy-Robust LiDAR Odometry Using an Adaptive Weighting | github.com/cocel-postech/genz-icp | ❌ | Lidar | ROS 2 | No extra dependency |
hdl_graph_slam | An open source ROS package for real-time 6DOF SLAM using a 3D LIDAR. It is based on 3D Graph SLAM with NDT scan matching-based odometry estimation and loop detection. It also supports several graph constraints, such as GPS, IMU acceleration (gravity vector), IMU orientation (magnetic sensor), and floor plane (detected in a point cloud) | github.com/koide3/hdl_graph_slam | ✔️ | Lidar IMU [Optional] GPS [Optional] |
ROS 1 | PCL g2o OpenMP |
IA-LIO-SAM | IA_LIO_SLAM is created for data acquisition in unstructured environment and it is a framework for Intensity and Ambient Enhanced Lidar Inertial Odometry via Smoothing and Mapping that achieves highly accurate robot trajectories and mapping | github.com/minwoo0611/IA_LIO_SAM | ✔️ | Lidar IMU GPS |
ROS 1 | GTSAM |
ISCLOAM | ISCLOAM presents a robust loop closure detection approach by integrating both geometry and intensity information | github.com/wh200720041/iscloam | ✔️ | Lidar | ROS 1 | Ubuntu 18.04 ROS Melodic Ceres PCL GTSAM OpenCV |
KISS-ICP | A simple and fast ICP algorithm for 3D point cloud registration | github.com/PRBonn/kiss-icp | ❌ | Lidar | ROS 2 | No extra dependency |
Kinematic-ICP | Kinematic-ICP is a LiDAR odometry approach that explicitly incorporates the kinematic constraints of mobile robots into the classic point-to-point ICP algorithm. | github.com/PRBonn/kinematic-icp | ❌ | Lidar Odometry |
ROS 2 | No extra dependency |
LeGO-LOAM-BOR | LeGO-LOAM-BOR is improved version of the LeGO-LOAM by improving quality of the code, making it more readable and consistent. Also, performance is improved by converting processes to multi-threaded approach | github.com/facontidavide/LeGO-LOAM-BOR ROS2 fork: /github.com/eperdices/LeGO-LOAM-SR | ✔️ | Lidar IMU |
ROS 1 ROS 2 |
ROS 1/2 PCL GTSAM |
LIO_SAM | A framework that achieves highly accurate, real-time mobile robot trajectory estimation and map-building. It formulates lidar-inertial odometry atop a factor graph, allowing a multitude of relative and absolute measurements, including loop closures, to be incorporated from different sources as factors into the system | github.com/TixiaoShan/LIO-SAM | ✔️ | Lidar IMU GPS [Optional] |
ROS 1 ROS 2 |
PCL GTSAM |
li_slam_ros2 | li_slam package is a combination of lidarslam_ros2 and the LIO-SAM IMU composite method. | github.com/rsasaki0109/li_slam_ros2 | ✔️ | Lidar IMU GPS [Optional] |
ROS 2 | PCL GTSAM |
Optimized-SC-F-LOAM | An improved version of F-LOAM and uses an adaptive threshold to further judge the loop closure detection results and reducing false loop closure detections. Also it uses feature point-based matching to calculate the constraints between a pair of loop closure frame point clouds and decreases time consumption of constructing loop frame constraints | github.com/SlamCabbage/Optimized-SC-F-LOAM | ✔️ | Lidar | ROS 1 | PCL GTSAM Ceres |
SC-A-LOAM | A real-time LiDAR SLAM package that integrates A-LOAM and ScanContext. | github.com/gisbi-kim/SC-A-LOAM | ✔️ | Lidar | ROS 1 | GTSAM >= 4.0 |
SC-LeGO-LOAM | SC-LeGO-LOAM integrated LeGO-LOAM for lidar odometry and 2 different loop closure methods: ScanContext and Radius search based loop closure. While ScanContext is correcting large drifts, radius search based method is good for fine-stitching | github.com/gisbi-kim/SC-LeGO-LOAM | ✔️ | Lidar IMU |
ROS 1 | PCL GTSAM |