Collaborated with Alvin Sun, Rohan Sinha, Chris Agia, Joshua Lee
ODROID Controller (top) and two CO2 thrusters (underneath)
Air bearing on granite table to provide near-frictionless surface on which to "float", emulating simplified space dynamics in 2D
8 Independently-controlled compressed CO2 gas thrusters arranged in opposite pairs offset from the COM, to apply bi-directional force along each line of action
External Motion Capture system for ground truth state
Existing ROS2 Stack on ODROID controller, implemented in hybrid Python and C++, largely implemented by Alvin Sun
Implemented simulation in Python to evaluate standard metrics (eg tracking, fuel usage, optimization convergence time, etc)
Evaluated various optimization formulations (eg planning on force/moment, planning on thrusters directly, sampling-based methods, mixed-integer solver for discrete thruster inputs, etc)
Selected Formulation: Directly optimize over continuous trinary thruster pairs, then use rounding to translate to thruster inputs
Gain-scheduled controller with long-lookahead default controller (8s horizon, 6Hz control freq) and high-frequency close controller for fine adjustments near the goal (0.9s horizon, 40Hz control freq)
Ported controller to interface with Free Flyer ROS2 stack
Designed a suite of experiments to quantifiably compare new optimization MPC with existing PD-PWM controller
Ran trials of a set of representative tasks (ie turn in place, move short distance with turn, move long distance with turn) for each controller, and collected metrics including rise/settling time, max overshoot, total gas used, etc
Ran each task from full tank until empty to empirically characterize the "fuel mileage" of each controller for each task
Key Result: In most applications, the new controller displays improved tracking performance (i.e. reduced overshoot/steady-state holding error), faster convergence, and greatly reduced fuel consumption: a pure upgrade!
Phased in as default controller for the Free Flyer platform