Voxel-SLAM: A Complete, Accurate, and Versatile LiDAR-Inertial SLAM System 1. Introduction Voxel-SLAM is a complete, accurate, and versatil…
Voxel-SLAM: A Complete, Accurate, and Versatile LiDAR-Inertial SLAM System 1. Introduction Voxel-SLAM is a complete, accurate, and versatil…
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.bashThe 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 trueto 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 maproslaunch voxel_slam vxlm_hesai.launch
rosbag play site1_handheld_5.bag --pauseroslaunch voxel_slam vxlm_hesai.launch // Load the site_handheld_5
rosbag play site1_handheld_4.bag --pauseroslaunch voxel_slam vxlm_hesai.launch // Load the site_handheld_{5, 4}
rosbag play site1_handheld_3.bag --pauseFor 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 maproslaunch voxel_slam vxlm_hesai.launch // Load the site_handheld_{5, 4, 3}
rosbag play site1_handheld_2.bag --pauseroslaunch voxel_slam vxlm_hesai.launch // Load the site_handheld_{5, 4, 3, 2}
rosbag play site1_handheld_1.bag --pauseThe map may not be consistent as shown in the video. Run
rosparam set finish truefor 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 --pauseThe 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 trueThis 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 --pauseOther 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".
No open issues yet, or sync has not completed.