top of page

Autonomous Boat

Autonomous Boat GitHub

​

Reason for Project

​

I've always had an interest in marine applications, but while in school I also began to take an interest in robotics. To combine these two fields, I spent a couple years as part of an underwater robotics team at my university that aimed to compete in the RoboSub competition. However, the year that my team was planning to attend was the same year the pandemic hit, meaning the competition got cancelled and I never got to see my project through to the end. Since then I've wanted to make a similar project of my own.

​

In previous robotics projects, my role was primarily on the mechanical side so I wanted to take this opportunity to learn more about how to write software for a robotics application. For this reason, I needed to pick a project that was going to allow me to keep the mechanical and electrical design and build as simple as possible. In addition, the design, build and testing of a submersible robot can quickly become complex, so instead of making an underwater vehicle, I chose to make a surface vehicle.

​

My goal for this project was to make a boat that could autonomously navigate short range GPS waypoint missions at slow speeds on small bodies of water. Ideally my objective would be to perform long range missions and bathymetric surveys, however I didn't want to take on too much at once. There is already a common open-source software for autonomous and RC vehicles called ArduPilot that could easily do what I set out to do with my boat, however using this software would remove any experience and benefit I'd hope to gain from writing code myself.

​​

Design and Build

​

For the hull of the boat I used a body board which is extremely buoyant, stable and light weight. This greatly reduced the likelihood of the boat sinking, and since the boat would be travelling at slow speeds over relatively short distances, hydrodynamics was not a high priority. On top of the board sits an electronic enclosure and a communication tower. The enclosure is a plastic storage container and inside there are three 12V batteries along with a GPS, IMU, SD card, two ESCs and an STM32F4 microcontroller which runs the boat. The tower holds a magnetometer, LEDs, telemetry radio and RC receiver and is designed to both keep these devices away from the other electronics and make the LEDs visible. Mounted underneath and on either side of the board are two 350KV underwater thrusters equipped with prop guards and 3D printed propellers. Together these thrusters provide differential thrust which eliminates additional moving parts incurred from using a steering mechanism. I tried to include enough hardware in the system to make the boat capable and give lots of room to develop the vehicle software. 

​

After several iterations of writing the code, this project eventually led me to creating my own general-purpose autopilot software for small, unmanned vehicles which I then used to make the boat software. The autopilot incorporates FreeRTOS with event-driven architecture which is used to control the timing of events, communicate with hardware, interpret incoming data, and perform vehicle calculations. It also contains a hardware-abstraction layer where vehicle-specific data can be exchanged which allowed me to customize its application to my boat. 

​

Navigation is achieved through the collection of GPS and IMU data that determines the boat's position and orientation. This data is compared to the vehicle's desired location to determine a propulsion output that steers the boat towards its target. Once the boat is found to be close enough to its target location, it moves onto the next waypoint in the mission. 

​

For remote operation, the boat uses a telemetry radio in conjunction with the MAVLink protocol to communicate with a ground control station (GCS). The GCS I used is called Mission Planner which enables mission planning and monitoring, parameter tuning, and mode switching. A failsafe-capable RC interface is also integrated into the boat allowing manual control via an RC transmitter in non-autonomous modes. 

​

Missions

​​

Since I've incorporated the autopilot software with the MAVLink protocol, I'm able to use Mission Planner as my ground control station to carry out waypoint missions with the boat. Mission Planner allows me to plan routes, upload missions to the vehicle, update the target waypoint and observe position and orientation in real time. The mission size is only limited by the amount of memory available to store the waypoints, however due to the limited capability of the boat, I often restrict the missions to smaller bodies of water that require fewer waypoints. Running missions has given me lots of opportunity to test my software and find the physical limits of the boat.

​​

Next Steps

​

Prior to this project I didn't have much experience with making boats, so to get everything working I tried to keep the design as simple as I could. The boat's performance ended up exceeding my expectation, however a couple major limitations have become clear:

​​

  • The boat is too light and the hull is not the right shape to handle a modest wind. The use of a body board and only carrying a few batteries onboard didn't allow the boat to stand its ground when there was too much wind present despite increasing throttle input.

  • Lake/pond weed and leaves would occasionally get stuck in or around the thrusters. Once this gets stuck, it greatly reduces efficiency and functionality of the boat and it must be removed manually.

​

Despite these limitations, I found ways to operate the boat that minimized their impact. Going forward, I want to improve my design by focusing on reliability and more intelligent software. This build has provided me with a great platform which will allow me to: 

​​

  • Continue to improve the software architecture, increase the number of operating modes, refine the control system and expand the communication capabilities with the ground control station. 

  • Test new hardware features such as preventing debris from getting caught on the props, different steering mechanisms and sonar.

  • Test performance characteristics in greater detail such as battery range, speed, mission time, etc.

​

Eventually there will come a point where this design has reached its limit. When this time comes, I hope to create a new version of this project that incorporates everything I've learned. This new version would be a complete overhaul of the system to provide it with more capability. Some improvements could include a purpose-built boat hull, more batteries, solar panels and a charge controller, new design and layout of all the electronics, sonar, a custom ground station and more.

© by Sam Donnelly

  • LinkedIn
  • github
  • Instagram
bottom of page