Skip to content

quadrotor/invariant_violation

A scenario of the Quadrotor model, from tools/trace/scenarios/quadrotor/invariant_violation.cpp.

– no checks

  • The clang run (clang 18.1 optimized) matches the committed trace.
  • The gcc run (gcc 13.3 optimized) matches the committed trace.

Shown on

These players show the same trace, with panels chosen to explain it:

Every channel

quadrotor/invariant_violation: every channel 1× real time
World: z up · Body: x forward, y left, z up
Rotors (PX4 Quad X): 0 FR, 1 RL spin CCW · 2 FL, 3 RR spin CW
Thrust arrows: 1 N = 4 cm · Grid: 0.5 m · Body axes: x red, y green, z blue
position [m] x y z
velocity [m/s] x y z
rotor_speeds [rad/s] rotor 1 rotor 2 rotor 3 rotor 4 dashed: command
rotor_thrusts [N] rotor 1 rotor 2 rotor 3 rotor 4
height_above_ground [m] height_above_ground
on_ground on_ground
t = 0.000 s / 0.800 s

Keys (with the player focused): Space play/pause · ← → one sample (Shift: ten) · Home/End · [ ] speed

0.8 s of the model/quadrotor scenario invariant_violation.cpp, 81 samples every 0.01 s. The panels plot every channel that changes: position, velocity, rotor_speeds, rotor_thrusts, height_above_ground, on_ground, with setpoints dashed. 3 events are marked. It has no pass criteria.

  1. the caller applies the -2 cm altimeter correction, and again every 0.1 s
  2. touch-down
  3. monitor: I5 (below_ground) before step 800, position.z = -0.02 m < ground_z = 0 m

Constant over the run

  • attitude = [1, 0, 0, 0]
  • body_rates = [0, 0, 0] rad/s
  • rotor_speeds_setpoint = [1610, 1610, 1610, 1610] rad/s
  • roll_pitch_yaw = [0, 0, 0] rad

All scenarios