Advertisement
Advanced Time: 6–8 weeks Robotics

Underwater ROV

Build a tethered underwater remotely operated vehicle (ROV) for underwater inspection and exploration.

ROVUnderwaterThrustersWaterproofOpenROVInspection
DifficultyAdvanced
Duration6–8 weeks
Components10 items
Steps3 steps

Introduction

Build a tethered underwater remotely operated vehicle (ROV) for underwater inspection and exploration. This comprehensive guide covers everything from design through implementation, testing, and deployment.

Theory & Background

Calculate maximum operating depth: for 20m depth, pressure = 3 bar (absolute). Housing must withstand 3× operating pressure (safety factor 3) = 9 bar. Acrylic tube (200mm OD, 10mm wall) rated for 10 bar — adequate. End caps sealed with double O-rings (Parker 2-206 NBR O-rings). O-ring groove design: groove depth = 90% of O-ring cross-section diameter. Apply thin silicone grease (not petroleum lubricant — degrades O-rings). Pressure test to 6 bar in a bucket before water deployment.

Advertisement

Components & Requirements

10 components required for this project.

#ComponentPurposeQty
1Bilge Pump Motors (12V, modified as thruster)Propulsion (3-axis: surge, sway, heave)x4
2Acrylic/PVC Pressure HousingElectronics waterproof enclosurex1
3Arduino Mega + Raspberry Pi ZeroMotor control and video streamingx1
4USB Camera (wide angle, waterproofed)Forward and downward viewsx2
5Depth Sensor (MS5837-30BA)Pressure/depth measurementx1
6IMU (BNO055, waterproofed)Attitude referencex1
7LED Lights (12V, waterproof)Underwater illuminationx4
8Tether Cable (30m, neutrally buoyant)Power and data umbilicalx1
9Buoyancy Foam BlocksAchieving neutral buoyancyx1
103D-Printed ABS FrameROV structurex1

Step-by-Step Implementation

Follow these 3 steps carefully.

1
Pressure Housing Design and Sealing

Calculate maximum operating depth: for 20m depth, pressure = 3 bar (absolute). Housing must withstand 3× operating pressure (safety factor 3) = 9 bar. Acrylic tube (200mm OD, 10mm wall) rated for 10 bar — adequate. End caps sealed with double O-rings (Parker 2-206 NBR O-rings). O-ring groove design: groove depth = 90% of O-ring cross-section diameter. Apply thin silicone grease (not petroleum lubricant — degrades O-rings). Pressure test to 6 bar in a bucket before water deployment.

2
Thruster Configuration and Control

4-thruster configuration: 2 horizontal thrusters (left/right for heading and surge), 2 vertical thrusters (fore/aft for pitch-free depth control). Thruster allocation matrix maps joystick commands to individual thruster PWM: Surge=(T1+T2)/2, Turn=(T1-T2)/2, Heave=(T3+T4)/2, Pitch=(T3-T4)/2. ESC control: 50Hz PWM, 1000µs=full reverse, 1500µs=stop, 2000µs=full forward. Use Blue Robotics T100/T200 thrusters or modified bilge pumps with marine-grade propellers.

3
Neutral Buoyancy Setup

ROV must be neutrally buoyant: weight equals displaced water weight. Measure ROV weight in air, calculate water displacement volume needed: V_buoyancy = ROV_mass / water_density. Current displacement volume from frame: calculate from dimensions. Difference: add closed-cell foam (density 40kg/m³) in calculated volume. Trim for level attitude: adjust foam placement fore/aft and port/starboard to align center of buoyancy with center of gravity.

Code & Implementation

Core code for rov_controller.ino:

rov_controller.ino C/C++
#include <Servo.h>
Servo t1, t2, t3, t4; // Thrusters

void setup() {
  t1.attach(3); t2.attach(5); t3.attach(6); t4.attach(9);
  // ESC arming sequence
  t1.writeMicroseconds(1500); t2.writeMicroseconds(1500);
  t3.writeMicroseconds(1500); t4.writeMicroseconds(1500);
  delay(3000); // ESC initialization
  Serial.begin(115200);
}

void setThrusters(int surge, int turn, int heave, int pitch) {
  // Thruster allocation
  int T1 = constrain(1500 + surge + turn, 1100, 1900);
  int T2 = constrain(1500 + surge - turn, 1100, 1900);
  int T3 = constrain(1500 + heave + pitch, 1100, 1900);
  int T4 = constrain(1500 + heave - pitch, 1100, 1900);
  t1.writeMicroseconds(T1); t2.writeMicroseconds(T2);
  t3.writeMicroseconds(T3); t4.writeMicroseconds(T4);
}

void loop() {
  if(Serial.available() >= 4) {
    int s = Serial.read() - 128; // -128 to +127
    int t = Serial.read() - 128;
    int h = Serial.read() - 128;
    int p = Serial.read() - 128;
    setThrusters(s*3, t*3, h*3, p*3);
  }
}

Testing & Troubleshooting

Test Underwater ROV by verifying each subsystem individually before full integration.

!
Troubleshooting Tips

Verify power voltages, check ground connections, use serial monitor for debug.

Real-World Applications

*Underwater hull inspection of ships
*Coral reef and marine biology survey
*Fish farm structure inspection
*Dam inspection and debris detection
*Underwater archaeology survey
*Search and recovery operations
*Aquaculture monitoring
*Offshore oil infrastructure inspection

Extensions & Next Steps

  • Add sonar for low-visibility water navigation and mapping
  • Build a manipulator arm for sample collection
  • Implement depth-hold PID using pressure sensor
  • Add USBL acoustic positioning for GPS-denied underwater navigation
  • Upgrade to lithium battery with battery management system for untethered operation

Interactive Playground

Coming Soon

An interactive simulator will be available here — simulate circuits and run code in-browser without hardware.

Frequently Asked Questions

What is the maximum depth rating achievable with this DIY ROV?
With careful construction using the acrylic tube housing described: 30m rated (tested to 90m equivalent pressure). Blue Robotics-style build with aluminum housings and quality O-rings: 100m. Professional ROVs: 300–6000m. Key limiting factors: O-ring quality and installation (most DIY failures at connectors, not housings), tether cable penetrators (use Blue Robotics WLP penetrators for reliable sealing), and electronic component pressure tolerance (most electronics rated only for 1 atm — the housing protects them at 1 atm inside).
Advertisement