GPU-ready ROS 2 bridge that feeds FAST-LIO state estimation directly into NVBlox for real-time TSDF, mesh, and ESDF map generation on Jetson Orin.
This package provides a high-performance bridge between FAST-LIO (LiDAR-inertial odometry) and nvblox (GPU-accelerated volumetric mapping). It consumes the registered point clouds and odometry from FAST-LIO to generate dense 3D reconstructions in real-time on NVIDIA Jetson platforms.
- Seamless Integration: Directly subscribes to
/cloud_registeredand/Odometryfrom FAST-LIO. - Jetson Optimized: Tuned for NVIDIA Jetson Orin (SM 8.7) with CUDA 12.8.
- Real-time Reconstruction: Generates TSDF, ESDF, and Mesh layers at LiDAR frame rates (10-20 Hz).
- Rich Visualization: Pre-configured RViz setup for viewing meshes, voxel grids, and distance fields.
- Voxel Export: Includes functionality to export the reconstructed map to PCD files.
| Path | Purpose |
|---|---|
launch/ |
ROS 2 launch files (nvblox_fastlio.launch.py). |
src/ |
Core bridge source code. |
config/ |
Configuration files for nvblox and FAST-LIO. |
rviz/ |
Visualization configuration (nvblox_mapper.rviz). |
- Hardware: NVIDIA Jetson Orin (or other CUDA-capable GPU).
- OS: Ubuntu 22.04 (ROS 2 Humble).
- Dependencies:
-
Clone the repository into your ROS 2 workspace:
cd ~/ros2_ws/src git clone git@github.com:OmerMersin/fastlio_nvblox_mapper.git nvblox_fastlio_bridge
-
Build the package:
cd ~/ros2_ws colcon build --packages-select nvblox_fastlio_bridge source install/setup.bash
To launch FAST-LIO and the nvblox bridge together with RViz visualization:
ros2 launch nvblox_fastlio_bridge nvblox_fastlio.launch.py \
fastlio_config:=/path/to/fast_lio/config/ouster32.yaml \
bridge_config:=/path/to/nvblox_fastlio_bridge/config/nvblox_params.yamlArguments:
fastlio_config: Absolute path to your FAST-LIO sensor configuration file (default:fast_lio/config/ouster32.yaml).bridge_config: Path to the nvblox parameter file (default:config/nvblox_params.yaml).launch_rviz: Set totrueorfalseto enable/disable RViz (default:true).
ros2 launch nvblox_fastlio_bridge nvblox_fastlio.launch.py \
fastlio_config:=/home/orin/LIONav/ros2_ws/src/FAST_LIO/config/ouster32.yaml \
bridge_config:=/home/orin/LIONav/ros2_ws/src/nvblox_fastlio_bridge/config/nvblox_params.yamlThe mapping behavior is controlled by config/nvblox_params.yaml. Key parameters include:
voxel_size: Resolution of the map (default: 0.10m).truncation_distance_vox: Truncation distance in voxel units.esdf_update_rate_hz: Frequency of ESDF updates.
Refer to the FAST-LIO repository for details on sensor configuration (LiDAR type, extrinsics, etc.).
The launch file automatically opens RViz with a pre-configured view (rviz/nvblox_mapper.rviz) showing:
- Point Cloud: The raw registered cloud from FAST-LIO.
- Mesh: The reconstructed mesh from nvblox.
- Odometry: The path and pose of the sensor.
|
max_integration_distance|15.0| Clip lidar rays beyond this range. | |pointcloud_topic|/cloud_registered| FAST-LIO registered cloud input. | |odom_topic|/Odometry| FAST-LIO pose stream used for TSDF poses. | |publish_voxels|true| Toggle voxelCUBE_LISTmarker publisher. | |publish_voxel_points|false| Publish sampled voxel point cloud for analytics. | |voxel_export_*| seenvblox_fastlio_node.cpp| Filters for visualization and PCD exports. |
All parameters are declared on the node, so you can override them via launch files, YAML, or ros2 param set at runtime.
- Subscriptions:
/cloud_registered(sensor_msgs/PointCloud2),/Odometry(nav_msgs/Odometry). - Publishers:
nvblox/mesh(visualization_msgs/MarkerTRIANGLE_LIST)nvblox/voxels(visualization_msgs/MarkerCUBE_LIST)nvblox/voxel_points(sensor_msgs/PointCloud2, optional)nvblox/esdf_slice,nvblox/tsdf_slice(slice point clouds)nvblox/occupancy_grid(nav_msgs/OccupancyGrid)
- Services:
nvblox/save_voxels(std_srvs/Trigger) → writes filtered TSDF voxels to PCD.
- Clock alignment: make sure FAST-LIO and NVBlox run on synchronized clocks (use
/use_sim_timeor PTP if needed). - TF availability: keep
map -> body/lidartransforms continuous; the node falls back to raw odometry, but TF avoids drift during temporary dropouts. - Denoising toggles:
lidar_denoise_*,lidar_smooth_*, andlidar_hole_filling_radiushelp when Ouster returns sparse walls or Livox has motion blur. - Jetson thermals: pin clocks with
jetson_clocksand watch GPU temps when integrating dense indoor scans.
Released under the MIT License.
