Skip to content
SheepYang666Public

About

No description, website, or topics provided.

Resources

Stars

109 stars

Watchers

0 watching

Forks

Latest commit

 

History

48 Commits

Folders and files

Repository files navigation

VINA-SLAM: A Voxel-based Inertial and Normal-Aligned LiDAR–IMU SLAM

Environments with sparse or repetitive geometric structures, such as long corridors and narrow stairwells, remain challenging for LiDAR-IMU SLAM. In these scenarios, insufficient geometric observability and noisy associations commonly degrade the reliability of tracking and optimization modules.

To address these limitations, we propose a novel LiDAR-IMU SLAM framework, \textbf{VINA-SLAM}, which establishes a unified 3D global voxel map and collects global structure cues into the voxel map. To be specific, VINA-SLAM first continuously tracks surface normals stored in the global voxel map using a normal-guided correspondence strategy.

Then, a tangent-space metric is further proposed to explicitly supplement rotational constraints around planar regions into a local bundle adjustment module, providing robust initial pose estimates even in geometrically degenerate regions. Specifically, the VNC (Vector Normal Consistency) module computes a 3D vector residual r = S * n_scan_world where S = I - n_map * n_map^T projects onto the map normal's tangent plane, yielding a rank-2 constraint per normal pair that constrains two rotation DOFs. Map plane matching uses a 27-neighbor voxel search with normal consistency filtering (rejecting pairs with angular deviation > 45 degrees) to prevent cross-structure mismatches.

Finally, we formulate a sliding-window bundle adjustment module that tightly couples IMU factors, normal consistency factors, and planar constraints. A key component is the use of the minimum eigenvalue of each voxel's covariance, as a statistically principled planar factor that improves the Hessian condition number and enhances cross-view geometric consistency.

Fig1

Fig2

Fig3

Fig4

Running

  1. Edit a config under config/ (e.g. config/robosense_airy.yaml): set General.bag_path to a rosbag2 directory, and match lid_topic / imu_topic / lidar_type to the bag.

  2. Build and launch:

cd /path/to/ws
colcon build --packages-select vina_slam
source /opt/ros/humble/setup.bash
source install/setup.bash
ros2 launch vina_slam start.launch.py vina_config:=robosense_airy.yaml

Optional: launch_rviz:=false to skip RViz. The node reads LiDAR/IMU from the bag itself; no separate ros2 bag play is needed.

Available configs: mid360.yaml, velodyne.yaml, robosense.yaml, robosense_airy.yaml, HILTI.yaml, outdoor_fly.yaml, compus_elevator.yaml.

📖 Citation

If you use VINA-SLAM for any academic work, please cite our original paper

@article{zhang2026vina,
title={VINA-SLAM: A Voxel-Based Inertial and Normal-Aligned LiDAR--IMU SLAM},
author={Zhang, Ruyang and Sun, Bingyu},
journal={Sensors},
volume={26},
number={6},
pages={1810},
year={2026},
publisher={MDPI}
}

Acknowledgements

About

No description, website, or topics provided.

Resources

Stars

109 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages