A falling rocket, a gimballed engine, gusty wind and a fuel tank that lightens as you burn. Fly it by hand first (←→ gimbal, ↑↓ throttle). You will crash. Then watch three controllers do it: a cascade of PID loops with a feedforward that knows the rocket's weight, LQR on the lateral dynamics and a bang-bang suicide burn that spends the least fuel of all, with the thinnest margin.
Who's flying?
←/→ gimbal the engine, ↑/↓ throttle, R new drop. Tip: kill sideways drift early, keep the tilt tiny and get vertical speed under 3 m/s before the ground arrives.
Mission
Flight data
| Altitude | – |
|---|---|
| Descent rate | – |
| Drift | – |
| Tilt | – |
| Fuel | – |
Last attempt
| Touchdown speed | – |
|---|---|
| Drift / offset | – |
| Tilt at contact | – |
| Fuel remaining | – |
| Attempts / landings | 0 / 0 |
Crash a few by hand. Feel how the gimbal fights the tilt while the ground keeps coming, then hand it to 🪜 Cascade.
Three ways down
A fast inner loop holds the tilt, a slower outer loop steers the position by requesting tilt and a third loop flies the descent rate. Each loop only has one job. The rule that makes it work: every inner loop must be much faster than the loop that commands it.
The throttle needed to hover is no mystery: it's m·g / Tmax, and the flight computer knows the mass at every instant as fuel burns. Command that directly and let feedback correct only the small errors. Feedforward does the heavy lifting; feedback does the housekeeping.
Gravity losses accrue every second you thrust, so the cheapest landing is to fall, then brake once, at full power, as late as possible. Optimal-control theory says the fuel-minimal input only ever sits at its limits. It works, and it's one gust of bad luck from not working. Margins cost fuel; that's the trade.