- 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.

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.

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

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.