field guide
Body rate cross-coupling and when you can ignore it
How measured body rates couple into Euler-angle rates, and the conditions under which the cross-coupling terms can be safely ignored.
See background: rotating-coordinate-frames — where the term comes from.
This note documents when that approximation breaks.
Euler’s equations for a rotating rigid body, diagonal inertia tensor:
Expanded:
Rearranged for the rate derivatives:
Each axis has a “direct” term (torque / inertia) and a “cross” term from — gyroscopic coupling between axes.
What the symmetric quad’s code does
p_dot = tau_roll / Ixx;
q_dot = tau_pitch / Iyy;
r_dot = tau_yaw / Izz;The cross terms are dropped entirely.
Which terms really drop for Ixx = Iyy
Plug in :
What’s truly decoupled: yaw (). The factor is zero, so r_dot has no cross term from roll/pitch rates.
What’s NOT decoupled but is treated as if it were: roll and pitch. The and equations still have nonzero cross terms with and — unless (spherical symmetry, not true for any quadcopter).
Why you can drop them anyway (the justification)
Near hover — second-order small. The cross term is a product of two angular rates (, ). When the quad is trying to stay level, these rates are small, so their product is very small.
Control torques dominate. is the commanded signal from the PID. The cross term is a disturbance. For a 250-class quad at moderate rates, the cross term is 1-2 orders of magnitude below the commanded angular acceleration.
Integral term eats the error. Any unmodelled disturbance from dropping the term gets absorbed by the I-term of the rate PID. It sees a steady offset in the tracking error and integrates it out.
When it breaks
Asymmetric build. Battery strapped off-centre, mismatched motors, an ESC fails mid-flight. Now . The r_dot cross term pops back: means rolling the quad also induces yaw. This is real and you’ll see it as unwanted yaw drift during roll manoeuvres.
Aggressive aerobatics. High roll/pitch rates make and large. A flip or snap roll pushes the cross term from “negligible” to “noticeable torque disturbance.” The copilot (or rate PID) has to overcome it.
Heavy frame with large . Longer arms or a big payload increase the gap, scaling the cross term even at moderate rates.
In short: the symmetric-inertia, near-hover, low-rate assumption is valid for a well-built quad doing normal flight. The cross terms code is needed when the build is asymmetric, the flight is aggressive, or both.