Build a Tethered Underwater ROV with Raspberry Pi: Thrusters, Waterproof Enclosure, and Live Video Control
A tethered ROV (remotely operated vehicle) is one of the more satisfying Raspberry Pi builds precisely because it forces you to solve problems this site's other Pi projects don't touch: real waterproofing under pressure, thrust and buoyancy balance, and reliable low-latency control and video over a physical tether instead of WiFi. This build produces a small, pool- or pond-depth ROV — capable of a few meters depth — controlled from a laptop over Ethernet, with live video streamed back up the tether. It's a genuinely different category of project from this site's dry-land Pi robotics content, and a good next step after the Raspberry Pi robot car build if you want to push into a harder, more physically demanding build.
Difficulty and Scope
This is an intermediate-to-advanced build. The electronics and software are approachable — a Pi, motor drivers, and Python — but the waterproofing and mechanical assembly require patience and a tolerance for iterating after a leak test fails. Budget a full weekend for the enclosure and thruster mounts alone, separate from wiring and software.
Design Overview
The core layout: a Raspberry Pi and camera sealed inside a clear waterproof enclosure (a length of acrylic or PVC tube with sealed end caps is the standard hobbyist approach), four to six bilge-pump-style or purpose-built brushless thrusters mounted outside the hull for forward/reverse, yaw, and vertical (dive/surface) control, and a tether carrying Ethernet (for control and video) plus power from the surface. Power stays topside in a small ROV like this — running a long power tether at low voltage wastes too much energy to voltage drop, so a common approach is a surface power supply feeding a higher voltage down the tether to a buck converter inside the hull, or in the simplest version, a sealed battery pack riding inside the hull itself for short pool sessions.
ComponentRole Raspberry Pi 4 or 5Runs camera streaming and thruster control server inside the sealed hull Pi Camera Module or USB webcamForward-facing live video feed, streamed to the surface over the tether 4-6x bilge pump motors or dedicated ROV thrusters (e.g. Blue Robotics T100-style)Vectored thrust for forward/reverse, yaw, and vertical control Motor driver boards (one per thruster, or a multi-channel ESC setup for brushless thrusters)Converts Pi GPIO/PWM signals into motor drive current Clear acrylic or PVC tube with sealed end caps, O-ringsWatertight hull housing the electronics Cable penetrators (waterproof gland fittings)Sealed pass-through points for thruster wiring and the tether, the single most leak-prone part of the build Ethernet tether cable (or tether + separate power conductors)Carries control data, video, and optionally power to the surface Surface controller (laptop or another Pi)Runs the pilot interface — joystick or keyboard input and video display Ballast weights and foam floatsTrims the ROV to neutral buoyancy so thrusters do steering work, not fighting to stay submerged or surfacedBuilding the Hull
Cut the acrylic tube to length, leaving generous room for the Pi, camera, wiring, and any driver boards. Both end caps need to seal against O-rings — test-fit dry before adding sealant, and pressure-test the empty hull in a bathtub or bucket before any electronics go in it. Submerge it fully, weighted down, and leave it for 15-30 minutes checking for bubbles or water ingress at the seams and gland fittings. This single step catches most build failures before they can ruin a Raspberry Pi, and it's worth repeating after every modification to the hull.
Cable penetrators are the most common leak point on a first build. Use purpose-made waterproof cable glands rated for the wire gauge you're running, and apply marine sealant as a backup, not a substitute, for a properly sized gland. Route the thruster wiring and Ethernet tether each through their own dedicated gland rather than bundling multiple wires through one fitting sized for a single cable — undersized glands compressed around bundled wire are a common source of slow leaks.
Thruster Layout and Buoyancy
A practical beginner layout uses four horizontal thrusters mounted in an X pattern for forward, reverse, yaw, and strafing, plus two vertical thrusters for dive/surface control — though a simpler three-thruster layout (two horizontal, one vertical) is a reasonable first build if you want to reduce complexity and wiring. Mount thrusters symmetrically and as far from the vehicle's center of mass as practical for stable, predictable rotation. Buoyancy trim matters more than most first-time builders expect: add foam floats and ballast weight until the assembled ROV floats level and just barely neutral (neither sinking nor bobbing to the surface) in a test tub — a poorly trimmed ROV fights its own buoyancy constantly and burns thruster power just holding depth instead of maneuvering.
Software: Control and Video
On the Pi, a lightweight Python control server reads thruster commands over a socket connection and drives the motor controller GPIO pins accordingly, while a separate process streams camera video using something like libcamera-vid piped to an MJPEG or RTSP stream, or a simple Flask endpoint serving MJPEG frames — the same streaming approach covered in this site's ESP32-CAM and Pi camera guides applies here, just running on more capable hardware inside the hull. On the surface side, a simple Python client (or a basic web page if you use the Flask MJPEG approach) reads a joystick or keyboard input, maps it to thruster commands, sends them to the Pi over the Ethernet tether, and displays the incoming video feed. Keep the control loop simple at first — a "stop" command on connection loss (a dead-man's switch) is a required safety feature, not an optional nicety, since a tethered ROV with runaway thrusters and no way to cut them is a genuine hazard to itself and anyone in the water.
Safety and Practical Notes
- Test in a shallow, controlled body of water first — a pool or a large tub — before any open water use, and always keep the tether tended by a second person on the surface.
- Never operate the ROV around people swimming; the thrusters, even small ones, can injure fingers or hair.
- Fresh water and salt water are very different environments electrically and mechanically — salt water is far more corrosive to unsealed metal contacts and connectors, so budget for more aggressive corrosion protection (dielectric grease on all connectors, marine-rated components) if you're building for ocean or brackish use.
- A tether that's too buoyant will float up and create drag; one that's too heavy will sink and drag the ROV off course. Small foam floats spaced along the tether length help keep it neutrally buoyant in the water column.
A successful first dive — watching a live video feed from something you sealed, weighted, and wired yourself descend under its own thrust — is one of the more rewarding payoffs in Pi-based robotics, and the hull, gland, and buoyancy lessons carry directly into follow-on builds like an automated pool inspection bot or a fixed underwater camera for a pond or aquarium.
Related Guides
- How to Set Up OpenCV Machine Vision on a Raspberry Pi
- How to Control GPIO Pins on Raspberry Pi with Python
- How to Run a Timelapse Camera with Raspberry Pi
- Automated Plant Watering System with Raspberry Pi
- Controlling GPIO Outputs with Python — LED, Relay, and Buzzer
- Raspberry Pi GPIO: Complete Beginner Guide with Python Examples
- Getting Started with ROS2 on Raspberry Pi for Robotics
- Build a Raspberry Pi E-Ink Digital Photo Frame (Wired or Battery-Powered)