Skip to content

T-110: Crazyflie closed-form quadrotor dynamics (second robot end-to-end) - #3

Merged
machinavitalis merged 1 commit into
mainfrom
T-110-crazyflie-dynamics
Jul 12, 2026
Merged

machinavitalis merged 1 commit into
mainfrom
T-110-crazyflie-dynamics

Conversation

@machinavitalis

Copy link
Copy Markdown
Owner

Makes "compile a calibrated robot" true for a second, non-toy system. Promotes the Crazyflie zoo entry from a MockSource stub (jaxterity had since landed the real robot) to a real JaxteritySource with 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).
  • CLI hardening: run_build now 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, so jaxility build crazyflie reports a clear reason.
  • Doc-drift: KNOWN_GAPS + crazyflie README + zoo real/stub tests updated.

Verified (locally, pyenv 3.11 with MJX/casadi)

  • test_crazyflie_closed_form_matches_mjx_reference — matches crazyflie.thrust_dynamics() (the MJX reference) to ~1e-13 over sampled states.
  • test_crazyflie_closed_form_lowers_to_casadi — no CoverageError (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

@machinavitalis
machinavitalis force-pushed the T-110-crazyflie-dynamics branch 2 times, most recently from 3ec8fc9 to 287c820 Compare July 12, 2026 00:55
…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
machinavitalis force-pushed the T-110-crazyflie-dynamics branch from 287c820 to fcbb04e Compare July 12, 2026 01:18
@machinavitalis
machinavitalis merged commit 87f5a77 into main Jul 12, 2026
8 checks passed
@machinavitalis
machinavitalis deleted the T-110-crazyflie-dynamics branch July 12, 2026 01:21
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