An autonomous submarine

Barracuda is an autonomous submarine that can control its heading and depth, hit buoys based on their color, and follow orange paths on the bottoms of pools.

A submarine consisting of a clear tube with electronics and side panels for mounting four motors.


The control system runs on the mbed LPC1768, a development platform for microcontrollers. It takes in sensor input and commands from the main computer, and outputs lists of speeds to the motor controller.

The sub determines heading by fusing data from the three-axis accelerometers and gyroscopes with a Kalman filter. We decided not to use the magnetometers because of magnetic interference in the competition environment. As a result, there was no way to determine absolute heading, so we just called the initial heading 0 degrees. The heading is sent into a PID loop.

Barracuda also has a pressure transducer, which it uses to determine the depth. We calibrated the sensor with a linear regression — pressure increases linearly with depth — and fed the result through a moving average before throwing the data into a PID controller.

Computer Vision

Barracuda has two 1080p cameras: one facing forward, and one looking down. The cameras are fed into an ODROID-X development board with Ubuntu installed, powered by a custom switch-mode power supply. Images are captured with Video 4 Linux 2, handled with OpenCV, and mostly processed using custom filters.

For more information, take a look at our project reports.