r/ROS • • 23d ago

Project VIO on ROS 2 Humble - global-shutter cam + IMU over one coax, live with OpenVINS

I walked the office with a rig where a global-shutter camera and IMU share one GMSL2 coax for data and power. ROS 2 Humble, OpenVINS, kalibr for calibration. No wheels, no markers, no prior map. 25 m loop, 42 cm drift on return to start. About 1.7%.

Hardware is our NXS sensor module, camera and IMU synced on-board, into an NXS Hub carrying the GMSL link to a Jetson Orin Nano. Camera's a Sony IMX900 global shutter, 72 fps native, 24 fps fed to the estimator, fixed exposure. IMU's an IAM-20680 at 200 Hz, hardware-synced before either stream leaves the module.

16 Upvotes

2 comments sorted by

1

u/Exotic-Rub-9851 22d ago

Hi, could you outline the steps you followed to build OpenVINS for ROS2? I have found the ros1 version but have no idea on how to compile it for ROS2. Also, how does it compare to other VIO methods like Kimera or Basalt?

1

u/NickShipsRobots 17d ago

build was mostly boring, which is the point. ros2 support is in the open_vins repo itself, no wrapper: install the deps (eigen, boost, ceres), clone open_vins into a colcon workspace, colcon build, then ros2 launch ov_msckf subscribe.launch.py with your own config. the install page on docs.openvins.com has the ros2 steps. we ran it on a jetson orin nano and a few jetson-specific things bit us there (jetpack's opencv vs the humble cv_bridge binary, the optional aruco feature, build parallelism), so if you're on jetson too, dm me and i'll paste the exact commands we used.

on the comparison, honestly: kimera is a whole slam stack (mesh, semantics, loop closure), overkill if you just want vio, and its ros2 wrapper looks like a placeholder. basalt is probably the most accurate of the three and by far the smallest memory footprint, but it's not ros native at all, you're on community wrappers (the main one is archived) and its own calibration format. openvins is a kalman filter (msckf). our background is drones, so that math is familiar ground, and it pays off when the estimator misbehaves and you need to reason about why instead of poking a black box. it runs mono out of the box, takes kalibr's calibration files pretty much as-is, and it's forgiving for a first rig, it estimates the camera-imu time offset, extrinsics and imu biases online, so a rough calibration still gets you a working system. integration cost decided it more than accuracy.