Skip to content

Sailbot 2026

Latest

Choose a tag to compare

@aaron4522 aaron4522 released this 14 Jun 04:29
· 5 commits to main since this release
81a12d7

Sailbot codebase from 2026's competition. So long sailors 馃.

Rock solid RC sailing. Autonomy was tested but its difficult to determine how successful it was due to sensor errors, poor logging, and loss of website visibility on the water. We also tried using the mini boat for testing/competing as well but it leaked from both sides--even after waterproofing attempts. Instead, all mech/controls effort was refocused to Dan Marina.

Point Breakdown

Fleet Race (DNF):

Dan Marina sailed great for 20+ minutes prior to start but almost immediately after starting, the boat kept falling downwind with seemingly no rudder authority. Checking the boat out, we saw the rudder falling out and completely cock-eyed. Our 50kg/cm of servo torque throwing the rudder around likely fatigued the mount until failure.

Towing the boat back also flooded the interior through the loose rudder hole. The batteries, Pololu buck converter and servo extensions all got waterlogged. I realized the water-ingress mid-tow and disconnected the batteries.

Testing components at the airbnb later revealed that all components were fine. No fuses blown either.

Afterwards, we implemented configurable speed controls to smooth servo movement (+ mech reinforcing rudder mount) which prevented future problems. Also lowered the 12A fuses to a more reasonable 5A (@12.6V) since continuous/transient power draw has been lower than expected.

Station Keeping (5.6? pts):

Wind was relatively light. We RC'd in the boat about 80% upwind then switched to autonomy. Autonomy was programmed to go to the middle of the bounds until 4m15s and then leave. The boat appeared to mostly drift downwind with some intentional movement towards center. Not sure what autonomy was trying to do due to loss of WiFi but logs show that the boat knew it entered the bounds.

Precision Nav (0 pts):

Attempted with manual waypoint setting through the website. Immediately after setting the boat to autonomy and pushing through the start it turned hard to port and 360'd back through the start line. Afterwards, it veered off course with no indication it would make it around the first buoy.

In retrospect looking at the website, the IMU offsets ended up being ~45deg off which made the boat think it was facing a different way than it really was. Our servo wires were barely long enough so the PCB had to hang loosely in the boat instead of being held down by the PCB tray. This meant I had to set offsets based on how the PCB was placed in the boat. The offset error likely came from me using my phone compass as a reference and any shifting of the PCB during transport/sailing.

Later in the week we extended the servo wires so the PCB tray could be used. This squared the PCB nicely. IMU offsets would only then need to be calculated once and could only be in 90 deg increments. To determine the offset, I pointed the boat inline with a nearby road and referenced a map to offset the IMU so their directions matched. This resolved any issues.

Payload (3 pts):

We loaded Dan Marina with 60% weight. Waterline was solid and she sailed great at beam reach under RC. Struggled a bit tacking, but still made it back successfully.

Endurance (6.5? pts):

Tried setting up autonomy to get in more testing during the event but IMU/GPS would not read. We ended up scrubbing it for RC to maximize time on the water. I realized quickly after that I'd plugged in the receiver RX into the neighboring I2C SDA which caused the problem (skill issue). Fortunately no component damage.

The sail course ended up being reduced to 1/2nm on each leg due to Cornell only having 2 chase boats. Initially required 2 laps per point to compensate but there was absolutely no wind all day so it got reduced to 1 lap per point. Most teams, including us, struggled to sail at all in these conditions. We achieved 1.5 laps with full points for being on the water. Best team got maybe 3 laps so not much better.

Search (3pts):

We ran tacking navigation autonomy with manual waypoint setting in a rough Z search pattern. No cameras or object detection were used. Connected over Tailscale using my phone hotspot in the boat and Manav's hotspot for my laptop to eliminate any WiFi range issues. This worked great for SSH but I randomly lost access to the website just as we were towing the boat to the start. Reconnecting using different Tailscale identifiers, swapping to same LAN & using ip, etc. did not work. I'm guessing the website crashed during runtime. Since I ran everything as a launch file I could not easily restart the site without also killing autonomy and risking a DNS. Postmortem of the saved logs were inconclusive.

