Skip to main content
Back to work
  • Embedded
  • Robotics
  • QA

UBC Thunderbird

Thunderbird was a robotic sailboat I revived solo for UBC Sailbot, restoring an inherited codebase to defend the team's win at the 2014 International Robotic Sailing Regatta.

- Solo developer: revamped and validated the inherited codebase
Myself posing with Thunderbird during testing
Loading...
Myself posing with Thunderbird during testing

The Problem

In 2014, I was part of the UBC Sailbot student team, a group that built robotic sailboats. Whereas the majority of the team was in design mode for a future boat, I alone was tasked to revamp and restore the previous year's boat, Thunderbird, to compete in the annual International Robotic Sailing Regatta.

The main issues with the previous boat were:

  • The core contributors to the codebase had just graduated, leaving code without meaningful context transfer
  • Because of this, code needed to be understood so sponsor presentations could come from a place of genuine knowledge
  • In addition, the IRSR had updated challenges which required new functionality to be implemented

Approach

Luckily, the boat I inherited was already a winning vessel (it won in 2013). One of the core factors in their success that year was testing with a simulated boat. Therefore I set out to ensure the simulation code, as well as the controls code, were all understood. I did this by documenting code sections systematically on each system, which also created resources for knowledge transfer to the rest of the team.

To validate my findings, I ran extensive simulation and field testing to capture behaviour and reverse-engineer code. Eventually I learned that everything was implemented in C on an Arduino for controls while a Raspberry Pi handled navigation in Python.

Thunderbird sailing autonomously during field testing on open water
Loading...
Field testing Thunderbird's autonomous sailing

In summary:

  • By being thorough in documenting code behaviour, I created knowledge resources that directly supported other members and myself for our presentations during demos
  • Frequent testing allowed me to understand the control system and implement new behaviours correctly
  • For instance, I expanded on the code by implementing the box challenge, where the boat had to hold its position within a specified box

Result

On competition day, while the team attended the competition, I watched the event nervously as the solo developer of the changes to the inherited codebase. Fortunately, it was exhilarating to see the boat pass all challenges, especially the new box challenge which other teams struggled with.

  • Passed every challenge — including the new box challenge that tripped up other teams
  • Perfect 50/50 finish — continuing UBC Sailbot's win streak at IRSR 2014
  • Durable knowledge transfer — documentation and testing resources that outlived the competition
The UBC Sailbot team celebrating their win at the 2014 International Robotic Sailing Regatta
Loading...
The UBC Sailbot team celebrating IRSR 2014

I am proud that my contributions led to another perfect 50/50 win at IRSR 2014, continuing a team streak of perfection. Not only am I grateful to be part of that winning legacy, I am honoured to have contributed my knowledge to the team in a durable, tangible way.

Need my help?

I take on web apps, hardware-to-UI integrations, and technical consultations — every engagement at a fixed scope and price.