Home

Awesome

LIO-SAM

A real-time lidar-inertial odometry package. We strongly recommend the users read this document thoroughly and test the package with the provided dataset first. A video of the demonstration of the method can be found on YouTube.

<p align='center'> <img src="./config/doc/demo.gif" alt="drawing" width="800"/> </p> <p align='center'> <img src="./config/doc/device-hand-2.png" alt="drawing" width="200"/> <img src="./config/doc/device-hand.png" alt="drawing" width="200"/> <img src="./config/doc/device-jackal.png" alt="drawing" width="200"/> <img src="./config/doc/device-livox-horizon.png" alt="drawing" width="200"/> </p>

Menu

System architecture

<p align='center'> <img src="./config/doc/system.png" alt="drawing" width="800"/> </p>

We design a system that maintains two graphs and runs up to 10x faster than real-time.

Dependency

This is the original ROS1 implementation of LIO-SAM. For a ROS2 implementation see branch ros2.

Install

Use the following commands to download and compile the package.

cd ~/catkin_ws/src
git clone https://github.com/TixiaoShan/LIO-SAM.git
cd ..
catkin_make

Using Docker

Build image (based on ROS1 Kinetic):

docker build -t liosam-kinetic-xenial .

Once you have the image, start a container as follows:

docker run --init -it -d \
  -v /etc/localtime:/etc/localtime:ro \
  -v /etc/timezone:/etc/timezone:ro \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -e DISPLAY=$DISPLAY \
  liosam-kinetic-xenial \
  bash

Prepare lidar data

The user needs to prepare the point cloud data in the correct format for cloud deskewing, which is mainly done in "imageProjection.cpp". The two requirements are:

Prepare IMU data

<p align='center'> <img src="./config/doc/imu-transform.png" alt="drawing" width="800"/> </p> <p align='center'> <img src="./config/doc/imu-debug.gif" alt="drawing" width="800"/> </p>

Sample datasets

Run the package

  1. Run the launch file:
roslaunch lio_sam run.launch
  1. Play existing bag files:
rosbag play your-bag.bag -r 3

Other notes

<p align='center'> <img src="./config/doc/loop-closure.gif" alt="drawing" width="350"/> <img src="./config/doc/loop-closure-2.gif" alt="drawing" width="350"/> </p> <p align='center'> <img src="./config/doc/gps-demo.gif" alt="drawing" width="400"/> </p> <p align='center'> <img src="./config/doc/kitti-map.png" alt="drawing" width="300"/> <img src="./config/doc/kitti-demo.gif" alt="drawing" width="300"/> </p> <p align='center'> <img src="./config/doc/ouster-device.jpg" alt="drawing" width="300"/> <img src="./config/doc/ouster-demo.gif" alt="drawing" width="300"/> </p> <p align='center'> <img src="./config/doc/livox-demo.gif" alt="drawing" width="600"/> </p>

Service

Issues

Paper

Thank you for citing LIO-SAM (IROS-2020) if you use any of this code.

@inproceedings{liosam2020shan,
  title={LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping},
  author={Shan, Tixiao and Englot, Brendan and Meyers, Drew and Wang, Wei and Ratti, Carlo and Rus Daniela},
  booktitle={IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
  pages={5135-5142},
  year={2020},
  organization={IEEE}
}

Part of the code is adapted from LeGO-LOAM.

@inproceedings{legoloam2018shan,
  title={LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain},
  author={Shan, Tixiao and Englot, Brendan},
  booktitle={IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
  pages={4758-4765},
  year={2018},
  organization={IEEE}
}

TODO

Related Package

Acknowledgement