Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added pitot tube icing detection #23206

Merged
merged 9 commits into from
Jul 9, 2024
Merged

Added pitot tube icing detection #23206

merged 9 commits into from
Jul 9, 2024

Conversation

RomanBapst
Copy link
Contributor

@RomanBapst RomanBapst commented May 30, 2024

Solved Problem

When ice starts to build up at the front of the pitot tube, usually this results in a scale error of the airspeed reading which slowly increases over a certain amount of time. The current checks are not well suited to detect this kind of failure, as the detection of a failure via the airspeed innovations checks is usually not fast enough.
Airframes which suffer from structural damage caused by limit cycling due to inaccurate airspeed readings used for control surface scaling, rely on a rapid detection of this failure case.

The default empirical thresholds proposed in this PR stem from real world testing on a platform which suffers from the aforementioned failure case. Since real icing conditions are hard to reproduce, this feature has been validated by injecting scale factor errors which increase over time. The failure has been detected consistently with ramp times of 2, 5, 30, 60 and 120s from a scale factor of 1 to 0.

Results
This shows the test run we did on a vehicle by injection airspeed scale errors (ramping up the scale error using different ramp times).
Note that initially the scale error is ramped up really quickly and the innovation checks would easily trigger.
image

This figure shows the results when the scale error is ramped up slowly. Note how the innovation check does not really help in this case but the derivative check still triggers.
image
image

Changelog Entry

Added first principle based airspeed failure check to detect growing scale errors caused by icing. 
New parameter: ASPD_FP_T_WINDOW

@RomanBapst RomanBapst requested a review from sfuhrer May 30, 2024 12:51
Copy link
Contributor

@sfuhrer sfuhrer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a follow up I would be interested to see if we can simplify it by instead of looking at the absolute use only deltas (reducing pitch and increasing throttle should result in an increasing airspeed). Then the need to fine-tune the trim pitch and throttle would fall away, but we need to be careful around corer cases.

CI issues:

src/modules/airspeed_selector/airspeed_selector_params.c Outdated Show resolved Hide resolved
@RomanBapst RomanBapst force-pushed the pr-airspeed_derivative_check branch from 0bc5581 to 5d27fe2 Compare June 11, 2024 11:26
sfuhrer and others added 8 commits July 9, 2024 09:27
- filters throttle, pitch and airspeed rate, and triggers
if the airspeed rate is negative even though the vehicle
is pitching down and giving high throttle.
Check has to fail for duration defined by ASPD_FP_T_WINDOW
to trigger an airspeed failure.

Signed-off-by: Silvan Fuhrer <[email protected]>
Signed-off-by: RomanBapst <[email protected]>
@RomanBapst RomanBapst force-pushed the pr-airspeed_derivative_check branch from b8042dc to b3dd9c7 Compare July 9, 2024 07:27
@sfuhrer sfuhrer merged commit 8221940 into main Jul 9, 2024
91 of 94 checks passed
@sfuhrer sfuhrer deleted the pr-airspeed_derivative_check branch July 9, 2024 09:16
vertiq-jordan pushed a commit to iq-motion-control/PX4-Autopilot that referenced this pull request Aug 21, 2024
* lib: add FilteredDerivative class

* AirspeedValidator: add first principle check

- filters throttle, pitch and airspeed rate, and triggers
if the airspeed rate is negative even though the vehicle
is pitching down and giving high throttle.
Check has to fail for duration defined by ASPD_FP_T_WINDOW
to trigger an airspeed failure.

* AirspeedValidator: define constants for first principle check

* FilteredDerivative: set initialised to false if sample interval is invalid

* airspeed_selector: improved comment

* increase IAS derivative filter time constant from 4 to 5

* use legacy parameter handling for FW_PSP_OFF

* handle FW_THR_MAX as well

* ROMFS/airframes: exclude some airframes for v6x and v4pro to save flash on them

---------

Signed-off-by: Silvan Fuhrer <[email protected]>
Signed-off-by: RomanBapst <[email protected]>
Co-authored-by: Silvan Fuhrer <[email protected]>
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.

3 participants