Work

Marine Design Team

Working to combine software, electrical, and mechanical engineering to create a robotic autonomous submarine to compete in the 2024 RoboSub Competition.

A CAD model of a prototype for a robotic autonomous submarine.

The Marine Design Team is a group of students working to combine software, electrical, and mechanical engineering to create a robotic autonomous submarine to compete in the 2024 RoboSub Competition. The competition is held in San Diego, California. The competition challenges students to design and build an autonomous underwater vehicle (AUV) to complete a series of tasks. The tasks are designed to mimic real-world scenarios and include things like navigating through a gate, picking up objects, surfacing at a specific location, and more.

Joining the Team

I joined the team when it was first formed. Eventually, I was promoted to the role of co software and co electrical lead due to my knowledge in these areas. This was a great opportunity as I was able to use all of my knowledge and skills as well as learn a lot from the other members of the team.

The Mechanical Design

The mechanical design of the submarine is a very important aspect of the project. I have been using my experience with the battlebots club to help them select materials and design the hull. The mechanical team was concerned about the strength of the thruster mounts. I gave them 2 suggestions. The first was to try with PLA and see if it was strong enough. From my experience PLA is actually quite strong especially with some tweaks to the print settings including increasing the infill percentage and the wall count. The second suggestion was to try TPU. I had experience with TPU from the Battle Bots Club where I saw it was used by some of the top teams as a great material for impact resistance. The first part I 3D printed with PLA was more than strong enough so we decided to go with that as it’s much easier to print with than TPU and gets higher print speed and quality.

Software Prototyping

I have been co leading the software team in prototyping the software for the submarine. We have been using ROS to prototype the software. This is definitely the most complex software project I have ever worked on. My main challenge right now is to get the kinematics of the submarine working. This is a very complex problem as the submarine has 8 thrusters and we need to be able to control the pitch, roll, and yaw of the submarine. The first thing I am doing to solve this problem is to create a simple diagram with the thrusters and the forces they produce. This way I will know what thrusters to fire to get the submarine to move in a certain direction. In software, I plan to use an array to store the directions that the submarine can move in. I will then use a PID controller to control the thrusters to get the submarine to move in the desired direction. This way I can easily change the direction the submarine moves in by changing the values in the array and the PID controller will take care of the rest.

The Electrical Design

I have been co leading the electrical team in designing the electrical system for the submarine. My main task right now is to work on the interconnect bus between the different sensors and our compute board the Nvidia Orin Nano. To save cost I have been looking at using an ESP32 as the main microcontroller for the interconnect bus. One of the reasons I chose the ESP32 is that it has a lot of GPIO pins and has built-in Wi-Fi and Bluetooth. Which will allow us to easily add more sensors to the bus and also allow us to easily communicate with the compute board which I hope comes in handy when we need to debug the robot.

One of my favorite parts of the project is that I am able to spot problems before they happen. For example, I realized that we had a bunch of different sensors that all used different signal voltages. I was able to suggest that we use a level shifter to shift the signals to the same voltage, I had actually run into this problem before when working with NeoPixels.

Another potential problem I was able to solve was the lack of any feedback for what was happening in the software side. I suggested that we add a simple array of LEDs to the interconnect bus. This way we can have a visual indication of battery level, sensor status, and more even when the robot is underwater.

Software Utilized

C++ Python Ros ESP32 Nvidia Solidworks Cura