Projects
This is my personal projects page, where I explore what interests me in the fields of Machine Learning, Artificial Intelligence, and Robotics.
-

This project addresses the complex geospatial modeling challenge presented by Project Skydrop, a real-world treasure hunt requiring the discovery of a hidden prize using clues. By leveraging data clues taken from the hidden location and conditioning global context from satellites, we reason about the relative likelihood of the treasure’s position across a shrinking search grid.…
-

The goal of this project is to understand how modern deep learning frameworks scale training across multiple devices. Rather than treating distributed training as a black box, this project focuses on the underlying principles that make large-scale learning possible, such as parallelism, communication, and synchronization. To explore these ideas in practice, I implement a custom…
-

Rendering realistic images is always a balance between accuracy and speed. If you’ve ever played a video game after seeing a rendered cinematic trailer and left less than impressed, you’ve seen this problem firsthand. This project is about tackling one of the big bottlenecks: getting clean, sharp images from path tracing without paying the huge…
MORE PROJECTS WITHOUT WRITE-UPS (YET)
Cloud Hosted Open Source Simulator
Created an open-source virtual robot simulator to help students continue learning to code during COVID. The project gained official support and funding from FIRST Tech Challenge, evolving into Virtual FTC with me as a founding member and technical lead of a volunteer and contractor team.
Built a Unity-based simulator hosted on Google Cloud, enabling students to run code locally and control robots in real time via API, with video streamed directly to the browser — no installation required. Now used by 32,000+ students worldwide.
Website: vrobotsim.com


Custom Leather Soccer Ball Designer
Developed a Blender plugin that streamlines both the digital and physical creation of custom soccer balls. The tool automates panel generation based on user-defined geometry, applies 2D artwork seamlessly onto the curved surface with minimal distortion, and exports each panel in a laser-cuttable format.
- Parametric Panel Layout: Generate classic and novel panel configurations with adjustable seam widths and panel counts.
- Distortion-Minimized UV Projection: Project 2D graphics onto the 3D ball model so that artwork remains true to form once fabricated.
- Automated Unwrapping & Export: Unwraps the mesh and exports design files ready for laser cutting.


Generative Models
Projects associated with the class Generative Computing, some of which I continued to expand on after the completion of the class, using them as a testing ground for many of my other personal/research projects.
- Generative Adversarial Networks: First implemented standard generator and discriminator for adversarial training. Experimented with tradeoffs between the two networks and unstable adversarial training. Expanded GAN to update its distance metric between distributions from a KL divergence to using the Wasserstein or earth movers distance, with a gradient penalty regularizer to enforce the Lipschitz constraint on the discriminator. Project used as a testing bed for world model video tokenizer testing of discriminators (used to improve reconstruction quality over the typical MSE objective in VQ-VAE)
- Autoencoders/VAEs: Initially implemented a denoising auto encoder for motion synthesis using the motion capture dataset from CMU. Learned a motion manifold that we could then use to fix corrupted motions by projecting latents onto this manifold. I also utilized this manifold to preform motion autocompletion and style transfer between motions. Due to the challenges of vanilla autoencoder’s non-smooth latent space, I chose to implement a VAE so we are able to sample motions from this latent space safely, also allowing smooth motion interpolations. With this setup I explored multiple training optimizations like InfoVAE and SigmaVAE which each aim to tackle some of the training instabilities of the typical method.
- Diffusion Models: First implemented standard u-net diffusion model following the DDPM paper, trying out and analyzing effects of different noise schedules on the denoising process. To aid with the slow sampling of the standard denoising process, I implemented the DDIM sampling method which significantly reduces the number of calls to the expensive denoiser. Following this I learned about, experimented with, and implemented the related flow matching objective.
Operating System Kernel
During my Operating Systems course, I designed and implemented a minimal UNIX-like kernel from the ground up using C++ and x86 assembly. Leveraging a custom build system and QEMU for hardware emulation, I implemented core OS services including process scheduling, inter-process communication, synchronization primitives, and a simple ext2 file system driver. My kernel supports multitasking across multiple cores, user-mode process isolation, and standard system calls (exit, write, fork, exec, mmap, signals, file I/O, pipes, and more).
- Event-Driven Concurrency Model: Built a callback-style event loop to schedule closures across CPU cores with fairness, non-blocking scheduling, and optional delays.
- Synchronization Primitives: Implemented semaphores, barriers (including reusable variants), channels, futures, and bounded buffers—all on top of semaphores. Explored low-level x86 primitives (
hlt,pause,monitor/mwait) for efficiency. - Virtual Memory and Process Isolation: Enabled identity-mapped kernel memory, per-process user address spaces, demand-paged ext2 mounting, fork with COW semantics, shared mappings, and a minimal signal handling API.
- File System Support: Developed an ext2 reader with caching, reference-counted block I/O, inode management, directory traversal, and journaling concepts. Integrated file descriptors,
open/read/write/close,chdir,pipe, andmmap/munmapsyscalls. - Preemptive Multitasking & Interrupts: Added PIT-based preemption for user processes, kernel interrupt handling (IDT), ACPI/APIC drivers, and full context switching.
ROS Framework for FRC Robotics
I built a modular ROS framework to help FRC teams quickly get up and running with ROS on their robots. Starting from our 2020 Infinite Recharge bot, this repo includes everything from a proxy node that bridges NetworkTables and ROS messages, to full autonomous path following and vision-guided targeting. An expansion of this project included a Unity simulator, that created a digital twin for the robot, allowing efficient testing and development.
- Flexible communication: A lightweight proxy handles bidirectional data between the RoboRIO and co-processor—everything from joystick inputs to drivetrain velocities and turret setpoints.
- Sensor-agnostic localization: We integrate Intel RealSense cameras (T265 for odometry, D435 for vision) and wheel encoders via
robot_pose_ekf, making it easy to swap in new sensors or simulators with minimal code changes. - Web-based path editing: A Flask-powered node serves a simple web app for drawing autonomous trajectories, saved as JSON and loaded on the robot at runtime.
- Python state-machine autons: Autonomous routines live as clear, Python state machines—pick your sequence, enable auto, and watch the bot execute, with real-time feedback in RQT and RViz.
- Simulation support: Swap out hardware drivers for simulated topics and RViz visualization to test most of your code without the robot, with extensions to Unity via ros-sharp.