Skip to content

Conversation

haumarco
Copy link
Contributor

Solved Problem

Currently, when an airspeed sensor failure occurs while flying without GNSS/OF/EV, the system triggers a failsafe after five seconds of inertial dead reckoning. However, with a properly tuned system, it is possible to estimate airspeed based on thrust input.

Solution

Synthetic airspeed is estimated based on interpolation between the current thrust and the FW_AIRSPD_xx, FW_THR_ASPD_xx parameter values. For the system to use synthetic airspeed, the ASPD_FALLBACK parameter needs to be adjusted accordingly. The user still receives an airspeed sensor failure warning (RTL recommended) but can continue flying with a valid local position estimate.

Changelog Entry

For release notes:

Feature/Bugfix Add synthetic airspeed
Parameter ASPD_FALLBACK and uorb msg AirspeedValidated were changed.

Test coverage

  • Currently only SITL, hardware tests will follow

@haumarco haumarco requested a review from sfuhrer March 17, 2025 12:52
@haumarco haumarco force-pushed the pr-aspd_add_synthetic_airspeed branch from fe87eb4 to 130660a Compare March 18, 2025 16:43
@haumarco haumarco force-pushed the pr-aspd_add_synthetic_airspeed branch from 3be62de to d26a98d Compare March 20, 2025 09:38
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.

We need to make sure that the synthetic airspeed is not used by the FW position controller and the VTOL transitions, as it there would do more harm that good.

  • transitions would be prematurely declared "done" when the throttle is above a threshold
  • FW TECS would consume a throttle based airspeed "measurement" to control the vehicle throttle...

@dagar
Copy link
Member

dagar commented Mar 26, 2025

If just about every consumer of airspeed needs to be aware of this and now check would it maybe be less bad to simply publish synthetic airspeed separately?

@sfuhrer
Copy link
Contributor

sfuhrer commented Mar 26, 2025

If just about every consumer of airspeed needs to be aware of this and now check would it maybe be less bad to simply publish synthetic airspeed separately?

I considered that as well, but opted to not push for it because:

  • we would need to publish IAS, CAS and TAS fields with synthetic airspeed
  • we'd need to replicate the failover logic at all places where airspeed is consumed (which is likely not cleaner than the current way of blocking some sources)
  • I want to propose to split up the current airspeed_validated topic into two:
    • one that contains the actually consumed fields: IAS, CAS, TAS, Source (versioned)
    • debug fields

Copy link

github-actions bot commented Mar 27, 2025

🔎 FLASH Analysis

px4_fmu-v5x [Total VM Diff: 960 byte (0.05 %)]
    FILE SIZE        VM SIZE    
--------------  -------------- 
+0.0%    +952  +0.0%    +952    .text
   +12%    +760   +12%    +760    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +4.2%    +176  +4.2%    +176    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  +0.0%     +80  +0.0%     +80    src/modules/ekf2/modules__ekf2_unity.cpp
   +15%     +56   +15%     +56    ../../src/lib/parameters/param_translation.cpp
  +3.4%     +24  +3.4%     +24    ../../src/lib/airspeed/airspeed.cpp
  +0.0%     +24  +0.0%     +24    src/modules/mavlink/modules__mavlink_unity.cpp
  +3.3%     +20  +3.3%     +20    ../../src/modules/commander/HealthAndArmingChecks/checks/airspeedCheck.cpp
  +1.0%     +12  +1.0%     +12    ../../src/modules/land_detector/FixedwingLandDetector.cpp
  +0.0%      +8  +0.0%      +8    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  +0.3%      +8  +0.3%      +8    ../../src/modules/vtol_att_control/tailsitter.cpp
 -99.9%      +7 -99.9%      +7    [2 Others]
  +0.0%      +4  +0.0%      +4    ../../src/modules/commander/Commander.cpp
  +0.2%      +4  +0.2%      +4    ../../src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp
  +0.0%      +4  +0.0%      +4    ../../src/modules/logger/logger.cpp
  +0.2%      +4  +0.2%      +4    ../../src/modules/vtol_att_control/standard.cpp
  -0.0%     -22  -0.0%     -22    [section .text]
  -0.0%     -29  -0.0%     -29    ROMFS/nsh_romfsimg.c
  -1.1%     -32  -1.1%     -32    ../../src/modules/vtol_att_control/tiltrotor.cpp
  -1.0%     -36  -1.0%     -36    ../../src/modules/vtol_att_control/vtol_type.cpp
  -0.2%     -52  -0.2%     -52    ../../src/modules/uxrce_dds_client/uxrce_dds_client.cpp
  -2.3%     -68  -2.3%     -68    ../../src/modules/airspeed_selector/AirspeedValidator.cpp
