Build a submarine that survives the basin
A battery-powered, dual-ballast RC submersible carries the camera under the surface and keeps its radio link above it.
Why this stage exists
Nothing else in the pipeline exists without a camera that can sit two or three metres under the surface, hold depth, and still be reachable over Wi-Fi. Divers are slow and cold, and a boat-mounted camera cannot look at the basin floor.
How it was done
- 1
Start from an open-source design instead of a blank page
The platform is based on ESP-DIVE, an open-source ESP32 RC submarine with a 3D-printed hull and a magnetic drive coupling, so there is no rotating shaft seal to leak. Building on a published design meant the effort went into waterproofing, camera integration, and field reliability rather than re-deriving a hull.
- 2
Put the computer and the camera in the same module
A XIAO ESP32-S3 Sense acts as both the onboard controller and the camera. It can capture up to QXGA (2048 × 1536) through a clear dome port; for live first-person-view operation we stream SVGA (800 × 600) at about 5 frames per second, which is what the Wi-Fi link and the operator actually need.
- 3
Control depth with ballast, not with thrust
Two piston ballast tanks driven by geared motors let the submarine dive, surface, and hold neutral buoyancy at a target depth. Steering is a single rear thruster with a rudder. Holding depth passively matters for image quality: a hovering camera produces frames the detector and the reconstruction can both use.
- 4
Keep the antenna out of the water
Radio does not travel through water, so the hull is tethered by a 5 m coaxial cable to a floating antenna buoy. The buoy stays on the surface and carries the Wi-Fi link while the submarine works below it.
- 5
Decide what the submarine does not do
Real-time YOLO inference is beyond the practical capability of the ESP32-S3, so the submarine stays a sensing and streaming platform and the detector runs on a host laptop. This kept power draw, heat, and firmware complexity inside the hull low.
Specifications
- Onboard computer / camera
- Seeed XIAO ESP32-S3 Sense
- Capture resolution
- up to 2048 × 1536 (QXGA)
- FPV stream
- 800 × 600 at ~5 fps
- Buoyancy
- dual piston ballast tanks, geared motors
- Propulsion
- single rear thruster with rudder
- Link
- Wi-Fi via antenna buoy on a 5 m coax tether
- Maximum depth
- 5 m
- Control range
- ~50 m from the buoy
- Endurance
- ~30 min per charge
Decisions and trade-offs
Where the code lives
submarine/Build notes, printed-part revisions, waterproofing checklist, and the ESP32 firmware configuration used in the field.
What still bites
- 5 m depth and ~30 min of battery bound how much of a water body one sortie can cover.
- The tether that saves the radio link also limits how far the hull can wander from the buoy.