RoboSub Autonomous Underwater Vehicle Club

Overview

RoboSub is a competition where autonomous underwater vehicles complete navigation, perception, and manipulation tasks. I was a primary contributor across the software stack of a fully autonomous 6-DOF underwater vehicle, building perception → control pipelines to complete 5 competition tasks. I developed and integrated ROS, Gazebo Sim, and hardware for perception, EKF estimation, PID control, and task solution logic. As president of the team for 2 years, I led the team to 7th of 59 teams.

Competition Highlight

The sub autonomously makes contact with the first buoy and the backside of the second buoy

Link to full video: YouTube

Our Approach

Our software stack was written in Python ROS1 with C++ nodeleted code (zero-copy) for the image processing pipeline. We used SMACH state machine to organize mission logic. Our task solutions primarily relied on the sub navigating to an estimated prior location until a camera detection was made. Afterwards, we would adjust setpoints for the PID loops based on the bounding box locations from the CNN model until the correct position was reached to complete the task (eg making contact with a buoy or dropping a torpedo into a bin).

Our vehicle featured 7 cameras granting 360 degree lateral and downward vision. Our state estimation relied on an Extended Kalman Filter that fused IMU data, compass data, pressure depth data, and velocity data from a Doppler Velocity Logger. The vehicle had 6 thrusters for six-DoF control which ran a PID loop on all axes based on the state estimate. We also had a dedicated NVIDIA GPU for running the CNN model.

Component labels on the vehicle

My Development of Mission Logic in the Gazebo Simulator

Development of the buoy and droppers task logic

Gallery