Cross-Platform Qt Topside Application



EDIT: I've been asked by the coach of my robotics team to take down the Monterey code until the end of this MATE Season. In about July 2012 I'll re-upload Monterey with new features!

Sorry for this confusion,

Chris K

Hey openROV community,

I've been working on writing an open source topside application in Qt for the past few months, and I think it is finally ready to be released. It uses a USB joystick to drive the motors on an ROV, and it talks to the ROV over ethernet (using UDP). It has a bunch of fancy features (a PID algorithm for holding depth, vector drive support, tank drive support, etc), which you can find out about here:

It uses a UDP to communicate to the ROV, which means that it would be extremely easy to write your own bottomside application that interfaces with Monterey. However, if that is not your cup of tea, there is an already working bottomside application (CoreBuild), but it does not support all of the features of Monterey. Instead, I recommend that you use CoreBuild with LegacyController. But like I said, interfacing with Monterey via the UDP packet is extremely easy and I'd be more than happy to answer any questions regarding it.

The compiled application is Windows specific right now, but the source is available here: and is able to be compiled on Linux and OSX.

The joystick is read using QJoystick (found here:, which uses SDL, which means that it is cross-platform as well.

If you have any questions regarding the application at all, please don't hesitate to ask me. If you'd like to port it to another platform or would to like help out with it, please let me know!

Have fun and happy ROVing!

Chris K

Edit: I forgot to mention that if you have any input or feature suggestions, I'd love to hear them! Thanks!


This is AWESOME! I can't wait to try it out with some hardware. Have you done much testing with this yourself?



Thanks Eric! I have done testing of most of the individual components (using an older ROV with LegacyController to test the vector code, etc), and I've tested older versions of this software, but I still need to do a field test of the current version. I've done extensive bench testing, however. And since the packet is easily available for reading, I was able to examine the packet to help check my work. Everything should work fine in Monterey, but the depth holding PID algorithm will need to be tuned. I put in some example values, though, to help people out. The PID algorithm is going to be specific for each ROV, so it's impossible to make one tuning for everyone.

I should be testing it this Saturday, and so then I'll be able to get back to you with how well the depth holding works.


Chris K


For those of you who took a look at my Arduino software, I fixed two small bugs and added a feature.

I fixed the analog sensor reading bug. I totally forgot that the Ethernet Shield uses A0 and A1. That's my bad. I changed them to A4 and A5.

As for the feature, I added in UDP broadcasting (as opposed to point-to-point). This way, the IP address on the network shouldn't matter as much. This should help prevent people getting COM issues because of IP address issues.

Thanks for the interest!

Chris K


hey, my system is entirely web based and uses a parallax propeller: did you find the firmware on this site or do you want a copy? I came up with a very simple way to steer from a browser (which is nice because the camera is a IP camera, so just hit vertical tile and you have your full UI inside a browser)


Hey -

do you mind sending me the firmware? I'm interested in seeing how you did what you did. I use both arduinos and propellor chips.


Greg M


Here's everything you need. Download/comment :) The hardware schems should be around this site someplace, if not, tell me -- but this will work on a spinneret if you're just testing stuff.


thank you!


Really? That's pretty awesome! That portability must be nice. I never thought about using a web based control system... But that's a a genius idea!

Keep up the good work, mkb!

Chris K

P.S. I don't know if you've added ducts around your propellers or not, but adding ducts could help protect your wiring (from your propellers) and make your thrusters more efficient.


Thanks Chris! I'm almost to the point where I can start testing interfaces on the OpenROV prototype I have. I'll let you know when I'm there and I'll see if I can use your awesome software!



I'm glad all of you guys are sharing your work with each other-- it seems like there are a few people doing some pretty amazing stuff with software and I'm looking forward to testing everything out with the platform