Skip to content

hku-mars/Voxel-SLAM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Voxel-SLAM: A Complete, Accurate, and Versatile LiDAR-Inertial SLAM System

1. Introduction

Voxel-SLAM is a complete, accurate, and versatile LiDAR-inertial SLAM system that fully utilizes short-term, mid-term, long-term, and multi-map data associations. It includes five modules: initialization, odometry, local mapping, loop closure, and global mapping. The initialization can provide accurate states and local map in a static or dynamic initial state. The odometry estimates current states and detect potential system divergence. The local mapping refine the states and local map within the sliding window by a LiDAR-inertial BA. The loop closure can detect in multiple sessions. The global mapping refine the global map with an efficient hierarchical global BA. The system overview is:

1.1 Related Video

The video of Voxel-SLAM is available on YouTube.

1.2 Related works

Related paper is available on arxiv.

1.3 Competitions

Voxel-SLAM has been served as a subsystem to participate in ICRA HILTI 2023 SLAM Challenge (2nd place on the LiDAR single-session) and ICCV 2023 SLAM Challenge (1st place on the LiDAR inertial track).

2. Prerequisited

Ubuntu=20.04. ROS =Noetic. PCL=1.10. Eigen=3.3.7

GTSAM=4.0.3

livox_ros_driver

3. Build

cd ~/catkin_ws/src
git clone https://github.com/hku-mars/Voxel-SLAM
cd ../ && catkin_make
source ~/catkin_ws/devel/setup.bash

4. Run Voxel-SLAM

4.1 Livox Avia

The online relocalization experiment rosbag. Download: Onedrive (Google Drive)

roslaunch roslaunch voxel_slam vxlm_avia.launch
// Using the "--pause" guarantees the bag benning time are the same in different runs
// Press the Space to start
rosbag play compus_elevator.bag --pause 

In the elevator, the system continues to restart until stepping out of the evevator. The blue point cloud is the map from initialization.

After the rosbag is done, your may find the map is inconsistent as shown in the video. Run

rosparam set finish true

to launch the final global mapping (global bundle adjustment) to refine the global map.

4.2 HILTI 2023 (Multi-Session)

The multi-session experiment rosbag.

For quick test to download: Onedrive. The whole rosbags of HILTI 2022 and 2023 are on the website.

The rosbag had better be played from "site1_handheld_5" to "site_handheld_1", or the "site_handheld_2" and "site_handheld_3" cannot find the loop.

Before launching, please set configure the variables in "hesai.yaml". The '#' means annotation

# hesai.yaml
save_path: "${YOUR_FILE_PATH_TO_SAVE_THE_OFFLINE_MAP}"
previous_map: "# site1_handheld_5: 0.50, 
               # site1_handheld_4: 0.45,
               # site1_handheld_3: 0.30,
               # site1_handheld_2: 0.50"
bagname: "site1_handheld_${1-5}" # The rosbag name you play
is_save_map: 1 # Enable to save the map
roslaunch voxel_slam vxlm_hesai.launch
rosbag play site1_handheld_5.bag --pause
roslaunch voxel_slam vxlm_hesai.launch // Load the site_handheld_5
rosbag play site1_handheld_4.bag --pause
roslaunch voxel_slam vxlm_hesai.launch // Load the site_handheld_{5, 4}
rosbag play site1_handheld_3.bag --pause

For the "site1_handheld_2", do not forget load the offline maps. The "hesai.yaml" should be like this

# hesai.yaml
save_path: "${YOUR_FILE_PATH_TO_SAVE_THE_OFFLINE_MAP}"
previous_map: "site1_handheld_5: 0.50, 
               site1_handheld_4: 0.45,
               site1_handheld_3: 0.30,
               # site1_handheld_2: 0.50"
bagname: "site1_handheld_2" # The rosbag name you play
is_save_map: 1 # Enable to save the map
roslaunch voxel_slam vxlm_hesai.launch // Load the site_handheld_{5, 4, 3}
rosbag play site1_handheld_2.bag --pause
roslaunch voxel_slam vxlm_hesai.launch // Load the site_handheld_{5, 4, 3, 2}
rosbag play site1_handheld_1.bag --pause

The map may not be consistent as shown in the video. Run

rosparam set finish true

for the final global BA.

4.3 MARS Dataset

For quick test to download: Onedrive. The whole rosbags of MARS dataset are on the website.

roslaunch voxel_slam vxlm_avia_fly.launch
rosbag play HKisland03.bag --pause

The beginning of the point cloud is empty and failing to initialize until the drone at a certain height.

roslaunch voxel_slam vxlm_avia_fly.launch
rosbag play AMvalley03.bag --pause
rosparam set finish true

This sequence is difficult to find loop. Please run the GBA to ensure the global map consistence.

4.4 Livox Mid360

The rosbag begin in a violent speed: Onedrive

roslaunch voxel_slam vxlm_mid360.launch
rosbag play jungle_challenge.bag --pause

4.5 Others

Other types of LiDAR will be released later.

5. VoxelSLAMPointCloud2

VoxelSLAMPointCloud2: A customized plugin for RViz. It has the same usage to original "PointCloud2" in RViz, but it can clear the point cloud map automatically when receiving an empty point cloud, with any Decay Time of the plugin.

(1) Put the "VoxelSLAMPointCloud2" within the same "src" folder to your project and catkin_make.

(2) “roslaunch” your program with RViz.

(3) Click the "Add" button to add the "VoxelSLAMPointCloud2".

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published