Skip to content

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.

Tip

Visit Open source SLAM algorithms comparison page to see the comparison of several open-source SLAM implementations.

Tips#

Commonly used open-source SLAM implementations are lidar_slam_ros2 (LiDAR, IMU*, GNSS*) 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. According to its README, lidar_slam_ros2 writes an Autoware-compatible map bundle: a pointcloud_map/ directory, a map_projector_info.yaml file, and a Lanelet2 map. 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 NameExplanationRepository LinkLoop ClosureSensorsROS VersionDependencies
DLIODirect 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 correctiongithub.com/vectr-ucla/direct_lidar_inertial_odometry✔️Lidar
IMU
ROS 2PCL
Eigen
OpenMP
FAST-LIO-LCA computationally efficient and robust LiDAR-inertial odometry package with loop closure module and graph optimizationgithub.com/yanliang-wang/FAST_LIO_LC✔️Lidar
IMU
GPS [Optional]
ROS 1ROS Melodic
PCL >= 1.8
Eigen >= 3.3.4
GTSAM >= 4.0.0
FAST_LIO_SLAMFAST_LIO_SLAM is the integration of FAST_LIO and SC-PGO which is scan context based loop detection and GTSAM based pose-graph optimizationgithub.com/gisbi-kim/FAST_LIO_SLAM✔️Lidar
IMU
GPS [Optional]
ROS 1PCL >= 1.8
Eigen >= 3.3.4
FD-SLAMFD_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 matchinggithub.com/SLAMWang/FD-SLAM✔️Lidar
IMU [Optional]
GPS
ROS 1PCL
g2o
Suitesparse
GenZ-ICPGenZ-ICP is a Generalizable and Degeneracy-Robust LiDAR Odometry Using an Adaptive Weightinggithub.com/cocel-postech/genz-icp❌LidarROS 2No extra dependency
hdl_graph_slamAn 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 1PCL
g2o
OpenMP
IA-LIO-SAMIA_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 mappinggithub.com/minwoo0611/IA_LIO_SAM✔️Lidar
IMU
GPS
ROS 1GTSAM
ISCLOAMISCLOAM presents a robust loop closure detection approach by integrating both geometry and intensity informationgithub.com/wh200720041/iscloam✔️LidarROS 1Ubuntu 18.04
ROS Melodic
Ceres
PCL
GTSAM
OpenCV
KISS-ICPA simple and fast ICP algorithm for 3D point cloud registrationgithub.com/PRBonn/kiss-icp❌LidarROS 2No extra dependency
Kinematic-ICPKinematic-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 2No extra dependency
LeGO-LOAM-BORLeGO-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 approachgithub.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_SAMA 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 systemgithub.com/TixiaoShan/LIO-SAM✔️Lidar
IMU
GPS [Optional]
ROS 1
ROS 2
PCL
GTSAM
li_slam_ros2li_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 2PCL
GTSAM
Optimized-SC-F-LOAMAn 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 constraintsgithub.com/SlamCabbage/Optimized-SC-F-LOAM✔️LidarROS 1PCL
GTSAM
Ceres
SC-A-LOAMA real-time LiDAR SLAM package that integrates A-LOAM and ScanContext.github.com/gisbi-kim/SC-A-LOAM✔️LidarROS 1GTSAM >= 4.0
SC-LeGO-LOAMSC-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-stitchinggithub.com/gisbi-kim/SC-LeGO-LOAM✔️Lidar
IMU
ROS 1PCL
GTSAM