+0.1%      +8  +0.1%      +8    .ramfunc
  +0.6%      +4  +0.6%      +4    [section .ramfunc]
  +0.1%      +4  +0.1%      +4    src/modules/ekf2/modules__ekf2_unity.cpp
+0.0%    +417  [ = ]       0    .debug_abbrev
  +0.7%     +24  [ = ]       0    ../../src/drivers/osd/msp_osd/msp_osd.cpp
  +1.1%     +24  [ = ]       0    ../../src/drivers/osd/msp_osd/uorb_to_msp.cpp
   +11%     +56  [ = ]       0    ../../src/lib/version/version.c
  +1.0%     +25  [ = ]       0    ../../src/modules/airspeed_selector/AirspeedValidator.cpp
  +1.8%     +70  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +0.8%     +24  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/airspeedCheck.cpp
  +0.6%     +24  [ = ]       0    ../../src/modules/fw_att_control/FixedwingAttitudeControl.cpp
  +0.8%     +24  [ = ]       0    ../../src/modules/land_detector/FixedwingLandDetector.cpp
  +0.6%     +24  [ = ]       0    ../../src/modules/uxrce_dds_client/uxrce_dds_client.cpp
  +0.7%     +27  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  +0.7%     +24  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
  +2.5%     +23  [ = ]       0    msg/topics_sources/airspeed_validated.cpp
  +0.4%     +24  [ = ]       0    src/modules/ekf2/modules__ekf2_unity.cpp
  +0.3%     +24  [ = ]       0    src/modules/mavlink/modules__mavlink_unity.cpp
+0.0%     +16  [ = ]       0    .debug_aranges
   +11%      +8  [ = ]       0    ../../src/lib/airspeed/airspeed.cpp
  -5.0%      -8  [ = ]       0    ../../src/lib/version/version.c
  +3.8%     +16  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +1.6%      +8  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  -2.0%      -8  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
+0.0%    +188  [ = ]       0    .debug_frame
+0.0% +7.67Ki  [ = ]       0    .debug_info
  +0.1%     +66  [ = ]       0    ../../src/drivers/osd/msp_osd/msp_osd.cpp
  +0.2%     +66  [ = ]       0    ../../src/drivers/osd/msp_osd/uorb_to_msp.cpp
  +2.0%     +62  [ = ]       0    ../../src/lib/airspeed/airspeed.cpp
  +0.8%     +76  [ = ]       0    ../../src/lib/parameters/param_translation.cpp
  -0.2%      -4  [ = ]       0    ../../src/lib/version/version.c
  -1.1%    -505  [ = ]       0    ../../src/modules/airspeed_selector/AirspeedValidator.cpp
  +6.4% +6.80Ki  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +0.4%    +151  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/airspeedCheck.cpp
  +0.1%     +71  [ = ]       0    ../../src/modules/fw_att_control/FixedwingAttitudeControl.cpp
  +0.0%     +67  [ = ]       0    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  +0.1%     +66  [ = ]       0    ../../src/modules/fw_rate_control/FixedwingRateControl.cpp
  +0.2%     +85  [ = ]       0    ../../src/modules/land_detector/FixedwingLandDetector.cpp
  +0.1%     +66  [ = ]       0    ../../src/modules/uxrce_dds_client/uxrce_dds_client.cpp
  -0.1%    -108  [ = ]       0    ../../src/modules/vtol_att_control/standard.cpp
  -0.1%     -98  [ = ]       0    ../../src/modules/vtol_att_control/tailsitter.cpp
  -0.1%    -100  [ = ]       0    ../../src/modules/vtol_att_control/tiltrotor.cpp
  +0.9%    +770  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  -0.3%    -287  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
 -100.0%    +416  [ = ]       0    [2 Others]
  +0.7%     +70  [ = ]       0    msg/topics_sources/airspeed_validated.cpp
  -0.2%     -36  [ = ]       0    msg/topics_sources/uORBMessageFieldsGenerated.cpp
