RESEARCH
Subsea Odometry Package
We designed this system for a senior capstone project in partnership with the Seattle Aquarium. The goal was to develop a downward-looking visual odometry/SLAM system for the BlueROV.

As a low-cost, rapid prototype system, we started with a Jetson Nano development kit which just barely fits in a 4" BlueRobotics housing. The original plan was to use Raspberry Pi Global Shutter cameras based on the IMX296 sensor, as they are readily available and inexpensive.
After a bit of thrashing, we determined the kernel driver for the bare IMX296 sensor was not mature in the Nvidia kernel (Sony and Pi have introduced a driver to more modern kernels to support the camera on the Pi). As a plan B, we switched to IMX296 modules from Vision Components. VC modules are slightly more expensive than the Pi module, but are readily available from Mouser.
VC integrates a lightweight abstraction layer into their camera sensors which lets them use a single, fairly simple kernel driver for their full line of MIPI cameras, but the module still uses the argus image signal processing (ISP) built into the Jetson.
Here is a block diagram showing integration with the BlueROV
and the standalone test configuration (as shown in the image above).
Switching between the two is relatively straightforward as both connections to the camera (power and ethernet) will fit through an M10 hole. However, it still requires swapping the Wetlink penetrator between the 2" test housing and the 4" housing on the ROV.
Additional documentation is on Github:
Back to cameras
Sample Data

I’ve moved the sample data to its own page
Software
ROS2
The system runs ROS2 “Humble.” At present we are using a custom version of ROS2 built from source with this script. We ended up with this solution to force ROS2 to use the version of OpenCV provided by Jetpack. Ultimately, this may be more pain than it’s worth and using the compiled binaries provided by ROS may be a better idea.
There are two top-level coordination repos / ROS2 packages:
orbslam_nano_deploy
is for running on the Nano, on the ROV. It includes the necessary drivers (cameras, Vectornav IMU).orbslam_offline_deploy
is focused on post-processed analysis of Nano outputs (including re-running Orbslam on bagged data) on the desktop. It does not depend on any of the hardware drivers.
Both repos depend on:
orbslam_nano_config
which contains configuration files for both the in-water and offline tools (but it has no dependencies).
Orbslam3
We’re currently testing with Orbslam3; I’ve created a separate page for our ORBSLAM resources.
Hardware drivers
vc-jetson-driver-release
is a light remix of VC’s Jetpack driver to simplify the out-of-tree builds needed for Jetpack 6. It is designed as a single-clone-to-build rather than requiring downloading tarballs, patching, etc.vc-stereo-ros2
is a ROS2 driver for two Argus cameras. It contains constants for our VC cameras but could be modified to any pair of cameras. It supports external triggering to synchronize the two VC cameras.