This repository implements an all-in-one and ready-to-use LiDAR-inertial odometry system for Livox LiDAR. The system is developed based on the open-source odometry framework LIO-Livox to get the odometry information in our front-end part. Besides, we have added more constraints and features to enhance the mapping performance.
At the same time, we provide you one simple lidar-map based localization module in Livox-Localization.
We only describe the new features added to our baseline framework LIO-Livox. For the amazing features developed by LIO-Livox, please check their own repository.
In the LCD part, we use the ScanContext to perform the loop closure detection and then add the loop closure constrains to the optimization solver. With the LCD module, we are able to close the gap and compensate the accumulated translation error of the scan matching in large environments.
with Loop Closure | without Loop Closure |
---|---|
To avoid the drifting alongside the Z-axis, the general problem occurred in LOAM (LiDAR Odometry and Mapping) algorithms, we add the the ground constraints ( the plane detection is done by LIO-Livox) to the optimization solver as hdl_graph_slam.
with Ground Constrain | without Ground Constrain |
---|---|
In practice, we usually collect environment data in multiple times, thus we need one functionality to fuse the map information from multiple rosbags. In this implementation, we use GPS information (optionally) to convert LiDAR scans collected in different time into one coordinate system and then use ScanContext and ICP to find fine matching result. At the same time, we maintain one lifelong optimization vector in our backend to store the previous key-frames. Through this approach, we are able to connect scans in different collections.
We also offer the GPS factor to aid the mapping process. This is only one optional choice. Without the GPS information, the whole system could also work.
interactive_slam is an open-source 3D LiDAR-based mapping framework. We add one functionality to output the mapping result in the format compatible with interactive_slam, by this, you can easily edit your mapping result and get one more accurate LiDAR map. At the same time, if you have one camera alongside the Livox, we also offer one dummy moving objects removal function with aid of mmdection and easy LiDAR points projection.
Represented in interactive_slam | Moving Object Removal |
---|---|
Our framework is developed based on the open-source framework LIO-Livox for odometry part, ScanContext for loop closure part and interactive_slam for map-editing part (if you need), so technically, please refer to these repos for detailed information.
For one quick and convenient test, we are offering you a Docker Image with DockerHub.
Please check the DockerHub Link for more information.
- Pull the docker image.
docker pull siyuanhuang95/livox_slam:release
- Execute the docker run command. You can use -v to bind the docker to your local machine as you wish.
docker run --gpus all -it -p 3316:22 --device=/dev/dri --group-add video --volume=/tmp/.X11-unix:/tmp/.X11-unix --env="DISPLAY=$DISPLAY" siyuanhuang95/livox_slam:release /bin/bash
- To allow the RVIZ in Docker to run in the host PC. In the local mashine:
xhost +
- Clone the repository and catkin_make
cd ~/catkin_ws/src
git clone https://github.com/PJLab-ADG/Livox-Mapping.git
cd ..
catkin_make
- Remember to source the livox_ros_driver before build (follow livox_ros_driver)
Before running the mapping functionality, please make sure the sensor data are published to the correct rostopic.
- Livox LiDAR: /livox/lidar
- IMU: /livox/imu
- GPS: /localization/navstate_info
- In one terminal, launch the mapping thread
# If you don't have the GPS data
cd ~/catkin_ws
source devel/setup.bash
roslaunch livox_mapping livox_mapping.launch save_path:="PATH_TO_SAVE_SLAM_POSE_RESULT"
# If you have the GPS data
cd ~/catkin_ws
source devel/setup.bash
roslaunch livox_mapping livox_mapping.launch useRTK:="true" save_path:="PATH_TO_SAVE_SLAM_POSE_RESULT"
- In another terminal, launch the odometry thread
cd ~/catkin_ws
source devel/setup.bash
roslaunch livox_odometry livox_odometry.launch save_path:="PATH_TO_SAVE_ODOM_RESULT_in_txt"
- In another terminal, play the rosbag
rosbag play YOUR_ROSBAG.bag
If you have more rosbags collected in one same area, you can restart odometry thread at the end of the first odometry thread run and play the next package.
- In the terminal for odometry thread, use Ctrl+C to shut down the old odometry thread.
- In the terminal for odometry thread, use the command below to start one new odometry thread
roslaunch livox_odometry livox_odometry.launch save_path:="PATH_TO_SAVE_ODOM_RESULT_in_txt"
- Play one new rosbag.
For the ease of usage, we are providing several test rosbags collected in one industrial park located in Shanghai. Please be aware that all codes and datasets included in this repository are for academic research purposes only. Other usages are NOT encouraged, and it is at your own risk. If You have any concerns including privacy, please contact us by sending an e-mail to huangsiyuan@pjlab.org.cn
The dataset can be downloaded through the Baidu Netdisk with:
Link:https://pan.baidu.com/s/17ElBOWiFVr68975FtXY8ZA
Password:pjop
Thanks for the authors of LIO-Livox, ScanContext,Fast-LIO-SLAM and interactive_slam.
- If you have any questions, contact here please
- Send email to shibotian@pjlab.org.cn [Preferred] or huangsiyuan@pjlab.org.cn.
- Report issues on GitHub [Preferred].
- For other coorperation possibilities, please contact shibotian@pjlab.org.cn [Preferred].