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. |
Adaptive Control for Damaged DronesModern control techniques like LQR require an accurate model of the system they are controlling, but if that system changes changes you're out of luck. I designed an adaptive controller to maintain control of a drone even if one of its propellers breaks. The algorithm compares the drone's expected behavior and observed behavior to learn thrust offsets and correct them. |
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. |
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. |
Robot Soccer AIBeing 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. |
Termite TrackingIt took 60 hours of tedious labor annotating videos of termites every time the Self-organizing Systems Research Group at Harvard ran an experiment. Because of the experimental setup, off-the-shelf tracking software didn't work. By using standard image processing techniques, a model predicting each termite’s motion, and small amounts of human input, I was able to largely automate the video processing, reducing the required labor from 60 to 3.5 hours. |
Erosion Simulation I wrote this simulation while briefly working with a professor at Harvard University doing research in computational geomorphology.
|
Unreal GravityThis program simulates how objects would orbit a central gravity well if the relationship between distance and force in Newton's law of gravity is changed. Exponents other than -2 produce strange, but still stable orbits. |
Landscape GenerationThis program uses Perlin Noise to generate random landscapes and color them realistically. A number of parameters allow the user to tailor the scale and level of detail of the generated landscapes, and the program can produce surprisingly realistic results. |
Robot SimulationMy 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.
|