Meet Eight of Nine (EON). A sub that takes high-definition 3D video and runs the Voyage operating system (for the record, I wanted to use the DS9 OS, but I couldn’t find any Linux distros with that name).
The project began when I read a Linux Journal article about Cambridge and the Defense Advanced Research Projects Agency’s autonomous submarine competition. For the sake of brevity, I’ll refer to Cambridge and DARPA as “The Collective.”
The Collective assimilated . . . I mean, assembled, a team of 20 undergrads from various engineering schools, so I though a couple friends and I could probably build a submarine too. This sub isn’t autonomous (because we couldn’t afford the sonar), but it does capture 3D video using two GoPros and you control it from anywhere on Earth over the internet.
I built the control GUI using Python and GTK. It also listens for input from a joystick so you can control the ROV using a game controller. The ROV streams HD video for navigation using gstreamer.
I wrote the main server for the ROV in C, and that listens for communication from the controller or any client that speaks the correct protocol — I started a curses based command-line client :). The protocol is as close to human speech as I could make it. For example, the ROV understand commands such as “dive at 20% power.” The idea was to eventually build voice recognition into the client using CMU Sphinx The server parses that command and passes it off to the appropriate subsystem — motor control, sensors, or lights — and then sends a response to the client about what happened. Finally, I wrote another quick Python script that streams the data from the sensors to the client. The client can then update its gauges appropriately.
All communication between the sub and land happens over Ethernet so the tether was a cat6 cable. The main brain of the sub is a Pico ITX board running Voyage Linux. I wanted to communicate with the sub-systems using USB, so I used one Arduino to control the electronic speed controllers, and a second Arduino to communicate with the sensors and to control the extra lights. To save power, the extra lights are only turned on when more light is needed for filming. — In retrospect, this seems silly; I put three processors on this thing, but to save power we turned off a couple LEDs 😛
Several people questioned my decision to put three processors on the sub, but this design allows me to refactor my hardware the way I’m used to refactoring software; I can completely change the motors and ESCs without affecting the code on the Pico board. I can also swap out the Arduinos for other microprocessors as I learn more about building motor control systems. Plus, I want to do real-time image processing, and, after we can afford sonar, I’d like to add landscape mapping so the ROV can execute autonomous patrol patterns, search patterns, and maybe even a scaled-down version of the Picard Maneuver.
Capturing high-definition 3D video is the ROV’s primary function, so we put 7 motors on it and positioned them so the pilot could move the sub in ways movie-makers might find useful, such as panning, orbiting a subject . . . and doing barrel rolls. So far, we’ve only broken one propeller.
Building a robot is fun, but I was a little disappointed that we weren’t able to make it completely autonomous. Beating The Collective is difficult, even for a sexy bald man.