Back to Projects
AI & Robotics

2025 Electrical & Software
PythonOpenCVROS 2 JazzyEKF / UKFSTM32Raspberry Pi
Figure 1. ZIMA on a hull — drive modules and treatment bay.
01 / The robot, and my corner of it

The robot, and my corner of it

SubVision Robotics is building ZIMA — a hull-climbing subsea rover that prevents biofouling by making short, repeatable passes over a ship's hull instead of waiting for heavy growth and scraping it off later. It holds position on curved steel using independently steered drive units. I joined as Electrical & Software, one of several engineers, and my work sat on the navigation side: how the rover sees where to go, and how it knows where it is.

02 / Teaching it to follow a line

Teaching it to follow a line

I built the autonomous line-detection pipeline in Python and OpenCV — the vision layer that turns a murky underwater camera frame into a line the rover can actually steer along. The concrete output is a cross-track error: how far off the line it has drifted, and at what angle. Those are exactly the two numbers a steering controller needs, which is what turns a camera into guidance rather than just a picture.

Figure 2. Simulated cleaning run — the rover tracking its path along a ship hull.
03 / Choosing the right senses

Choosing the right senses

A camera alone does not survive silty water, so I ran a trade study across sonar, ultrasonic and IMU, scoring each on range, resolution, cost, and behaviour inches away from a large flat steel plate. That last constraint decides more than the datasheets do — a flat hull throws acoustic energy straight back in ways that quietly wreck a sensor picked on spec-sheet numbers alone.

04 / The architecture underneath

The architecture underneath

I prototyped the software architecture in ROS 2 Jazzy, using EKF/UKF filtering to fuse the sensor feeds into a single position estimate the navigation stack could trust. I also drew the STM32-to-Raspberry-Pi interface diagrams that split the work along the right seam: the Pi runs perception and the ROS 2 nodes, the STM32 owns hard real-time motor control — where a few milliseconds of jitter is the difference between a straight cleaning pass and a drifting one.

Appendix — Figures & Plots

2 figures · click to enlarge

Supporting imagery for this project — boards, plots, screenshots and build shots that did not make the narrative above. Click any figure to open it full-screen.

A1. The underwater swerve-drive gearbox — each module steers independently, which is how the rover crawls a curved hull without losing its heading.
A2. Hull-scale frame assembly in progress — translating the design into physical hardware.