Project: A fully autonomous OpenROV


Dear readers,

I would like to introduce the project I have just started to work on with two fellow students. In short, we are three MSc-students from the Delft University of Technology and we aim to make the (our ;-)) OpenROV fully autonomous (meaning: autonomous behaviour, cutting the wire).

This will be done, most likely, by implementing ROS loaded with an autonomous controller on the Beaglebone and control the OpenROV from there, bypassing the cockpit-interface all together. From what I read so far, this has not yet been achieved and I have not found any other projects that are currently working on this. But if I am wrong, I would like to hear that, so we can focus our work on extending someone else’s.

Anyhow, I would love to hear your thoughts on this project, any at all, from technical realisations to general opinions. I will try to update the status of the project regularly.




Welcome to OpenROV!

Your plan is a great idea! I am not aware of anything finished in this direction. Maybe because usually the OpenROV is used in a lot of different ways and environments so that it is very hard to create the overall autonomous software.

The autonomous software is on my list too, and I agree that a ROS implementation would be the first step to go. Especially as there are so many ready to go modules available. However, I have faced many problems due to the high diversity under water. It is very hard to gather enough reliable data of the ROVs environment to implement a control software. I would love to hear more from your approach!

Have you already started your built?


Our OpenROV is already up and running, we did some dives in a “small” towing tank at the university and once in the open water - and the OpenROV did not break :slightly_smiling:.

For the moment we decided to limit the application to mellow circumstances (probably the towing tank) because the focus of the research is more on a proof of concept for some communication and object finding principles than that it is for proper interaction with a real environment (although, it will become of interest in the long run eventually).

The idea that’s in my mind right now is to completely ignoring the current node.js and socket.IO environments and rewrite basic functionalities in C++; implement ROS - and some of its nifty features, and start adding simple autonomous routine tasks.


A very adventurous project! I don’t really understand how you will be safe in an un-mapped environment. It will be very easy to get stuck.


Hey guys, you might find the Sparus project from the University of Gerona helpful:
Going the ROS route is a great choice, IMHO.
There are OpenCV libraries that should allow you to do some SLAM.
A word of caution though: hydro-dynamically the current OpenROV design isn’t that great, and I believe it may be difficult to model the vehicle behaviour. Once the Trident is out it’s a different ballgame.


Roy_Petter_Dyrdahl, interesting link! I will definitely check that out. e4sandy: It will be very adventurous! But as I mentioned earlier, we’re going to start with relatively safe environments and do some experiments. Don’t expect any autonomous action from me in the open water anyday soon!

So far II have not been able to give the project a lot of time in the past few days, at the moment I am (trying) to install ROS on the BeagleBone. At first I tried to install it directly over the OpenROV-software, but since it has so many (weird) network configurations (no internet unless cockpit-page is loaded for instance) I ran into a lot of errors, so I just flashed a brand new Wheezy image on it.

Cheers for the positive reactions so far, I will keep you guys updated if I have anything to show.


Interesting thought, but what is the project? Did I miss that somewhere? That will determine the complexity of the autonomous routine.


The project, for now, is to implement a simple autonomous routine on the OpenROV.

So far the idea is to actually only use the OpenROV for its hardware platform and actually “rewrite” (just a bit, as I don’t need an interface or manual control for now) most of the javascript stuff on the beagelbone and replace with a ROS-based C++ state-machine. At first, I’m not planning on changing anything on the controller, but maybe in the long run.

A question for now: I’m having a hard time finding the code where the actually command is sent to the microcontroller?

I can see that the press of the appropriate key issues a command from rovpilot.js, but in which file can I see the code where it actually passes on the command through the serial-bus to the microcontroller?

edit: Does the OpenROV do anything like this to enable serial communication?

edit2: Also, are there any checks on that the microcontroller runs before taking commands from the beaglebone, like sending a test message back in forth in order to make sure both units are active? Suppose if I don’t run any of the OpenROV software on the beaglebone and just emulate a command to the microcontroller (through UART /dev/ttyO1 as defined in config.js), would it simply accept it? Or would it not work because the microcontroller is waiting for something to to be proper first?

I’ll look through the microcontroller code more in order to get an answer, but maybe you guys already know it.


@codewithpassion or @badevguru might know the answer to your last question. With regards to ROS integration, you might have seen that there has already been done some work on this subject, notably:



I read about these two projects, but they both run ROS on a laptop and use javascript for interaction - I’m trying to run ROS on the beaglebone (working so far), create c++ ROS-nodes that emulate the commands which are now generated through the web interface (and sent over the serial port through JS?), and then apply some artificial intelligence and see if I can get it to do some autonomous action. The succes of the later completely depends on how well I can get the OpenROV to control itself.

One of the hickups thusfar, is that I plan to do vision-recognition, which will have to be processed on a more powerful unit then the beaglebone. For now I’ll probably use the ethernet cable to do the processing on the surface and send acquired information back down under water.

So far: I started with a completely fresh image of Ubuntu 14.04, installed ROS, initialised UART1 (P9_26 P9_24) , made a list a essential commands I wish to execute (thruster settings, direction, etc) and soon will start to write the first ROS-nodes which will emulate these commands and send them to the microcontroller.

About communication between the BeagelBone and the Arduino around boot time, I found some references to boot-checks (I think), but I haven’t taken a lot of time to study it more thorough.

That was it so far!


I’m currently doing research and planning something similar. I am trying to design a system to complete the microtransat challenge but submersible.

I’d interested in the progress you make, when I research ROS in the past it found it to be very large and had a hard time trying to get it to run on the Raspberry Pi. I have actually started designing my own light weight version of ROS.


@thomash, looks great, I’m very interested in your progress.
From what I have been able to deduct so far, there are a few platforms that should work really great with ROS, one of them being the BeagleBone Black used in the OpenROV. Another such platform is the ErleBrain (which comes with ROS pre-installed) made by the Spanish company Erle Robotics, although at first sight it may look like a modified Raspberry PI.


Just to give a little update:

Small setback because one of my beaglebone’s SD card-slot malfunctioned (read: it is broken) so I waisted quite some time on that.

So far I have successfully set up an environment in which I can record all communication between the Beaglebone and the microcontroller so I can start to write a ROS-library that will imitate the controls…


We are working on a fully autonomous ROV as well by using hydrophones to pin-point a pinger (sound emitting device) and make the ROV follow it.

First we need access to the full source code of ALL components of the ROV (main board, Beagle Bone and Arduino) to understand how they are coupled/integrated with each other.

Anybody know where we can get this source code?

Karl Chandeck
Mech Eng. Student at Villanova University


On the OpenROV home page, look under the tab marked “Open Source”


Hi,thomash, i am also having troubles in finding this, how is your progress ? Did you find out the code ?



Look in openrov-cockpit/src/lib/Hardware.js


Dear readers;

After a long period of silence I have some news!

I have made a few tiny steps again, and currently I have a ros-node on the beaglebone up and running that can handle the communication between the microcontroller and ROS. I want to know if there are any other people familiar with C++/python/ROS (and compiling their own programs) who are interested in collaborating in order to improve this stuff more quickly.

I guess that my next milestone would be to translate as many commands as I can…

I’m also interested in discussing the software hierarchy… I’m just working and bending stuff until it works, but have some other people think with me on how to built a system more decently will benefit everyone in the long run. Sharing a few thoughts on how to structure classes/functions/variables etc.


My name is Ahmed Waly, I am the founder of Navigasense, which provide a vision aided inertial navigation system for ROV plus 3D laser scanning in one package I will be happy to help you in your project.


Do you have any experience in ROS?