+0.0% +1.47Ki  [ = ]       0    .debug_line
  +0.0%      +1  [ = ]       0    ../../src/drivers/osd/msp_osd/uorb_to_msp.cpp
  +2.3%     +29  [ = ]       0    ../../src/lib/airspeed/airspeed.cpp
  +3.0%     +50  [ = ]       0    ../../src/lib/parameters/param_translation.cpp
  -1.3%     -25  [ = ]       0    ../../src/lib/version/version.c
  -1.8%    -108  [ = ]       0    ../../src/modules/airspeed_selector/AirspeedValidator.cpp
  +8.7% +1.31Ki  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +0.2%      +5  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/airspeedCheck.cpp
  -0.0%     -15  [ = ]       0    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  +0.3%     +14  [ = ]       0    ../../src/modules/land_detector/FixedwingLandDetector.cpp
  -0.1%     -37  [ = ]       0    ../../src/modules/uxrce_dds_client/uxrce_dds_client.cpp
  -0.4%     -34  [ = ]       0    ../../src/modules/vtol_att_control/standard.cpp
  -0.4%     -43  [ = ]       0    ../../src/modules/vtol_att_control/tailsitter.cpp
  -0.2%     -22  [ = ]       0    ../../src/modules/vtol_att_control/tiltrotor.cpp
  +2.5%    +241  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  -0.7%     -94  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
  +0.0%    +127  [ = ]       0    src/modules/ekf2/modules__ekf2_unity.cpp
  +0.0%     +81  [ = ]       0    src/modules/mavlink/modules__mavlink_unity.cpp
+0.1% +5.53Ki  [ = ]       0    .debug_loc
  +2.1%     +40  [ = ]       0    ../../src/lib/airspeed/airspeed.cpp
  -5.3%    -627  [ = ]       0    ../../src/modules/airspeed_selector/AirspeedValidator.cpp
   +15% +3.74Ki  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +1.9%     +67  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/airspeedCheck.cpp
  +0.0%     +16  [ = ]       0    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  +1.0%     +56  [ = ]       0    ../../src/modules/land_detector/FixedwingLandDetector.cpp
  -0.9%    -128  [ = ]       0    ../../src/modules/vtol_att_control/standard.cpp
  -0.7%    -120  [ = ]       0    ../../src/modules/vtol_att_control/tiltrotor.cpp
  +3.8%    +352  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  -0.9%    -200  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
  +0.2%    +511  [ = ]       0    [section .debug_loc]
  +0.2% +1.71Ki  [ = ]       0    src/modules/ekf2/modules__ekf2_unity.cpp
  +0.0%    +104  [ = ]       0    src/modules/mavlink/modules__mavlink_unity.cpp
+0.1%    +694  [ = ]       0    .debug_ranges
 +10.0%      +8  [ = ]       0    ../../src/lib/airspeed/airspeed.cpp
  -2.6%      -8  [ = ]       0    ../../src/lib/version/version.c
  -7.2%    -160  [ = ]       0    ../../src/modules/airspeed_selector/AirspeedValidator.cpp
   +10%    +624  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  -1.9%     -16  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/airspeedCheck.cpp
  +3.2%     +72  [ = ]       0    ../../src/modules/vtol_att_control/standard.cpp
  -0.5%     -16  [ = ]       0    ../../src/modules/vtol_att_control/tailsitter.cpp
  -0.3%      -8  [ = ]       0    ../../src/modules/vtol_att_control/tiltrotor.cpp
  +2.4%     +64  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  -1.8%     -80  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
  +0.1%    +216  [ = ]       0    src/modules/ekf2/modules__ekf2_unity.cpp
  -3.0%      -2  [ = ]       0    task/task_cancelpt.c
