Draft: feat(ekf2): airspeed fusion for wind estimation in rotary-wing flight#27884
Draft: feat(ekf2): airspeed fusion for wind estimation in rotary-wing flight#27884JonasPerolini wants to merge 2 commits into
Conversation
🔎 FLASH Analysispx4_fmu-v5x [Total VM Diff: 640 byte (0.03 %)]px4_fmu-v6x [Total VM Diff: 616 byte (0.03 %)]Updated: 2026-07-13T15:50:46 |
|
Not sure if that would be much harder implementation wise, but if we are already using the lateral specific force to check the zero-sideslip assumption (and not fusing any airspeed / sideslip at all if too much sideslip) would it not make more sense to:
Laterally the measurement might still be quite inaccurate but if heading changes a bit we could inform the wind estimate from airspeed in both directions without relying on zero-sideslip |
|
I think we should keep the no-sideslip condition when fusing airspeed measurements from a pitot. Most (basic) pitots only work properly when they're well aligned with the airflow. Anything else messes with the measured pressure. I therefore think we should also add a check on max angular rates. In our VTOL for example the pitot is on the nose. Whenever the drone yaws or pitches, we get unusable readings. Most of the time the readings are below what we would set for the threshold, but I think it's safer to have a dedicated mechanism to reject phases where we know we don't read the correct values. I like the idea of using airspeed measurements only for the x-body direction of the wind (when aligned), and use the specific drag estimation for the y-direction. I would rather do it in a separate PR though, so as to not overload this one. What do you think ? |
|
Makes sense. @RomanBapst is also experimenting with a pure MC version of airspeed-deadreckoning, with airspeed derived from lateral specific force + drag model. Whoever is first ask each other for review :) |
Estimating the wind in MC mode is important to avoid flying out of specs as soon as possible to prevent flying out of specs and attempting a front transition. (There is not always an anemometer on site, and wind can change with altitude).
There is a multicopter wind estimator: https://docs.px4.io/main/en/advanced_config/tuning_the_ecl_ekf#mc_wind_estimation_using_drag, however, it did not work for our VTOL platform, the wind estimated was not precise enough.
Solution
Allow airspeed fusion for wind estimation in multicopter mode, mainly for VTOL flight with pusher. Fusion is gated by lateral specific force (must be aligned with the wind) and only updates the wind states, so it cannot act as navigation aiding.
Params:
EKF2_ASPD_MCenable MC wind estimationEKF2_ASPD_MC_LIMLateral specific force limit for multicopter airspeed fusionTests
Added tests for parameter gating, wind convergence, alignment rejection, and dead-reckoning behavior.
To discuss:
How do we know that the UAV is aligned with the wind (zero sideslip assumption)?
Sideslip fusion assumes that the UAV is aligned with the wind and sets the observation to zero. This works well in FW but in MC we need a way to know whether the uav is aligned with the wind or not. This PR reuses the lateral specific force as defined in the drag-based MC wind estimator https://docs.px4.io/main/en/advanced_config/tuning_the_ecl_ekf#mc_wind_estimation_using_drag. One limitation is when flying sideways in the direction of the wind, in that case the y-specific force is small.
@bresch could you have a look please? Do you think there is a better way to determine whether the UAV is aligned with the wind?