Software Projects

Path Planning with Trajectory Libraries

Traditional path planning techniques such as RRT or A* do not do a good job expressing physical constraints like maximum acceleration or turning radius. My algorithm builds libraries of dynamically correct trajectories offline that cover all possible initial conditions, and then at runtime selects the fastest path that doesn't collide with any obstacles.

Over a sample of 1000 runs, my algorithm runs in 1.8ms, is only 4% slower than the optimal path, and can find a feasible path 98.4% of the time.

SpaceX Falcon 9

This summer I worked at SpaceX on the Flight Software Test Team. Ensuring software correctness is a challenging problem on a project as complex as a rocket, where so much performance depends directly on the hardware. Our team creates automated tests that leverage both simulations and actual flight hardware to verify that new code is flight worthy, and that no changes have broken old subsystems.

I was the lead testing engineer for an overhaul of the fuel systems on the rocket for the upcoming Flight 21. I also created a data analysis library wrapping Python Pandas for monitoring telemetry data that comes back from our simulations and actual flights.

High Performance C++

Using C++ I created a variety of physics simulations for a graduate class on Systems Development for Scientific Computing. I implemented an abstract graph class to represent my data, and applied it to several different problems including mass spring simulations, shallow water models, and geometric collision detection.

The class focused on performance and maintainability, and in particular how to use strongly typed languages and representational invariants, preconditions, and postconditions, to write code that is provably correct and robust. Understanding CPU architecture and compiler optimizations allowed us to achieve incredibly numeric performance by avoiding the common pitfalls of high level languages while still making use of abstraction.

Robot Soccer AI

Being on the MIT / Harvard Robocup Soccer team is a fun and fast paced engineering experience. We compete at a world championship tournament every summer, and spend the school year working on new mechanical designs and new behavior algorithms to out-maneuver and outsmart the other teams. I redesigned our Artificial Intelligence and planning software based on nested Finite State Machines, and dynamic planning of passing and shots, rather than pre-scripted plays.

Robot Simulation

My goal with this program was to create an environment where I could accurately simulate a robotic system without any hardware. The most challenging part of robotics is overcoming the physical imperfections, noise, and unpredictability in the environment. I tried to mimic this as closely as possible in the simulation by only allowing the robot to perceive its environment through "sensors" which add noise to their measurements.

Cellular Automata

This program simulates Conway's Game of Life, a well known rule for 2 dimensional Cellular Automata. Cellular Automata can produce incredibly complex patterns from extremely simple rules and interactions, and noted scientist Stephen Wolfram suggests that they can be used to model reality more effectively than mathematical equations in certain situations.

This program is multithreaded to take full advantage of multiple CPUs in calculations, and the universe is stored in linked tiles supported by a hashmap. The tiled architecture allows the cells to spread infinitely in any direction, but limits computation to regions that are populated for maximum efficiency.