About Me

I'm a fan of clean/correct/efficient software and data-driven decisions. I love learning about the design of computing systems from the cloud to the edge.

Past Personal Projects

(titles are links to respective GitHub repos)

pathviz

When I was learning basic sorting algorithms, visualization videos were my favorite resource. Not only did they help me quickly gain intuition about what certain algorithms were doing, but they were also super satisfying to watch. Naturally, I decided to try to create my own animations for algorithms in a domain I find particularly interesting: path planning!

pathviz aims to serve as a framework for concrete implementations and intuitive visualizations of classic path planning algorithms. The project is set up within the ROS C++ framework and uses rviz to generate different shapes in space. It also uses graphlib, which is another one of my projects I wrote about below.

DynamiCal

After hearing terms like "state space control" thrown around time and time again by industry professional mentors in my high school robotics program (FIRST), I finally got a formal introduction to the theory in my freshman year of college. This project is my attempt at translating some of the theory I learned into clean software.

DynamiCal is a templated framework for the control and estimation of dynamical systems. It currently only supports basic functionality for linear time-invariant systems, but I plan to add to it when I take more courses and read more books about the fascinating world of optimization theory and random processes.

graphlib

In part due to the chaos caused by COVID-19 in the spring of 2020, I wasn't able to fully internalize some ideas from graph theory taught in my introductory data structures class. The summer after, I aimed to remedy that lack of foundation by writing graphlib, which is my attempt at defining a useful/extensible code representation of general graphs.

graphlib not only solidified some fundamental graph theory concepts for me, but also allowed me to dive deeper into the C++ STL and explore other built-in language features.

NerdyDrive

Developed for the FIRST Robotics Competition, NerdyDrive is a Java framework for running various autonomous actions on an 120-pound skid-steer drivebase with wheel encoders, an Inertial Measurement Unit, and a camera. The project scope encompasses visual target tracking and path following with Bezier curves, 1D motion profiling, and PID feedback control.

NerdyDrive was my introduction to DevOps, with beginner attempts at unit testing for crucial math utilities and continuous integration with Travis-CI. With the help of this project, our team placed top 3 in autonomous points scored at both of our 2018 regionals, for the first time in team history.

Early stage testing 2017

Switch autonomous routine 2018

2018 robot routines collection (Video by Wesley Soo-Hoo)

NerdyVision

Developed for the FIRST Robotics Competition, NerdyVision is a collection of OpenCV-Python image processing scripts aimed at providing fast and accurate goal detection to aid in autonomous and semi-autonomous actions. Running on a coprocessor system (Raspberry Pi + USB webcam), NerdyVision executes a series of filters to detect a retroreflective target, finds the desired angle and distance the robot should be at, and sends the data to the main robot processor.

Vision tracking demonstration