The IMU state vector packages the drone’s inertial sense into a fixed-shape observation. In our setup, the IMU is read through MAVROS (/mavros/imu/data) at 100 Hz; the RL policy consumes it at the policy rate (typically 10 Hz) — every 10th sample, with optional smoothing.
Current status: the IMU input is present in observations but not heavily exploited yet. The 2D coverage simulator doesn’t need attitude (the drone is constrained to a horizontal plane), but a future real-drone setup with 3D motion would benefit from full IMU state in the observation.
Components
| Field | Source | Dimensionality |
|---|---|---|
| Orientation (quaternion) | EKF3-fused | 4 |
| Angular velocity (gyro) | Raw | 3 |
| Linear acceleration | Raw, gravity-subtracted | 3 |
| Battery voltage | MAVROS state | 1 |
Total: 11 floats.
Why we don’t use roll/pitch in the current 2D task
The 2D coverage simulator constrains motion to a horizontal plane; the drone is always level. Roll/pitch from IMU would either be near-zero (clean policy with no use) or noise (sim-to-real artifact). For the 3D task that ships with real-drone bring-up — see H2 2026 roadmap — the IMU will become load-bearing.
Sim-to-real notes
- Bias drift — real IMUs accumulate drift; Gazebo’s
gz-sim-imu-systemplugin has tunable bias parameters. Domain randomization on bias (random per-episode offset within ±0.01 rad/s) is recommended. - Latency — IMU sample → policy observation has a ~10-30 ms pipeline latency on the real drone (sensor read → MAVROS bridge → ROS 2 DDS → policy node). Sim has near-zero latency. Match by adding a fixed delay in the sim observation.
Where to go next
- Observation space hub — sibling pages
- ToF sim-to-real — analogous noise-injection treatment for rangefinders
- EKF3 multi-sensor fusion — where the orientation estimate comes from