stereo_vio package, visualization, and odometry metrics are already implemented.Your task is to reduce the VIO trajectory error.
The system will:
- Provide stereo and stereo-inertial calibration data
- Run Kalibr inside a ROS 1 environment
- Run the baseline stereo-inertial VIO pipeline in ROS 2
- Compare the estimated trajectory against ground truth
- Report ATE, ARE, and RPE metrics
You first calibrate the stereo-inertial system with Kalibr, then use that calibration to improve stereo_vio. Keep the implementation clean, correct, and deterministic.
![]() VIO |
![]() Sensor Data |
A Linux Ubuntu computer, or other equivalent.
You only need to install Docker and follow Linux Post-Installation to get started.
GPU Support (Optional)
If your system includes an NVIDIA GPU, you can enable GPU acceleration inside Docker.
Install:
The Linux kernel must be optimized to use large packet sizes. This can be done using the script provided and is done outside docker.
cd usb_dds_setup && bash install_ipfrag.shNote
You need sudo to change this.
You can refer to further documentation here or here.
Clone the repo
git clone --recursive https://github.com/omniinstrument/SLAM_project.gitStart the Kalibr environment
bash scripts/start.sh ros1Start the VIO environment
bash scripts/start.sh ros2Note
The start script builds the Docker images, downloads the datasets from Hugging Face, and builds the ROS workspace. Dataset download occurs only once.
Note
To override the Docker base image, pass ROS1_ROOT_IMAGE or ROS2_ROOT_IMAGE when starting the environment:
ROS1_ROOT_IMAGE=ubuntu:20.04 bash scripts/start.sh ros1
ROS2_ROOT_IMAGE=ubuntu:24.04 bash scripts/start.sh ros2
![]() Stereo camera calibration |
![]() Stereo-inertial calibration |
Use Kalibr in the ROS 1 container to estimate:
- Stereo camera intrinsics
- Stereo extrinsics
- Camera-IMU extrinsics
- Camera-IMU time offset, if useful
Before running Kalibr, update aprilgrid.yaml with the correct target parameters. Use the pinhole-radtan camera model for both cameras.
The provided imu.yaml file is required for stereo-inertial calibration.
Use the calibration result to update the VIO calibration consumed by calib.yaml.
Note
Refer to the Kalibr documentation for calibration commands and configuration details.
Run the ROS 2 VIO pipeline:
ros2 launch stereo_vio stereo_vio.launch.py
![]() Tracking |
![]() Trajectory metrics |
The launch file runs the VIO pipeline, visualization, and trajectory-error computation, then closes automatically shortly after bag playback finishes.
Your final VIO estimate must be published on /stereo_vio/odom (nav_msgs/Odometry) topic for evaluation.
Note
The final report is saved in the output folder as stereo_vio_odometry_error.txt.
Warning
Incase you get an error like ros2: failed to increase socket receive buffer size to at least 33554432 bytes, current is 425984 bytes that means you Linux kernel is not tuned for large packets. Refer to Cyclone DDS tuning
Note
For GUI layout changes, save the Rerun blueprint to rerun_wrapper.rbl.
- You are free to improve stereo_vio using any classical, optimization-based, learning-based, or hybrid method.
- You are free to use external libraries.
- You are free to use AI code editors or AI agents, your code can be 100% AI generated.
- You are free to use any programming language, including Python, C++, Rust, and/or CUDA.
- You are not allowed to modify the odometry error computation or report generation in odometry_error_node.hpp or odometry_error_node.cpp.
Upload the output directory and share it with us.
Also include a brief summary of:
- The calibration files used
- The stereo_vio changes made
If you come across any bugs or have questions, feel free to open an Issue or reach out to Jagennath Hari.
This software and dataset are released under the MIT License.
This work integrates several powerful research papers, libraries, and open-source tools:





