Controlling an underwater ROV via tether

Hi all,

long story short... I have a ROV I built a few years ago. Its controlled by a cat5 tether and a simple system of relays for forward - off - reverse of each axis of movement. A camera sends video over a pair of wires in the cat5 cable via video baluns. A compass sits in the field of view of the camera for simple heading information.

I want to upgrade my entire setup. im going to switch to 3 brushless thrusters with motor controllers that can be controlled via PWM. I also want to add a magnetic compass sensor and depth sensor.

My problem comes to HOW to control all of this. Im not a programmer but seen many projects using the arduino platform that use motor controllers, servos, compasss ect, and have seen sample codes.

So my question, is how would i control this from the surface?

I assume i need to have an ardunio on board to collect data from sensors, move the servos for the pan/tilt on the camera, and control the motors. What would be the best way to control this at the surface and output the data?

i would only need to see heading and depth on one of those small 24 character LCDs.


Take a look at this site - for one, it has a great solution for the "tether problem":

I would go for an on-board power source augmented by surface power; you may choose batteries on-board for the control electronics and/or servos, and surface power for the thrusters, or a combination of the two.

As far as communication, in theory you could use ethernet for everything (audio, video, data and control). You could also keep things as-is for the video, and perhaps use "proper" RS-232 (at +/- 12V levels) or RS-485 for telemetry and control.

It sounds like an ambitious project, and something I have often thought about trying (got so far as starting to build a thruster; right now I have a few Harbor Freight bilge pumps waiting for a day when I do get roundtoit).

Good luck!


To start you would probably want 2 Arduinos... One on the rover as the controller and one as the remote control.

You would then communicate to the rover with some sort of data protocol, probably a minimum of 2 wires, ground and data.

What is the length of the CAT5 tether and how many wires are available for you to use for control? I am assuming 4 (2 pairs) since the video uses 2 pairs?

You should be able to do every thing over the existing cat5 wire, even possibly using four of the wires for 10base-t communication, and the other four for power backup/battery charging. If the communication is ethernet based, you could use a web page for the the user GUI, and even have the possibility of operating the unit from starbucks while having a cup of coffee. Lot of possibilities. :slight_smile:


Thanks for the page, that eddy current clutch he uses is a pretty neat way of handling water weed getting stuck in the thruster. No stalled motor, no burnout.

ok, what am i going to need to start?

I know im going to need an arduino. ( noob arduino question, can you stack multiple shields? )

i need to control this from the surface, if i do and arduino to arduino connection how to i link the two?

if i do an ardunio to laptop connection how do i like the two? could i use USB to cat5 converters on each end and use software like roborealm?

would it be better to use arduino + ethernet shield on the ROV, with an IP camera hooked up to a wired router on the ROV, which is connected to the surface?

how would you do it, and what hardware would you use?

PS. ive said before im not a programmer, but im willing to learn, and spend the time/money on the hardware!


You might look at using an ethernet hub in the rov so an arduino/ethernet shield and IP cam can be connected to it along with a pc on the surface. The basic hubs are inexpensive nowdays.

Something I want to point out is that the author of the website (at the link I posted previously) has done quite a lot of the "heavy lifting" in the homebrew ROV arena, and he has developed some nice (and generally easy to implement) solutions to common problems that homebrew ROV builders have faced.

His tether management system is one such development; he has other ideas for all sorts of implements and devices as well - for instance, an interesting method of sealing the tether electrical connections to keep them as watertight as possible, even in the event of the tether's shroud (the outer sheath of the CAT5) rupturing. He has been gracious enough to share this information with the wider homebrew ROV community, which I think is a great service.

Arguably, his ROV designs are among the most advanced in the homebrew arena I have seen that can still be built on a modest budget. In fact, his latest design (though there haven't been updates to the site about it in a while) seems to incorporate much of what is being discussed here. I am not advocating for the copying of his work, but you would be remiss in your efforts to not study his work as you design your own system (its the same reason why we use libraries on the Arduino instead of reinventing the wheel each time).

One thing I would suggest for the operational (as opposed to testing) tether, though, if you can find it and afford it:

Use CAT5/6 with stranded conductors and silicone insulation and outer sheathing. It isn't easy to find, and it isn't cheap, but it should have better flexibility and be more resistant to conductor breakage over time (though nothing will last forever).

And about shield stacking, this page shows the pins for each shield, and marks them as red if there are a conflict.

@Richard Crowley

8+ inchs and the magnetic compass works just fine according to the research I have done, and considering i have a 24 inch enclosure, i can get enough clearance from the motors. Im actually thinking about mounting it ouside the enclosure near the very front of the ROV

@cr0sh is actually how I moved from being young years ago on my dads boat wishing I had a rov to play with to actually building one. Years have passed since then, and I have built several using techniques he has used on his website, and several other resources. Ive used his sealing method, i wired my control panel and relay boxes in the same way.

But I want to move away from this method , and onto something more professional. I dont want to have to run a pair of wires for each relay to control each motor, and I dont even get speed control.

The main body of my new ROV is a 5 inch ID 1/4 inch thick 24 inch long aluminum tube with oring slots machined on each end. Both ends are then capped with a 3/4 inch thick piece of plexiglass, which are then joined together with 12 threaded rods and bolts.

As for connections, I sourced some Subconn Ethernet connectors and Subconn Power connectors, which are specifically built for ROVs/AUVs.

I have no problem with the mechanical side as I have expeience in machining and have access to the tools.

I want to add control to the ROV, and I know it can be done.

In an ideal situation I would love to start with:

Motor Control via PWM and electronic speed controllers
Sensory Input: Magnetic compass
: Depth sensor
Camera (I dont mind running a seperate wire for video)

Id like to view the video on a monitor
Id like to control the ROV with a few joysitcks

something like this

Id like to have depth and heading displayed, like one of those 24x2 character screens

My problem is how do I connect surface to ROV, over what cable? do I create a network with arduno + ip cam + router on the ROV with another ardunio on the surface connect via cat5?

Later I would love to add some autonomous control like a gyroscope to keep the ROV on a level axis, ect.


It sounds like an ethernet connection is the way to go if you are willing to invest in an IP camera. You would need either an ethernet shield or some other ethernet adapter to connect the Arduino.

Since only 2 out of the 4 pairs are used, you could bypass using a hub/switch/router in the UAV and put the camera on 2 pairs and the Arduino on 2 pairs then have a network switch above water to connect everything (a router is unnecessary). This scenario would reduce power usage on the UAV.

Then you would need a way to control the UAV. This still gives you 2 options. Either just a laptop with a network connection or another Arduino with ethernet capabilities. Using the laptop would require creating a program that can talk to the Arduino via the network connection or maybe just using a web browser loading a page served up by the Arduino on the UAV.

Controlling it with another Arduino wouldn’t require a laptop present and would probably be about the same difficulty level.

If I were to do do this… I would use the Arduino Mega and IP Camera on the UAV and a laptop for control. The Arduino Mega would have some sort of ethernet interface (ethernet shield) and serve up a webpage that used some javascript to show all the information I wanted to see. This webpage would also include an iframe that would show the live video from the IP Camera. The webpage would also include buttons that would control the UAV. These buttons would be mapped to certain keys on the keyboard via javascript. I would then use this… to access my joystick via javascript to control the UAV.