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:
The video of Voxel-SLAM is available on YouTube.
Related paper is available on arxiv.
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).
Ubuntu=20.04. ROS =Noetic. PCL=1.10. Eigen=3.3.7
cd ~/catkin_ws/src
git clone https://github.com/hku-mars/Voxel-SLAM
cd ../ && catkin_make
source ~/catkin_ws/devel/setup.bash
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.
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.
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.
The rosbag begin in a violent speed: Onedrive
roslaunch voxel_slam vxlm_mid360.launch
rosbag play jungle_challenge.bag --pause
Other types of LiDAR will be released later.
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".