Sailbot Hackathon

Working on our design (left) and our team at the end of the competition (right)

Our team

Overview

In March 2026 I competed in UBC Sailbot's design competition with Avi Guha, Samuel Sjoden, and Wayne Sudanartha.

We designed "The SuperVisor", a pair of smart glasses that help visually impaired people get around by turning what a camera sees into small taps on the side of their head.

The SuperVisor

The SuperVisor

My main contributions were:

Motivation

Current navigation aids for the visually impaired are often bulky, loud, or draw attention to the person using them. We wanted something that looks like a normal pair of glasses, and uses quiet taps instead of audio so the feedback stays private.

Architecture

System diagram

System diagram

An ESP32-S3 sits at the center of the glasses. It talks to a phone over Bluetooth for things like GPS navigation, and to the IMU and haptic drivers over I2C.

The camera doesn't go to the ESP32 at all. It goes straight into a neural processing unit (NPU), a chip we designed to run an object detection model. Even a small model like YOLO26 nano has 2.4 million parameters, which is too much for a microcontroller to run in real time, so the NPU runs the model and only sends the ESP32 what it found over UART.

Implementation

Neural net

We used Ultralytics' YOLO26 nano model to detect objects in the camera feed, like people and phones.

Example YOLO run detecting a person and a cell phone

YOLO detection

Model to silicon

Turning the model into a chip took four steps:

  1. Convert the Python model to C++ with hls4ml
  2. Convert the C++ to Verilog with Bambu HLS, which split the network into 24 stages
  3. Turn the Verilog into a physical layout with LibreLane
  4. Output a GDSII file, the file you'd actually send to a fab, on the SkyWater 130 nm process

Model to silicon flow

Model to silicon

My part was steps 3 and 4. I set up LibreLane in a Nix dev shell so everyone on the team could get the exact same tools with one command, and then got our generated Verilog through to a GDSII file.

Layout of the NPU

NPU GDSII

Glasses control board

I did the MCU schematic for the control board. The ESP32-S3 shares one I2C bus with a BNO086 IMU and two DRV2605 haptic drivers, one for each arm of the glasses. Both haptic drivers have the same I2C address, so each one gets its own enable pin. Since it was a hackathon we ran out of time, and only got as far as the schematic.

MCU schematic

MCU schematic

Power module

Our team also designed a power module with Qi wireless charging and overcharge protection, small enough to fit inside the frame of the glasses.

Power module PCB

Power module PCB

Challenges

  1. Our chip layout didn't have any real memory in it
    • The generated Verilog stores the model's weights and results in 25 memories totaling about 396 Mbits. The Sky130 process doesn't have memory blocks anywhere near that big, and building it out of the ones it does have would take at least 24,204 of them, about 6,887 mm² of silicon. With the time we had, I ran the flow with the memory left as a placeholder, which gave us a 250 µm × 250 µm layout of just the logic.
  2. We ran out of time
    • It was a hackathon, so a lot of the design stopped partway. The control board never got past the schematic, and the chip layout only covers the logic.

Presentation

Repositories


Our team ended up winning the competition!