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:
-
Data Output Preference: For your onboard stack, do you prefer receiving raw synchronized
sensor_msgs/Image+sensor_msgs/Imuover USB to run your own estimator (like OpenVINS/VINS-Fusion), or do you prefer onboard VIO outputtingnav_msgs/Odometrydirectly over UART/USB to save host CPU? -
PX4 / MAVROS Integration: If you use PX4, do you prefer feeding VIO via
mavros/vision_pose/poseon a companion computer, or direct UARTODOMETRYMAVLink messages straight into the flight controller? -
Sync Triggers: Would anyone use the
TRIGGER_INpin 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!





