Personal Projects
I was a major contributor to my CS 3110 group’s final project: an optimizing compiler to x86 for our own language written in OCaml. I worked on the intermediate representation generation, register allocation, bug fixes in emission, and randomized property-based testing. I also created the continuous integration pipeline and the language documentation.
computer-emulator
is an emulator written in Rust for my custom 4-bit computer
architechture. The architecture supports unsigned integer arithmetic, I/O,
and memory pages. I’m also working on a custom assembler to make writing programs
easier. I hope to one day build a working version in real-life or at least
some kind of logic simulator.
ftc-score
is the product of a research paper
I wrote on scoring FIRST Tech Challenge games using computer vision.
While it can’t produce a concrete score, it can pretty reliably detect and track
the playing field and important game elements under difficult conditions like
obstructions and distortion. You can read the paper if you want to know more about
the program’s strengths and weaknesses.
I don’t know if I’ll ever come back to improve it, but I
hope it can serve as a good base for future development.
Contributions
I work on the Single-Actuator Wave (SAW) robot project at CEI. The core idea behind our robots is that they can use their wave-shaped bodies to modify terrain, including building mounds, digging holes, and burrowing. As the name suggests, each wave is driven by just a single motor using a central helix.
My work is mostly around getting two or more of these robots to collaborate, as they are much more successful at their task when they climb on top of each other or use their peers as solid platforms. To this end, this semester, I have mostly been working on embedded signal processing to passively infer the state of another robot (such as the frequency of its waves or its location) using just a microphone. I’ve enjoyed working around the constraints of an embedded environment and have learned a lot about signals and microcontrollers. I’ve also touched on some PCB design, for example to integrate the microphone amplifier into the main robot PCB.
I’m a member of the autonomy subteam of Cornell Electric Vehicles, where I work on autonomous algorithms for model- and full-scale electric cars. The team works on problems spanning the autonomy stack, from perception to planning and controls.
Recently, I have been working mostly on iterative closest point (ICP), which is a (class of) algorithms for aligning point clouds. ICP is important for LiDAR-based localization and mapping. The project has lent itself both to deep research and hacking together new ways to improve convergence, which is a dynamic I have enjoyed.
I have also worked on a variety of smaller programs, like odometry for our mini-cars and vision code to collapse depth data into a planner-friendly occupancy grid.
ILGPU is a .NET library that allows developers to write GPU accelerated code without resorting to low-level APIs like OpenCL or CUDA. I have contributed basic bug fixes and some quality-of-life features. I’m currently working on a Roslyn analyzer to improve the developer experience by highlighting potential runtime issues. I’ve also laid the foundations for creating a new SPIR-V backend.
As a side note, I’ve found the ILGPU community to be incredibly kind and welcoming. I encourage everyone to give the library a try!