Started upwind of the search bounds. Coordinates and drop point all seemed accurate. The boat sailed close-reached in a straight line for the full 10 minutes, then turned starboard and started running after a few more minutes. We cut to RC before seeing what it would do next. Main sail stayed fully sheeted in during autonomy, even when it should've been loosened more. RC still had main sail control so its likely a software bug that was introduced while we were editing autonomy.

Presentation

Link.

What went well

  • Barebones RC setup (Battery -> 7.5V Pololu Buck -> FSIA6 receiver) works great. The controller also supports subtrim and endpoints as described in the manual. A simple setup like this is essential. This let us test/troubleshoot the PCB while mech team could sail and score points in RC events.
  • Batteries still hold charge very long. Never dropped below 12V/12.6V on battery box indicating >80% SoC left. Average draw on Oscar's PCB is ~7W for Pico + Sensors + Pi5 + RTK. Servo draw is minor on the mini boat but may be up to 10-20W on Dan Marina (measured only once a while ago). Batteries can definitely be downsized in the future if space/weight is an issue.
  • No signal integrity issues on sensors or servos! SPI worked over 2m using CAT5E cable. Shielded cable (ex. ethernet) should always be used since most protocols aren't meant for long distance (PWM, SPI, I2C, etc.)
  • Dan Marina became quite well waterproofed after a few rounds of testing. Bilge pump/water-detection is not necessary.
  • RTK worked great. Seems spot on from the map dashboard when using NY state stations. Adafruit PA1010D is not nearly as accurate (5-10m) but can still be useful as a fallback.
  • Tailscale works great. Using 2 phones as hotspots gives theoretically infinite range under cellular. Also eliminates dynamic IP annoyances from connecting over hotspot.
  • New tmux! Running ros2 nodes in ssh will be terminated if you lose connection. Previously we used nohup to continue running the process in the background but then you lose feedback (output is forwarded to logs). tmux runs all terminals on the remote machine so losing connection does not erase your terminal or stop any running nodes. Very nice QoL.

Issues

  • Miniboat waterproofing. Leaks from both front and back lids.
  • Miniboat space issues. At small boat sizes, the bend radius of USB cables is actually quite a lot. Low profile cables helped but its still a tight fit.
  • Servos don't care what's in the way. They WILL get to the angle you set. Both BILDA and HITECH sail/rudder servos have more torque than we need.
    • Rudder came out of the boat, likely due to sharp aggressive turning by the servo.
    • Jib servo also came close to breaking things by turning too far. Be careful when setting servos and set software limits to reduce total travel range of servo. (ex. always bring sail winch fully in before tying off to prevent breaking anything)
  • Crimps on windvane connectors were loose leading to the sensor not reading. We had to solder it instead.
    • Had similar issues last year with DIY crimps. Crimping is great but it also has a skill curve and its difficult to tell if you've done a bad crimp. Even if a connector is continuous, it can come loose when plugged into a header, or even if it is plugged in too much. Be conservative. If anything feels loose in the housing, or if the housing latch to lock in the connector is not perfectly level, just redo it.
  • Finding things, is as always, a pain. Recommend fully committing to XT60 over deans so that finding the right adapter isn't a mess. Tool case for essentials could also be neat.
  • Pi5 is incredibly picky on power. Sometimes it just killed itself after some time (30min to 2-3hrs) when on battery power, despite high voltage. Guessing there was very brief voltage sag in the buck converter (using cheap USB one)? Not 100% sure.
  • We have a lot of ass USBs. Some cables did not allow reading over serial and are likely power only. Labeled most with frownie faces. Your mileage may vary.
  • Our Pi5 SD card may have corrupted from pulling power? Disconnecting power is generally fine, but may have some small risk of corruption. Will be safer to shutdown first then unplug.
    • All I know for sure is it suddenly stopped connecting to the hotspot or router. The SD card got lost before we could hook up a display so we'll never know 100%.
    • We had a 16GB SD from when we used to run 2 Pi5s which made recovering fast, but free space was very tight (<300MB).

