- Studying computer engineering at the University of Waterloo
- Interested in embedded/firmware, tinyML, robotics, and high performance compute
- Interned at Onsemi and Ford Motors building performant embedded systems, and at Endex.ai building autonomous finance agents
- Always building something and down to chat!
Recent Posts
Selected Projects
Distributed CAN Network
- Led firmware development for distributed STM32 system of plug-and-play nodes, using a shared CAN bus to synchronize behaviour with the drone state.
- Used the STM32 HAL to control DMA, interrupts, and hardware timers to communicate with board peripherals while minimizing overhead usage.
- Wrote modular, reusable, and highly maintainable embedded C++, making architectural decisions to decouple separate components.
- CAN LED network whitepaper
Low Power Semantic Visual SLAM
- Handwritten image processing kernels in assembly, using SIMD and minimizing data dependencies to eliminate pipeline hazards and 4x throughput.
- Fine-tuned and quantized image embeddings model in TensorFlow, optimizing for high-throughput ESP-NN inference.
- Developed a PnP RANSAC pipeline for robust camera localization, rejecting dynamic outliers.
Robotic Path Planning Library
- Use RProp numerical optimization to generate optimal Hermite spline trajectories.
- Developed Kalman-filter based odometry and IMU-based sensor fusion to adaptively react to disturbances.
- Deployed to a Linux device at FRC robotics competitions, enabling complex autonomous routes to score more points.
Closed Loop Stepper Motor ASIC
- Built a FSM-based SPI peripheral, using best practices such as cascading flip-flops to avoid metastability issues.
- Implemented an in-hardware PI controller using accumulators and power-of-2 coefficients to eliminate unnecessary MAC units.
- Implemented motion planning math using a FSM, saving 4-5x area over the naive MACs and divide units.
Functional Programming Language Compiler
- Developed a compiler for a functional programming language using techniques including specialization, unboxing, and defunctionalization to maximize performance.
- Used the Rust type system to guarantee correctness of program transformations.