LiDAR Inertial SLAM on ROS2

Ryohei Sasaki
3 min readJul 30, 2020

--

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-SAM

The 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!

--

--