+0.0%    +251  [ = ]       0    .debug_str
  -0.0%      -3  [ = ]       0    ../../src/drivers/batt_smbus/batt_smbus.cpp
  +0.1%     +16  [ = ]       0    ../../src/drivers/osd/msp_osd/msp_osd.cpp
  -5.3%    -105  [ = ]       0    ../../src/lib/battery/battery.cpp
 -22.8%    -219  [ = ]       0    ../../src/lib/fw_performance_model/PerformanceModel.cpp
  -4.1%     -24  [ = ]       0    ../../src/modules/airspeed_selector/AirspeedValidator.cpp
   +13% +4.77Ki  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +0.2%    +217  [ = ]       0    ../../src/modules/commander/Commander.cpp
  +4.3%     +32  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/airspeedCheck.cpp
  -0.1%     -44  [ = ]       0    ../../src/modules/control_allocator/ControlAllocator.cpp
  -7.3% -1.83Ki  [ = ]       0    ../../src/modules/fw_att_control/FixedwingAttitudeControl.cpp
  -2.3% -2.61Ki  [ = ]       0    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  -7.0%     -20  [ = ]       0    ../../src/modules/fw_pos_control/runway_takeoff/RunwayTakeoff.cpp
  +1.8%     +21  [ = ]       0    ../../src/modules/land_detector/FixedwingLandDetector.cpp
  +0.5%     +14  [ = ]       0    ../../src/modules/vtol_att_control/tiltrotor.cpp
  +0.1%     +35  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  -0.3%     -15  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
  +0.0%     +63  [ = ]       0    src/modules/ekf2/modules__ekf2_unity.cpp
  -0.0%     -57  [ = ]       0    src/modules/mavlink/modules__mavlink_unity.cpp
+0.5%      +1  [ = ]       0    .shstrtab
+0.0%    +127  [ = ]       0    .strtab
   +34%     +35  [ = ]       0    ../../src/lib/airspeed/airspeed.cpp
  -8.1%     -32  [ = ]       0    ../../src/lib/version/version.c
  +5.1%     +92  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +0.1%     +32  [ = ]       0    [section .strtab]
+0.0%    +160  [ = ]       0    .symtab
   +23%     +48  [ = ]       0    ../../src/lib/airspeed/airspeed.cpp
  -5.4%     -48  [ = ]       0    ../../src/lib/version/version.c
  +5.1%     +96  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +0.3%     +16  [ = ]       0    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  +1.8%     +32  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  -1.2%     -16  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
  +0.1%     +32  [ = ]       0    [section .symtab]
-1.3%    -960  [ = ]       0    [Unmapped]
+0.0% +16.5Ki  +0.0%    +960    TOTAL

px4_fmu-v6x [Total VM Diff: -336 byte (-0.02 %)]
    FILE SIZE        VM SIZE    
--------------  -------------- 
+0.0%    +417  [ = ]       0    .debug_abbrev
  +0.7%     +24  [ = ]       0    ../../src/drivers/osd/msp_osd/msp_osd.cpp
  +1.1%     +24  [ = ]       0    ../../src/drivers/osd/msp_osd/uorb_to_msp.cpp
   +11%     +56  [ = ]       0    ../../src/lib/version/version.c
  +1.0%     +25  [ = ]       0    ../../src/modules/airspeed_selector/AirspeedValidator.cpp
  +1.8%     +70  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +0.8%     +24  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/airspeedCheck.cpp
  +0.6%     +24  [ = ]       0    ../../src/modules/fw_att_control/FixedwingAttitudeControl.cpp
  +0.8%     +24  [ = ]       0    ../../src/modules/land_detector/FixedwingLandDetector.cpp
  +0.6%     +24  [ = ]       0    ../../src/modules/uxrce_dds_client/uxrce_dds_client.cpp
  +0.7%     +27  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  +0.7%     +24  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
  +2.5%     +23  [ = ]       0    msg/topics_sources/airspeed_validated.cpp
  +0.4%     +24  [ = ]       0    src/modules/ekf2/modules__ekf2_unity.cpp
  +0.3%     +24  [ = ]       0    src/modules/mavlink/modules__mavlink_unity.cpp
+0.0%     +16  [ = ]       0    .debug_aranges
   +11%      +8  [ = ]       0    ../../src/lib/airspeed/airspeed.cpp
  -5.0%      -8  [ = ]       0    ../../src/lib/version/version.c
  +3.8%     +16  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +1.6%      +8  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  -2.0%      -8  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
