For the last five weeks, I have been working on a robotics project to improve fully autonomous sailboat capabilities with the Dartmouth Robotics and Reality Lab under the guidance of Professor Alberto Quattrini Li and the mentorship of many graduate students in the lab. I want to share this project update and overview since I recently tested my sailboat on the water for the first time. It worked successfully in manual operation mode and I collected lots of data for analysis and improvement!
Project Overview
Autonomous sailboats have been used in recent years for long-term environmental surveys and defense applications. These systems are advantageous compared to autonomous motorboats or human-crewed vessels in that they consume little energy to operate, so they can operate indefinitely by using energy from solar panels, hydrogenerators, and wind turbines. They are also uncrewed, which lowers personnel costs and eliminates the danger to a human crew in harsh or hostile environments.

This project involves recommissioning a one-meter autonomous sailboat so that it can be controlled without user input and navigate under changing environmental conditions to achieve certain goals such as efficiently surveying a given area. The original system was built by Ben Wolsieffer for his honors thesis in 2020 when he converted this boat from a hobby RC boat to an autonomous platform to develop and test a novel path planning algorithm. My goal for this project is to restore this boat back to functionality (many parts have failed, grown outdated, or been removed in the years following his thesis), test various navigational algorithms, and ultimately develop and validate an improved algorithm to better address the difference between simulated results and real outcomes on the boat in the field.

The systems on the boat include a Pixhawk flight controller, a Raspberry Pi for navigational algorithms, a servo for rudder control, a servo for sail trim (trims both sails at the same time using strings), an anemometer for wind speed and direction, a GPS unit, an RF receiver for remote control, a telemetry radio, and a LiPo battery pack.

First 75 Hours
I spent about 15 hours per week on this project during the first five weeks of our spring term at Dartmouth, balancing school work as an engineering major and working as a teaching assistant at the same time. In the first few weeks my overall goals were to:
- Research the field of unmanned surface vessels (USVs) and determine interesting research directions
- Learn as much as possible about the system’s hardware and software
- Extensively test and rebuild the system to get it operational.

I started my research by reading Ben’s thesis on path planning under dynamic wind conditions and then expanded the scope of my search from there. Among many other papers, I found myself most interested in a thesis by Matthew Ahlers reviewing survey strategies for autonomous sailing vessels. The guiding question for which can be summarized by asking, how can autonomous sailboats efficiently cover a given area with a limited sensor range? Given that autonomous sailboats are primarily used for long-term monitoring and surveillance, this question has direct implications for the resource usage and time efficiency of these surveys.
After spending time mapping out each of the onboard systems and how they interface with the flight controller, I disassembled the boat and began to troubleshoot. The hardware of the boat was in mixed condition and I made too many repairs, modifications, and additions to include them all here, so I’ll just give the highlights of what I did.
- The anemometer was not reading wind speed properly, so I set up an oscilloscope test to verify the functionality of its magnetic reed switch. I determined that its GPIO input into the Pixhawk required a pull up resistor, so I rewired and soldered these connections. I then calibrated the speed and direction sensors using a separate handheld anemometer.
- The original battery pack that used AAA batteries was corroded beyond repair and I found that the power module (which reads battery current and voltage while supplying a steady 5.3V to the Pixhawk flight controller) was dead with a multimeter. To replace them, I soldered a new power module together to accept LiPo batteries to improve the running time and allow for recharging.
- The Raspberry Pi had since been removed from the boat, so I 3D printed a mounting plate to attach a new one and wired it into the 5V power and connected it via serial USB to the Pixhawk. I didn’t experiment much with the Raspberry Pi before the first field test, but it will be very important later for running navigational algorithms
- Many of the peripherals had trouble communicating with each other and the ground station on my laptop, so I updated the firmware on the Pixhawk, telemetry radios, transmitter, and receiver to ensure they communicated properly with each other.

In order to interface with the boat, I read extensive documentation on various industry standard ground station applications and experimented with them on my laptop. To work with the Pixhawk running ArduPilot firmware, I learned how to use Mission Planner, QGroundControl, and MavProxy for configuring parameters, calibrating sensors, and creating mission plans among many other uses. To analyze the logs recorded by the Pixhawk, I used MavExplorer which visualizes GPS movements and provides tools for reviewing sensor data.
The Field Test
After reassembling the boat and configuring all of the ArduPilot parameters, I tested its responses to remote input and measurements in manual mode (which requires full user control with a remote transmitter) and auto-trim mode (which automatically trims the sail based on wind direction and remotely controlled rudder movements) both in the lab and outside to ensure good GPS, compass, and wind measurements. Then after developing a thorough pre-field test checklist and gathering all of the equipment, I set out to Occom Pond to test the boat on the water.

The boat was watertight and sailed successfully in manual mode! It responded to remote inputs and transmitted data back to the ground station via telemetry. It even (sort of) worked in auto-trim mode, though its sail trim and rudder response controllers need to be tuned. Of course, not all went to plan, and a key problem was that there was a significant amount of magnetic interference in the hull of the boat, disrupting the Extended Kalman Filter that translates the data from many different sensors including the gyroscope, accelerometer, magnetometer, and GPS into an accurate attitude, heading, and position reading. This had the effect of making the boat think it was doing barrel rolls on the water and jumping hundreds of yards in split seconds, which reduced the effectiveness of the auto-trim mode and rendered the fully autonomous mode (which automatically adjusts the rudder and trims the sails to follow a path to a specified waypoint and tacks when necessary) ineffective. This could be fixed by redesigning the layout of the components in the hull to move the GPS away from metal and other electronics, as well as using shielded cabling if necessary. The logs that the boat recorded during testing will also help to diagnose any other problems and set up a realistic simulation based on actual wind measurements.
Takeaways
During these 75 hours, I learned how to tackle a complex problem and break it into more manageable pieces by taking an autonomous platform with little documentation and figuring out how each component works together physically and in the software. I designed tests to diagnose problems and implemented solutions to fix them. I also explored how standardized software platforms and communication protocols such as MavLink and ROS2 work together to enable systems running in parallel at different speeds to work together. Moving forward, I plan on setting up a simulation software stack on our lab servers to evaluate and test coverage path planning algorithms. This will involve choosing a simulation platform, setting up ROS2, and running ArduPilot Software-In-The-Loop in a Docker container for standardized deployment. Then, I will perform a systematic literature review to determine the strengths and gaps of current coverage path planning literature. I plan on benchmarking various algorithms and testing them on the field with the sailboat after fixing the problems discovered during the field test. From the data collected in simulation and the field, I hope to identify improvements in the existing navigational algorithms and implement them. All in all, the boat is in good enough shape to shift my focus from the physical systems to the simulation and the algorithms that navigate it.