Skip to content

feat: PX4Multirotor performance and lockstep improvements - #41

Closed
Tuxliri wants to merge 6 commits into
spencerfolk:mainfrom
duckietown:feat/lockstep-timeout-rk4-DTSW-7714
Closed

feat: PX4Multirotor performance and lockstep improvements#41
Tuxliri wants to merge 6 commits into
spencerfolk:mainfrom
duckietown:feat/lockstep-timeout-rk4-DTSW-7714

Conversation

@Tuxliri

@Tuxliri Tuxliri commented Apr 7, 2026

Copy link
Copy Markdown
Contributor
  • Add fixed-step RK4 integrator to Multirotor base class (7x faster than solve_ivp for small timesteps, identical accuracy at dt<=4ms). PX4Multirotor enables it by default.

  • Precompute IMU measurements once per step and pass to HIL messages, avoiding redundant computation.

  • Add configurable lockstep_timeout parameter (default 0.002s) with retry loop in _fetch_latest_px4_control. Allows DTPS bridge mode to use longer timeouts for higher-latency round trips.

  • Add per-step timing instrumentation (printed every 500 steps).

Tuxliri and others added 6 commits October 24, 2025 11:42
Add px4 support - DTSW-7150
- Send magnetometer and barometer data in HIL_SENSOR with correct fields_updated
  bitmask (ACCEL|GYRO|MAG|BARO = 7167) — previously only ACCEL+GYRO were sent,
  causing PX4 to time out on MAG and BARO and fall back to SIH internal sensors
- Switch physics integrator from Radau (implicit, expensive) to RK45 with
  max_step=0.05 to avoid double-stepping at typical engine delta_times (~9ms)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
torch, torchdiffeq, roma, and opt-einsum are only required for the
batched simulator (BatchedMultirotor, simulate_batch, BatchedSE3Control,
etc.). Moving them to an optional extra avoids forcing all users to
install PyTorch (~2 GB) when they only need the standard single-drone
simulator.

- pyproject.toml: remove the four packages from core dependencies and
  add a new `batched` extra; also include them in `all`
- Wrap top-level torch/roma/torchdiffeq imports with try/except in
  every file that mixes batched and non-batched classes, so those
  modules remain importable without the extra installed

Install the batched simulator with: pip install rotorpy[batched]

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Make PyTorch an optional dependency for the batched simulator
- Add fixed-step RK4 integrator to Multirotor base class (7x faster
  than solve_ivp for small timesteps, identical accuracy at dt<=4ms).
  PX4Multirotor enables it by default.

- Precompute IMU measurements once per step and pass to HIL messages,
  avoiding redundant computation.

- Add configurable lockstep_timeout parameter (default 0.002s) with
  retry loop in _fetch_latest_px4_control. Allows DTPS bridge mode
  to use longer timeouts for higher-latency round trips.

- Add per-step timing instrumentation (printed every 500 steps).
@Tuxliri Tuxliri closed this Apr 7, 2026
@Tuxliri
Tuxliri deleted the feat/lockstep-timeout-rk4-DTSW-7714 branch April 7, 2026 22:29
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