LiDAR Inertial SLAM on ROS2
Introduction.
With the recent announcement of LIO-SAM, a LiDAR Inertial SLAM, LiDAR Inertial SLAM came to my attention.
Below is a comparison taken from the LIO-SAM paper, and you can see that the LIO-SAM maps very nicely.
https://github.com/TixiaoShan/LIO-SAM/blob/master/config/doc/paper.pdf
The key points of LIO-SAM are point cloud distortion correction and initial position estimation of scan matching by IMU, but this key part was modularized and I could easily port it to my own SLAM, so I did it!
(See “3D Mapping with Graph SLAM using 3D LiDAR in ROS2” for the story of how I made my own SLAM.Github.
A map made from the SLAM I made.
What is LiDAR Inertial SLAM
LiDAR Inertial SLAM is, as the name implies, a Lidar SLAM with an IMU composite.
‘Doesn’t Lidar SLAM have a basic IMU compound?’ But it’s not.
There are two types of combined SLAM/IMU methods, Loosely coupled and Tightly coupled.
When we emphasize “Lidar Inertial”, we often mean tightly coupled, which incorporates the IMU into the scan-matching process.
Description of the package I made
The LiDAR Inertial SLAM I created in this article is a combination of ndt/gicp sequential SLAM and graph-based SLAM.
In creating the LiDAR Inertial SLAM, I modified the sequential SLAM part from the original package, so I will explain the implementation of the sequential SLAM.
Here is a rosgraph of just the sequential SLAM without the graph-based SLAM: imu_preintegration node performs the initial position estimation for scan matching by IMU, image_projection node performs point cloud distortion correction, and Perform scan matching in the scanmatcher node.rosgraph
Demo
The demo data is the casual_walk.bag in LIO-SAM.
The data uses a Velodyne VLP-16 and a 9-axis IMU at a few hundred Hz and about $1,000.
https://github.com/TixiaoShan/LIO-SAMThe following command.
rviz2 -d src/li_slam_ros2/scanmatcher/rviz/lio.rviz
ros2 launch scanmatcher lio.launch.py
ros2 bag play -s rosbag_v2 casual_walk.bag
The resulting 3D map is shown below.
Yellow path: path without loop closure, Green path: modified path, Red: map
Sounds like it will be fine compared to LIO-SAM!
That’s all, thank you for reading!