Project Highlight: Free Flyer Space Robotics MPC Controller
In past years, the Stanford Autonomous Systems Lab (ASL) developed a space robotics testbed platform to hardware experiments validating algorithms for spacecraft autonomy: the Free Flyers. Previously, a PWM-based PD controller was used for low-level waypoint tracking, but in practice the controller's sub-optimal performance led to excessive fuel usage, freezing of fuel tanks and rapid degradation of performance over time. To address this, I developed an optimization-based MPC for low-level waypoint tracking, which reducing fuel consumption, thereby enabling significantly higher mileage during hardware experiments.
Collaborated with Alvin Sun, Rohan Sinha, Chris Agia, Joshua Lee
ODROID Controller (top) and two CO2 thrusters (underneath)
Hardware Specifications
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
Controller Selection/Tuning
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 simple rounding to translate to direct thruster inputs (3Hz, 2.67s look-ahead)
Ported controller to interface with Free Flyer ROS2 stack
Tuned the cont, both in-simulation and on the hardware platform
Hardware Experiments
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: The new optimization MPC achieves similar tracking performance with significantly reduced fuel consumption (<0.5x fuel usage for every task)
By design the MPC trades off fast rise/settling time in favor of fuel savings and minimized overshoot