Improvements to Make

Software

  • Improve website dashboard for autonomy troubleshooting
    • Boat GPS breadcrumbs on the website get deleted on restart/crash. Instead save them so the boat's path can be visualized.
    • It's difficult to tell the boat's intent. Website only shows the 'desire' line of the boat, but our boat will be tacking so it won't sail directly to the waypoint. Adding indicators for the intended heading, cross track error, etc. will be helpful for tuning autonomy.
    • No go zone polygon on the map seems incorrect (boat wind indicator is accurate though)
  • Test & improve autonomy
    • Manav's jybing nav & tacking nav can be combined for a more robust autonomy stack
    • For waypoint completion, a circular distance check is used. However, in precision nav / endurance, we can round way past the outside of the buoy while still completing those points. Implementing a better check to see when we've rounded outside the buoy will help autonomy.
  • Improve sensor accuracy / reliability
    • IMU heading can be fused with the GPS/RTK's track angle
    • Kalman filter / averaging of the windvane position to account for oscillations
  • Throughout the week, coordinates for events were given as N E degrees/minutes/seconds. Our code expects decimal and we had to convert by hand. Will be useful to add functions for conversion.

Electrical

  • With a smaller boat, separate 5V & 5-7.5V bucks may not be necessary. Pololu's 5V@6A should be more than enough to cover all sensors and servos. I'd research if brown-outs or power noise from servo current spikes could be a problem for sensors when running from a single buck however.
  • Research more on expected current for PCB. I definitely overestimated peak & normal current draw. Our boats will likely be <20W. I suggested spec'ing for 10A which is an overkill 90W+ draw assuming a 3S battery.
  • Oscar PCB: Worked pretty great during competition but also has expected teething issues for a v1. Recommend revising the PCB instead of starting again from scratch to fix these issues:
    • Pico2 micro-USB conflicts with fuse mounting
    • SDA/SCL on IMU header need swapped
    • JST header should face outwards
    • Onboard USB-A (for router, Pi5, etc.) or 4-pin power-only USB-C (easier to solder)
    • New switching / transistor setup
    • Optional:
    • Battery monitoring via pico2 ADC
    • Two mount points for SBUS receiver (on board & 2m mast cable)
    • Change GP22/GP28 headers to more featureful pins (better for post-manufacture fixups)

Mech (for controls)

  • Mini boat spool comes undone

General

  • Clone SD & migrate 16GB SD card to a larger one. Also have backups.
  • Keep backups of essential components (ex. P3022 windvane fried before competition and has a 2-3 week ship time. We would be screwed for autonomy if that happened at competition.)

Presentation Takeaways

  • (Judge) Nano molex connectors are easier to crimp and more secure than Duponts. Could solve our DIY connector issues.
  • (Dalhousie) Carbon fiber is a faraday cage!!! RC/Wifi will not work if it is inside the hull and mech team uses carbon fiber.
  • (Cornell & Newburryport) Have ported their RC/autonomy to the microcontroller for reliability. We ported RC last year but autonomy could realistically be ran on Pico2 as well.
  • (Cornell) They have a cool looking simulation but it doesn't seem to accurately model real world behavior. I've also tried simulation before and its very difficult to get right. Time testing on the water >>> time spent making complicated simulations.
  • (RWU & St. Johns) Both used Ardupilot for autonomy to great success. Lowkey a bit of a cheat. Ardupilot is open source however so it could be worth looking at how it handles autonomous sailing to improve our own algorithms.
    • (RWU) Ardupilot does require tuning to get right and has no support for jybing as a fallback if the sailboat struggles to tack
  • (RWU) Simplicity and robustness should always be top priorities. Most points from competition come from having RC work consistently and the ability to autonomously navigate a predefined course.
  • (St. Johns) Unbalanced weight distribution caused their stern to submarine. With a smaller boat next year, our battery will represent a higher % of the total weight so it should be carefully placed.
  • (WPI & Cornell) Jetson Nanos overheat a lot when doing CV. Sticking to Pi5 with low, lightweight models for CV can keep temps down.