Building a 15.5g Monocular VIO Module (RoboBaton Neo): Hardware Sync, 0.6W Power, and EuRoC Benchmarks

Hi everyone,

Over the past few months, our team has been working on a hardware challenge many of us in the mobile robotics and micro-UAV space run into: getting reliable, hardware-synchronized Visual-Inertial Odometry (VIO) onto sub-250g platforms without eating up the entire power or payload budget.

When building tiny drones or handheld mapping rigs, off-the-shelf stereo depth cameras (like RealSense or OAK-D) are often too heavy, too power-hungry, or require heavy host compute. On the other hand, DIY monocular camera + IMU setups usually suffer from clock drift and painful extrinsic calibration.

To solve this for our own autonomous flight tests, we designed RoboBaton Neo—a compact, hardware-synced monocular VIO module. Since we’re prepping it for broader ROS/ROS 2 integration, I wanted to share the hardware architecture, benchmark numbers, and get feedback from the community on what interfaces or drivers you’d actually want to see.

1. Mechanical & Power Constraints (Built for Micro-Platforms)

Our hard design target was keeping the module under 16 grams with housing and under 1W peak power so it can run directly off a flight controller’s auxiliary rail without browning out anything:

  • Dimensions: 40.0 × 20.0 mm PCB footprint (~41.0 × 20.0 × 19.5 mm enclosed)

  • Weight: 8.69 g (bare board) / 15.55 g (with 3D-printed/protective housing)

  • Power Consumption: 0.6 W measured peak power (3.3–5 V input)

2. Hardware Sync & Pinout (No More Software Timestamp Hacking)

Anyone who has tuned VINS-Mono, OpenVINS, or Basalt knows that software timestamping over USB is where accuracy goes to die. We built hardware-level synchronization directly into the board alongside a standard SH1.0-6P (1.0 mm) connector for direct flight controller (PX4 / ArduPilot) or companion computer integration, plus a front-facing USB 2.0 (Type-C) port for quick bench testing.

  • Pin 1 (EXPOSURE_OUT): 1.8 V exposure sync output (valid in both master and slave modes)

  • Pin 2 (TRIGGER_IN): 1.8 V rising-edge external trigger input (slave mode, useful for multi-camera rigs or external LiDAR sync)

  • Pins 3 & 4 (UART_TX / UART_RX): 3.3 V logic level for high-rate pose/IMU telemetry

  • Pins 5 & 6 (GND / VIN): Common ground and 3.3–5 V power input

3. EuRoC MAV Dataset Benchmarks

Before taking it into outdoor GPS-denied flight tests, we evaluated the sensor pipeline across all 11 sequences of the EuRoC MAV dataset (Machine Hall and Vicon Room). Here are the relative trajectory error results:

第 1 列 第 2 列 第 3 列 第 4 列
Sequence Relative Error Sequence Relative Error
MH_01 0.571% V1_01 0.298%
MH_02 0.674% V1_02 0.260%
MH_03 0.318% V1_03 0.339%
MH_04 0.393% V2_01 0.427%
MH_05 0.463% V2_02 0.323%
V2_03 0.350%

Across all sequences, relative drift stayed well below 0.7% (averaging ~0.40%), even in the fast-motion and low-light MH_04/MH_05 and V2_03 runs.

4. Live Field & Tracking Demos (YouTube Shorts)

Theory and datasets are great, but how does it hold up in real-world motion? We recorded a few short test clips showing raw tracking performance and stability under real dynamic conditions:

  • Demo 1 (Rapid Motion Test): Watch on YouTube — Testing tracking robustness during fast hand/platform shakes.

  • Demo 2 (Loop Closure & Drift Evaluation): Watch on YouTube — Observing trajectory consistency and drift handling in a localized space.

  • Demo 3 (Lighting / Dynamic Transition): Watch on YouTube — Behavior across shifting ambient light conditions.

  • Demo 4 (On-Platform Integration): Watch on YouTube — Compact setup preview on a lightweight mobile test rig.

5. Questions for the ROS Community (Would Love Your Input!)

We are currently wrapping up the ROS 2 wrapper and documentation, and before we freeze the firmware/SDK features, I’d love to hear from folks working on VIO and micro-UAVs:

  1. Data Output Preference: For your onboard stack, do you prefer receiving raw synchronized sensor_msgs/Image + sensor_msgs/Imu over USB to run your own estimator (like OpenVINS/VINS-Fusion), or do you prefer onboard VIO outputting nav_msgs/Odometry directly over UART/USB to save host CPU?

  2. PX4 / MAVROS Integration: If you use PX4, do you prefer feeding VIO via mavros/vision_pose/pose on a companion computer, or direct UART ODOMETRY MAVLink messages straight into the flight controller?

  3. Sync Triggers: Would anyone use the TRIGGER_IN pin to slave this module to an external global-shutter stereo pair or a 2D/3D LiDAR?

Happy to share more details on the IMU specs, lens FOV, or calibration files if anyone is interested. Thanks for reading!

2 Likes

This looks quite interesting! How much onboard compute do you have? Which SOC? And which VIO algorithm did you test?

I think letting the users choose whether they want odometry or raw data (or both) would be great.