+0.0%    +188  [ = ]       0    .debug_frame
+0.0% +7.67Ki  [ = ]       0    .debug_info
  +0.1%     +66  [ = ]       0    ../../src/drivers/osd/msp_osd/msp_osd.cpp
  +0.2%     +66  [ = ]       0    ../../src/drivers/osd/msp_osd/uorb_to_msp.cpp
  +2.0%     +62  [ = ]       0    ../../src/lib/airspeed/airspeed.cpp
  +0.8%     +76  [ = ]       0    ../../src/lib/parameters/param_translation.cpp
  -0.2%      -4  [ = ]       0    ../../src/lib/version/version.c
  -1.1%    -505  [ = ]       0    ../../src/modules/airspeed_selector/AirspeedValidator.cpp
  +6.4% +6.80Ki  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +0.4%    +151  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/airspeedCheck.cpp
  +0.1%     +71  [ = ]       0    ../../src/modules/fw_att_control/FixedwingAttitudeControl.cpp
  +0.0%     +67  [ = ]       0    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  +0.1%     +66  [ = ]       0    ../../src/modules/fw_rate_control/FixedwingRateControl.cpp
  +0.2%     +85  [ = ]       0    ../../src/modules/land_detector/FixedwingLandDetector.cpp
  +0.1%     +66  [ = ]       0    ../../src/modules/uxrce_dds_client/uxrce_dds_client.cpp
  -0.1%    -108  [ = ]       0    ../../src/modules/vtol_att_control/standard.cpp
  -0.1%     -98  [ = ]       0    ../../src/modules/vtol_att_control/tailsitter.cpp
  -0.1%    -100  [ = ]       0    ../../src/modules/vtol_att_control/tiltrotor.cpp
  +0.9%    +770  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  -0.3%    -287  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
 -100.0%    +416  [ = ]       0    [2 Others]
  +0.7%     +70  [ = ]       0    msg/topics_sources/airspeed_validated.cpp
  -0.2%     -36  [ = ]       0    msg/topics_sources/uORBMessageFieldsGenerated.cpp
+0.0% +1.47Ki  [ = ]       0    .debug_line
  +0.0%      +1  [ = ]       0    ../../src/drivers/osd/msp_osd/uorb_to_msp.cpp
  +2.3%     +29  [ = ]       0    ../../src/lib/airspeed/airspeed.cpp
  +3.0%     +50  [ = ]       0    ../../src/lib/parameters/param_translation.cpp
  -1.3%     -25  [ = ]       0    ../../src/lib/version/version.c
  -1.8%    -108  [ = ]       0    ../../src/modules/airspeed_selector/AirspeedValidator.cpp
  +8.7% +1.31Ki  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +0.2%      +5  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/airspeedCheck.cpp
  -0.0%     -15  [ = ]       0    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  +0.3%     +14  [ = ]       0    ../../src/modules/land_detector/FixedwingLandDetector.cpp
  -0.1%     -37  [ = ]       0    ../../src/modules/uxrce_dds_client/uxrce_dds_client.cpp
  -0.4%     -34  [ = ]       0    ../../src/modules/vtol_att_control/standard.cpp
  -0.4%     -43  [ = ]       0    ../../src/modules/vtol_att_control/tailsitter.cpp
  -0.2%     -22  [ = ]       0    ../../src/modules/vtol_att_control/tiltrotor.cpp
  +2.5%    +241  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  -0.7%     -94  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
  +0.0%    +127  [ = ]       0    src/modules/ekf2/modules__ekf2_unity.cpp
  +0.0%     +81  [ = ]       0    src/modules/mavlink/modules__mavlink_unity.cpp
+0.1% +5.19Ki  [ = ]       0    .debug_loc
  +2.1%     +40  [ = ]       0    ../../src/lib/airspeed/airspeed.cpp
  -5.3%    -627  [ = ]       0    ../../src/modules/airspeed_selector/AirspeedValidator.cpp
   +15% +3.74Ki  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +1.9%     +67  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/airspeedCheck.cpp
  +0.0%     +16  [ = ]       0    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  +1.0%     +56  [ = ]       0    ../../src/modules/land_detector/FixedwingLandDetector.cpp
  -0.9%    -128  [ = ]       0    ../../src/modules/vtol_att_control/standard.cpp
  -0.7%    -120  [ = ]       0    ../../src/modules/vtol_att_control/tiltrotor.cpp
  +3.8%    +352  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  -0.9%    -200  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
  +0.2%    +493  [ = ]       0    [section .debug_loc]
  +0.2% +1.40Ki  [ = ]       0    src/modules/ekf2/modules__ekf2_unity.cpp
  +0.0%    +104  [ = ]       0    src/modules/mavlink/modules__mavlink_unity.cpp
