How ethz-asl/bievr-lio works
BIEVR-LIO estimates LiDAR-inertial odometry from synchronized scans and IMU data, exposing online topic and recorded-bag entry points through both ROS versions. The core workflow preprocesses and undistorts each scan, initializes and samples a voxel-wise bump-image map, registers scan points to it, and maintains an inertial state estimate for publication. The graph includes the documented ROS1/ROS2 and map-informed sampling capabilities. Several implementation files were not sampled, so uncertain internal wiring is omitted.
Main entry points: pipeline.cpp Odometry pipeline · src/process_topics.cpp ROS1 topics · src/process_topics.cpp ROS2 topics · synchronizer.cpp Sensor synchronizer
Components 22
ROS interfaces
- ROS1 topics
interfaces/ros1/src/process_topics.cpp - ROS1 bag
interfaces/ros1/src/process_bag.cpp - ROS2 topics
interfaces/ros2/src/process_topics.cpp - ROS2 bag
interfaces/ros2/src/process_bag.cpp - Message conversion
interfaces/ros_common/include/bievr_ros_common/conversions.h
State estimation
- Sensor synchronizer
BIEVR/src/synchronizer.cpp - Odometry pipeline
BIEVR/src/pipeline.cpp - Scan preprocessing
BIEVR/src/preprocess.cpp - Scan undistortion
BIEVR/src/undistort.cpp - IMU integration
BIEVR/src/imu_integrator.cpp - Inertial factors
BIEVR/src/inertial_factor.cpp - Prior factors
BIEVR/src/prior_factor.cpp - State window
BIEVR/include/bievr_lio/pipeline.h
Mapping and registration
- Bump-image map
BIEVR/src/bievr_map.cpp - Informed sampling
BIEVR/src/pipeline.cpp - Scan registration
BIEVR/src/ls_optimizer.cpp
ROS output
- ROS1 publisher
interfaces/ros1/include/bievr_lio_ros/publisher.h - ROS2 publisher
interfaces/ros2/include/bievr_lio_ros2/publisher.h - Shared publishing
interfaces/ros_common/include/bievr_ros_common/publisher_base.h
Other components
- LiDAR and IMU
- Recorded bag
- Odometry and clouds
Connections 31
- LiDAR and IMU → ROS1 topics: sends messages
- LiDAR and IMU → ROS2 topics: sends messages
- ROS1 topics → Message conversion: converts messages
- ROS2 topics → Message conversion: converts messages
- Message conversion → ROS1 topics: returns sensor data
- Message conversion → ROS2 topics: returns sensor data
- ROS1 topics → Sensor synchronizer: adds sensor data
- ROS2 topics → Sensor synchronizer: adds sensor data
- Recorded bag → ROS1 bag: provides recording
- Recorded bag → ROS2 bag: provides recording
- ROS1 bag → Sensor synchronizer: feeds messages
- ROS2 bag → Sensor synchronizer: feeds messages
- Sensor synchronizer → Odometry pipeline: dispatches frames
- Odometry pipeline → Scan preprocessing: filters scans
- Odometry pipeline → Scan undistortion: undistorts scans
- Odometry pipeline → IMU integration: integrates IMU
- Odometry pipeline → Bump-image map: initializes map
- Odometry pipeline → Informed sampling: samples source
- Informed sampling → Bump-image map: queries geometry
- Odometry pipeline → Scan registration: runs alignment
- Scan registration → Bump-image map: matches against
- Odometry pipeline → State window: updates states
- Odometry pipeline → Inertial factors: optimizes with
- Odometry pipeline → Prior factors: adds priors
- ROS1 bag → ROS1 publisher: publishes results
- ROS1 topics → ROS1 publisher: publishes results
- ROS2 bag → ROS2 publisher: publishes results
- ROS2 topics → ROS2 publisher: publishes results
- ROS1 publisher → Shared publishing: uses backend
- ROS2 publisher → Shared publishing: uses backend
- Shared publishing → Odometry and clouds: emits messages