Skip to content

Fix gyroscopic precession sign: pitch term opposite roll#86

Open
Zaffer wants to merge 1 commit into
learnsyslab:mainfrom
Synetic-Labs:fix/gyro-precession-sign
Open

Fix gyroscopic precession sign: pitch term opposite roll#86
Zaffer wants to merge 1 commit into
learnsyslab:mainfrom
Synetic-Labs:fix/gyro-precession-sign

Conversation

@Zaffer

@Zaffer Zaffer commented Jul 8, 2026

Copy link
Copy Markdown

The propeller gyroscopic reaction torque had the wrong sign on the pitch axis, in both dynamics (numeric) and symbolic_dynamics (crazyflow/dynamics/first_principles/dynamics.py).

The term is -ω × h with rotor angular momentum h = h_z·ẑ, which gives (-q·h_z, +p·h_z, 0). The roll and pitch components must have opposite signs (it's a cross product). The code had both negative (-q·h_z, -p·h_z), so the roll-rate to pitch-torque coupling was inverted while pitch-rate to roll-torque was correct.

Fix is to drop the leading minus on the pitch row in both paths.

Note: This only matters when prop_inertia and net rotor angular momentum are non-negligible (larger props / quads, during yaw-type maneuvers). Is negligible for a Crazyflie. Both paths fixed identically, so numeric == symbolic still holds.

The propeller gyroscopic reaction torque is -ω × h with rotor angular
momentum h = h_z·ẑ, giving (-q·h_z, +p·h_z, 0) — the roll and pitch
components have opposite signs. Both the numeric and symbolic dynamics
had the pitch component as -p·h_z (same sign as roll), so one axis of the
gyroscopic cross-coupling was inverted. Drop the leading minus on the
pitch row in both.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant