Projects

I’m working on accelerating the classic RRT algorithm. The goal is to parallelize tree expansion to more effectively explore high-dimensional spaces. I may port the algorithm to an FPGA one day to learn more about accelerator design.
Currently, there is only a CPU implementation available. A KD-tree is used for nearest-neighbor lookup, though I am exploring alternatives that may be more amenable to a GPU/FPGA implementation.

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.
The register allocator uses an algorithm called linear scan. Linear scan was attractive over alternatives like graph coloring due to it’s simplicity. It is also the algorithm of choice in many JIT compilers due to it’s lower time complexity.
Packing Robot

For my robot manipulation class, my group programmed a robot arm to pack items into boxes of various sizes efficiently. I was responsible for a lot of the code outside of the main algorithm. For example, I built a 3D object pose registration system that uses Fast Global Registration and Iterative Closest Point to match CAD models of objects to objects found in the scene. To improve results, I added an active perception system where the robot would look at the scene from multiple angles and combine the point clouds before attempting to match objects.
An example run of the algorithm is shown to the right. The fiducial marker is for better camera localization. You can see that the green bottle model is correctly matched to the black bottle in the scene. However, some highly ambiguous poses are not detected correctly, like the green milk carton in the background, which should be offset by 90 degrees.

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.

computer-emulator
is an emulator written in Rust for my custom 4-bit computer
architecture. The architecture supports integer arithmetic, basic port-mapped I/O,
a rather limited 256 nibbles of RAM, and up to 1KB of instruciton ROM. There is
no stack, but subroutines can be called up to depth 1.
The emulator also has a device system for hooking up virtual devices, like a console, though this system could use some work. There is also an incomplete assembler that can (at least) assemble Hello World.