+0.1%    +697  [ = ]       0    .debug_ranges
 +10.0%      +8  [ = ]       0    ../../src/lib/airspeed/airspeed.cpp
  -2.6%      -8  [ = ]       0    ../../src/lib/version/version.c
  -7.2%    -160  [ = ]       0    ../../src/modules/airspeed_selector/AirspeedValidator.cpp
   +10%    +624  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  -1.9%     -16  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/airspeedCheck.cpp
  +3.2%     +72  [ = ]       0    ../../src/modules/vtol_att_control/standard.cpp
  -0.5%     -16  [ = ]       0    ../../src/modules/vtol_att_control/tailsitter.cpp
  -0.3%      -8  [ = ]       0    ../../src/modules/vtol_att_control/tiltrotor.cpp
  +2.4%     +64  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  -1.8%     -80  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
  +0.1%    +216  [ = ]       0    src/modules/ekf2/modules__ekf2_unity.cpp
  +1.5%      +1  [ = ]       0    task/task_cancelpt.c
+0.0%    +251  [ = ]       0    .debug_str
  -0.0%      -3  [ = ]       0    ../../src/drivers/cdcacm_autostart/cdcacm_autostart.cpp
  +0.1%     +16  [ = ]       0    ../../src/drivers/osd/msp_osd/msp_osd.cpp
  -5.3%    -105  [ = ]       0    ../../src/lib/battery/battery.cpp
 -22.7%    -219  [ = ]       0    ../../src/lib/fw_performance_model/PerformanceModel.cpp
  -3.5%     -24  [ = ]       0    ../../src/modules/airspeed_selector/AirspeedValidator.cpp
   +12% +4.77Ki  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +0.2%    +217  [ = ]       0    ../../src/modules/commander/Commander.cpp
  +4.3%     +32  [ = ]       0    ../../src/modules/commander/HealthAndArmingChecks/checks/airspeedCheck.cpp
  -0.1%     -44  [ = ]       0    ../../src/modules/control_allocator/ControlAllocator.cpp
  -7.3% -1.83Ki  [ = ]       0    ../../src/modules/fw_att_control/FixedwingAttitudeControl.cpp
  -2.3% -2.61Ki  [ = ]       0    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  -7.0%     -20  [ = ]       0    ../../src/modules/fw_pos_control/runway_takeoff/RunwayTakeoff.cpp
  +1.8%     +21  [ = ]       0    ../../src/modules/land_detector/FixedwingLandDetector.cpp
  +0.5%     +14  [ = ]       0    ../../src/modules/vtol_att_control/tiltrotor.cpp
  +0.1%     +35  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  -0.3%     -15  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
  +0.0%     +63  [ = ]       0    src/modules/ekf2/modules__ekf2_unity.cpp
  -0.0%     -57  [ = ]       0    src/modules/mavlink/modules__mavlink_unity.cpp
+0.5%      +1  [ = ]       0    .shstrtab
+0.0%    +127  [ = ]       0    .strtab
   +34%     +35  [ = ]       0    ../../src/lib/airspeed/airspeed.cpp
  -8.1%     -32  [ = ]       0    ../../src/lib/version/version.c
  +4.8%     +92  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +0.0%     +32  [ = ]       0    [section .strtab]
+0.0%    +160  [ = ]       0    .symtab
   +23%     +48  [ = ]       0    ../../src/lib/airspeed/airspeed.cpp
  -7.0%     -64  [ = ]       0    ../../src/lib/version/version.c
  +5.1%     +96  [ = ]       0    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +0.3%     +16  [ = ]       0    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  +1.8%     +32  [ = ]       0    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  -1.1%     -16  [ = ]       0    ../../src/modules/vtol_att_control/vtol_type.cpp
  +0.1%     +48  [ = ]       0    [section .symtab]
