Repository navigation
T-110: Crazyflie closed-form quadrotor dynamics (second robot end-to-end) - #3
Merged
Merged
Conversation
machinavitalis
force-pushed
the
T-110-crazyflie-dynamics
branch
2 times, most recently
from
July 12, 2026 00:55
3ec8fc9 to
287c820
Compare
…end) Promote the Crazyflie zoo entry from a MockSource stub to a real Jaxterity robot with a closed-form Newton-Euler dynamics factory — making "compile a calibrated robot" true for a second, non-toy system. - jaxility/zoo/crazyflie: real JaxteritySource + _quadrotor_ode closed form (13-state floating base, [pos, quat, v_world, omega_body]), scalars (m, I, g) sourced from the calibrated Robot so calibration propagates into the lowered binary (one model, one truth). ADR-016 contract, mirrors Cartpole. - Verified: matches the MJX reference (crazyflie.thrust_dynamics) to ~1e-13 over 200 random states, and lowers to CasADi (smooth-op subset). - CLI: build now fails *structurally* (PATTERNS §8.2) when a template is not wired — the Crazyflie quaternion OCP template is a T-110 follow-on, so `jaxility build crazyflie` reports a clear reason instead of crashing. - Doc-drift: update KNOWN_GAPS (crazyflie now a closed-form entry), crazyflie README, and the zoo real/stub tests. Tests: test_crazyflie_closed_form_matches_mjx_reference, _calibration_propagates_into_deployed_dynamics, _lowers_to_casadi, _entry_has_dynamics_factory, _reports_template_not_wired.
machinavitalis
force-pushed
the
T-110-crazyflie-dynamics
branch
from
July 12, 2026 01:18
287c820 to
fcbb04e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Makes "compile a calibrated robot" true for a second, non-toy system. Promotes the Crazyflie zoo entry from a
MockSourcestub (jaxterity had since landed the real robot) to a realJaxteritySourcewith a closed-form Newton-Euler dynamics factory.What
jaxility/zoo/crazyflie: closed-form_quadrotor_ode— 13-state floating base[pos, quat_wxyz, v_world, omega_body], control[thrust, Mx, My, Mz]. Scalars(m, I, g)are sourced from the calibrated Robot (_reduced_params), so a recalibration propagates into the lowered binary — the attestation handle and deployed dynamics move together (ADR-016, mirrors Cartpole).run_buildnow emits a structured failure (PATTERNS §8.2) when a template isn't wired, instead of crashing. Crazyflie's quaternion-aware OCP template is a documented T-110 follow-on, sojaxility build crazyfliereports a clear reason.Verified (locally, pyenv 3.11 with MJX/casadi)
test_crazyflie_closed_form_matches_mjx_reference— matchescrazyflie.thrust_dynamics()(the MJX reference) to ~1e-13 over sampled states.test_crazyflie_closed_form_lowers_to_casadi— noCoverageError(in the smooth-op subset).test_crazyflie_calibration_propagates_into_deployed_dynamics,_entry_has_dynamics_factory,_reports_template_not_wired.Zoo: 3 of 4 robots now end-to-end (cartpole, crazyflie; so100 still MJX-gapped). OCP template + Cortex-M deploy remain (T-051..T-053).
🤖 Generated with Claude Code