what i'm building
A Python/MuJoCo simulation of a robot that balances on a ball using omniwheels. I wrote the physics and the PID control loop myself rather than starting from a prebuilt environment, so the balance behavior is mine to debug and mine to explain.
what broke / what changed
Most of the difficulty was in the parts that are easy to get subtly wrong: tuning the PID gains without the loop oscillating, getting the ball-and-omniwheel contact model to behave like the real thing instead of a rough approximation of it, and catching integrator windup before it destabilized the loop under a large disturbance. Each of those forced me to actually understand the control theory rather than copy gains from an example.