+0.5%    +336  [ = ]       0    [Unmapped]
-0.0%    -336  -0.0%    -336    .text
   +12%    +760   +12%    +760    ../../src/modules/airspeed_selector/airspeed_selector_main.cpp
  +4.2%    +176  +4.2%    +176    ../../src/modules/vtol_att_control/vtol_att_control_main.cpp
  +0.1%     +88  +0.1%     +88    src/modules/ekf2/modules__ekf2_unity.cpp
   +15%     +56   +15%     +56    ../../src/lib/parameters/param_translation.cpp
  +3.4%     +24  +3.4%     +24    ../../src/lib/airspeed/airspeed.cpp
  +0.0%     +24  +0.0%     +24    src/modules/mavlink/modules__mavlink_unity.cpp
  +3.3%     +20  +3.3%     +20    ../../src/modules/commander/HealthAndArmingChecks/checks/airspeedCheck.cpp
  +1.0%     +12  +1.0%     +12    ../../src/modules/land_detector/FixedwingLandDetector.cpp
  +0.0%      +8  +0.0%      +8    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  +0.3%      +8  +0.3%      +8    ../../src/modules/vtol_att_control/tailsitter.cpp
  +0.0%      +4  +0.0%      +4    ../../src/modules/commander/Commander.cpp
  +0.2%      +4  +0.2%      +4    ../../src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp
  +0.0%      +4  +0.0%      +4    ../../src/modules/logger/logger.cpp
  +0.2%      +4  +0.2%      +4    ../../src/modules/vtol_att_control/standard.cpp
 -100.1%      -4 -100.1%      -4    [1 Others]
  -0.0%     -13  -0.0%     -13    [section .text]
  -1.1%     -32  -1.1%     -32    ../../src/modules/vtol_att_control/tiltrotor.cpp
  -1.0%     -36  -1.0%     -36    ../../src/modules/vtol_att_control/vtol_type.cpp
  -0.2%     -52  -0.2%     -52    ../../src/modules/uxrce_dds_client/uxrce_dds_client.cpp
  -2.3%     -68  -2.3%     -68    ../../src/modules/airspeed_selector/AirspeedValidator.cpp
  -0.8% -1.29Ki  -0.8% -1.29Ki    ROMFS/nsh_romfsimg.c
+0.0% +16.2Ki  -0.0%    -336    TOTAL

Updated: 2025-05-02T09:31:26

@haumarco haumarco force-pushed the pr-aspd_add_synthetic_airspeed branch 4 times, most recently from 9b6ed32 to feafdbb Compare March 31, 2025 08:48
@sfuhrer sfuhrer force-pushed the pr-aspd_add_synthetic_airspeed branch from 2dd5254 to b6b1ed1 Compare April 4, 2025 15:03
@haumarco haumarco force-pushed the pr-aspd_add_synthetic_airspeed branch from b6b1ed1 to a963891 Compare April 4, 2025 18:15
@haumarco haumarco force-pushed the pr-aspd_add_synthetic_airspeed branch 2 times, most recently from 57d06b4 to 176a565 Compare April 29, 2025 13:57
@bresch bresch self-requested a review April 29, 2025 15:01
bresch
bresch previously approved these changes Apr 29, 2025
@sfuhrer sfuhrer force-pushed the pr-aspd_add_synthetic_airspeed branch from 176a565 to 7ffd694 Compare April 30, 2025 11:09
@sfuhrer
Copy link
Contributor

sfuhrer commented Apr 30, 2025

Squashed last two commits and rebased on main. Will merge if CI passes.
EDIT: CI failures:

  • px4-ros2-interface-lib: need to remove airspeed_sensor_measurement_valid
  • v6x: over flash by 168 bytes

I further wonder if we should wait till 1.16 is branched off before merging it.

haumarco and others added 6 commits May 2, 2025 11:25
Synthetic airspeed is calculated based on the thrust setpoint
and the thrust<->airpseed model as configured in the parameters.
Signed-off-by: Silvan <silvan@auterion.com>
    - only use data from airspeed_validated topic if source is SENSOR
    - add 1s timeout (set to NAN if older)
    - use FW_USE_AIRSPD consitently (treat the same as CAS=NAN)

Signed-off-by: Silvan <silvan@auterion.com>
Enable wind-dead-reckoning with airspeed source to synthetic airspeed
@sfuhrer sfuhrer force-pushed the pr-aspd_add_synthetic_airspeed branch from 953e8b4 to 4f01928 Compare May 2, 2025 09:25
@sfuhrer sfuhrer merged commit 9188480 into main May 2, 2025
65 of 67 checks passed
@sfuhrer sfuhrer deleted the pr-aspd_add_synthetic_airspeed branch May 2, 2025 11:37
@github-project-automation github-project-automation bot moved this to ✅ Done in PX4 FW/VTOL May 2, 2025
@hamishwillee
Copy link
Contributor

Is there any doc impact (I assume not). Likely places would be https://docs.px4.io/main/en/advanced_config/tuning_the_ecl_ekf.html#synthetic-sideslip

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: ✅ Done

Development

Successfully merging this pull request may close these issues.

5 participants