The state_estimator consumes raw sensor streams (IMU, optical flow, rangefinders) and produces the pose-plus-twist signal the RL policy consumes. In practice the heavy lifting is done by ArduPilot’s EKF3 — this node is the ROS 2 wrapper that subscribes to MAVROS state outputs, formats them into the policy’s observation schema, and adds any additional smoothing or feature extraction the policy needs.
Current status: placeholder. The current architecture uses MAVROS topics directly (/mavros/local_position/pose, /mavros/local_position/velocity_body) rather than a separate state estimator wrapper. The standalone state_estimator node will become useful when the policy needs derived features (e.g., a sliding window of past poses, IMU-integrated velocity in a custom frame) that don’t have direct MAVROS analogues.
Planned inputs:
/mavros/imu/data— IMU, ~100 Hz./mavros/local_position/pose— EKF3 fused pose./drone/optical_flow/raw— PMW3901 frames (when available)./drone/perimeter— VL53L0X array readings.
Planned outputs:
/drone/state/observation— observation vector matching the policy’s expected schema./drone/state/diagnostics— health/staleness flags for each sensor.
Where to go next
- EKF3 multi-sensor fusion — how the upstream fusion actually works
- RL observation space — what the policy expects from this node
- Sensor-processing nodes hub — the layer feeding this one