Visual-inertial odometry (VIO)
Visual-inertial odometry (VIO) – definition
Visual-inertial odometry (VIO) is a state-estimation method that calculates the motion of a robot by combining camera images with inertial measurement unit (IMU) data. It estimates the robot pose, orientation, velocity, and typically IMU bias relative to a local reference frame. Unlike wheel odometry, VIO does not depend on wheel rotation alone. Unlike GNSS, it can operate where satellite reception is unavailable or unreliable.
For a mobile UGV, VIO usually provides a continuously updated local odometry estimate. It is useful when a robot moves through indoor corridors, construction sites, laboratories, covered agricultural areas, or terrain where wheel slip reduces the accuracy of encoder-based odometry. On Leo Rover and Raph Rover, VIO is normally an additional component of a ROS 2 navigation and perception stack. It does not make either platform autonomous by itself.
A VIO estimator combines high-rate inertial measurements with visual feature observations. The IMU supplies short-term motion prediction, while the camera constrains accumulated inertial drift by tracking image features across consecutive frames. The result is commonly published as an odometry transform and a ROS message of type nav_msgs/msg/Odometry.
How VIO estimates UGV motion
Most VIO systems estimate a state vector containing position, velocity, orientation, accelerometer bias, and gyroscope bias. Camera measurements update this state when visual features can be matched or tracked between frames. The estimator may use an Extended Kalman Filter, a Multi-State Constraint Kalman Filter, factor-graph optimization, or a sliding-window nonlinear optimizer.
A simplified state representation is:
x = [p, v, q, b_g, b_a]
Where p is position, v is linear velocity, q is orientation, b_g is gyroscope bias, and b_a is accelerometer bias. IMU integration predicts the next state. Visual observations reduce uncertainty when stable features are available.
VIO is monocular, stereo, or RGB-D, depending on the camera configuration:
- Monocular VIO uses one camera and an IMU. Metric scale can be observed through inertial measurements when motion provides sufficient excitation, but initialization and calibration are important.
- Stereo-inertial odometry uses synchronized left and right cameras with an IMU. A calibrated stereo baseline provides metric scale and improves depth estimation.
- RGB-D inertial odometry uses depth measurements together with images and IMU data. It can be practical for indoor UGV operation, subject to the range and surface limitations of the depth sensor.
VIO in ROS 2
ROS 2 does not define one mandatory VIO implementation. It provides standard message types, coordinate-frame conventions, time handling, and transformation tools that VIO packages use. A VIO node may be implemented as a ROS 2 package, integrated into a visual SLAM system, or deployed as part of a vendor-specific perception stack.
A typical ROS 2 VIO pipeline uses the following interfaces:
| Data | Typical ROS 2 interface | Purpose |
|---|---|---|
| Camera image | sensor_msgs/msg/Image |
Feature detection, tracking, or direct image alignment. |
| Camera calibration | sensor_msgs/msg/CameraInfo |
Camera intrinsics, distortion model, and projection parameters. |
| IMU measurements | sensor_msgs/msg/Imu |
Angular velocity, linear acceleration, orientation data when available, and covariance fields. |
| Estimated motion | nav_msgs/msg/Odometry |
Estimated pose and twist with covariance. |
| Coordinate transforms | tf2 |
Publication and lookup of transforms such as odom to base_link. |
Coordinate frames should follow ROS conventions defined in REP 103 and the mobile-platform frame guidance in REP 105. In a common setup, VIO provides a locally consistent odom frame, while a SLAM or localization system may provide the map to odom correction.
# Illustrative VIO integration parameters.
# Exact names depend on the selected ROS 2 VIO package.
vio_node:
ros__parameters:
camera_frame: camera_link
imu_frame: imu_link
base_frame: base_link
odom_frame: odom
publish_tf: true
use_imu: true
estimate_imu_bias: true
Calibration, synchronization, and sensor placement
VIO quality depends strongly on data timing and calibration. The camera intrinsics and the fixed extrinsic transformation between the camera and IMU must be known accurately. Timestamp errors can produce apparent rotational or translational motion that the estimator cannot distinguish from real robot movement.
Before deploying VIO on a UGV, verify the following integration conditions:
- Camera timestamps and IMU timestamps use the same clock domain or have a measured offset.
- The camera is rigidly mounted. Flexible brackets can introduce vibration and invalidate the calibrated extrinsic transform.
- The optical frame follows ROS camera-frame conventions defined in REP 103.
- The IMU is rigidly mounted, its transform to the robot body frame is known, and it is protected from excessive drivetrain vibration.
- Exposure settings are suitable for motion. Strong motion blur reduces feature tracking quality.
- Camera intrinsics and lens distortion parameters are published through
CameraInfo.
VIO on Leo Rover and Raph Rover
Leo Rover is a four-wheel skid-steer platform that can be equipped with a Raspberry Pi compute unit and supports ROS 2. A VIO setup on Leo Rover typically requires an externally integrated camera and IMU, plus sufficient compute capacity for image processing and state estimation. For demanding stereo, RGB-D, or GPU-accelerated pipelines, an external compute unit may be more appropriate than relying only on the onboard computer.
Wheel odometry remains useful on Leo Rover, but it can drift when wheels slip on loose, uneven, or low-friction surfaces. A practical configuration fuses wheel odometry, VIO, and optionally GNSS/RTK data in a state-estimation node such as robot_localization. The fusion design must avoid feeding correlated estimates into the filter without accounting for their covariance and shared sensor inputs.
Raph Rover can carry larger sensor payloads and compute hardware. This makes it suitable for configurations with stereo cameras, industrial IMUs, GNSS/RTK receivers, or protected sensor enclosures. VIO remains a local odometry method on Raph Rover. For repeated outdoor missions, it is commonly paired with global localization, LiDAR SLAM, GNSS/RTK, or map-based localization.
Limitations and validation metrics
VIO does not guarantee globally drift-free localization. It can fail or degrade in low-texture areas, darkness, repetitive environments, heavy dust, strong vibration, rapid motion, camera occlusion, or scenes dominated by moving objects. Monocular systems can also become unstable during insufficiently excited motion or poor initialization.
Evaluation should include trajectory accuracy, estimator consistency, latency, and resilience to sensor dropouts. Common metrics include absolute trajectory error (ATE), relative pose error (RPE), output covariance, transform availability, and processing delay between sensor acquisition and odometry publication. Ground-truth comparison may use a motion-capture system, surveyed markers, or RTK measurements where appropriate.
Normative references and technical sources
The ROS coordinate and message interfaces used by a VIO integration are documented by the ROS project. REP 103 defines standard units and coordinate conventions. REP 105 defines coordinate frames for mobile platforms, including the relationship between map, odom, and base_link.
- ROS REP 103 – Standard Units of Measure and Coordinate Conventions
- ROS REP 105 – Coordinate Frames for Mobile Platforms
- ROS 2 sensor_msgs/msg/Imu documentation
- ROS 2 nav_msgs/msg/Odometry documentation
- ROS 2 tf2 documentation
- Leo Rover technical documentation