msg: AirspeedValidated - uorb topic to standard (#25579)

* AirspeedValidated - uorb topic to standard

* Apply suggestions from code review

* Update msg/versioned/AirspeedValidated.msg

* Fix up links to renamed uORB constants

---------

Co-authored-by: PX4BuildBot <bot@pixhawk.org>
This commit is contained in:
Hamish Willee
2025-09-25 19:02:02 +10:00
committed by GitHub
parent 7dcbad536d
commit cbf39f5ceb
9 changed files with 39 additions and 34 deletions

View File

@@ -1,22 +1,27 @@
# Validated airspeed
#
# Provides information about airspeed (indicated, true, calibrated) and the source of the data.
# Used by controllers, estimators and for airspeed reporting to operator.
uint32 MESSAGE_VERSION = 1
uint64 timestamp # time since system start (microseconds)
uint64 timestamp # [us] Time since system start
float32 indicated_airspeed_m_s # [m/s] Indicated airspeed (IAS), set to NAN if invalid
float32 calibrated_airspeed_m_s # [m/s] Calibrated airspeed (CAS), set to NAN if invalid
float32 true_airspeed_m_s # [m/s] True airspeed (TAS), set to NAN if invalid
float32 indicated_airspeed_m_s # [m/s] [@invalid NaN] Indicated airspeed (IAS)
float32 calibrated_airspeed_m_s # [m/s] [@invalid NaN] Calibrated airspeed (CAS)
float32 true_airspeed_m_s # [m/s] [@invalid NaN] True airspeed (TAS)
int8 airspeed_source # Source of currently published airspeed values
int8 DISABLED = -1
int8 GROUND_MINUS_WIND = 0
int8 SENSOR_1 = 1
int8 SENSOR_2 = 2
int8 SENSOR_3 = 3
int8 SYNTHETIC = 4
int8 airspeed_source # [@enum SOURCE] Source of currently published airspeed values
int8 SOURCE_DISABLED = -1 # Disabled
int8 SOURCE_GROUND_MINUS_WIND = 0 # Ground speed minus wind
int8 SOURCE_SENSOR_1 = 1 # Sensor 1
int8 SOURCE_SENSOR_2 = 2 # Sensor 2
int8 SOURCE_SENSOR_3 = 3 # Sensor 3
int8 SOURCE_SYNTHETIC = 4 # Synthetic airspeed
# debug states
float32 calibrated_ground_minus_wind_m_s # CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid
float32 calibraded_airspeed_synth_m_s # synthetic airspeed in m/s, set to NAN if invalid
float32 airspeed_derivative_filtered # filtered indicated airspeed derivative [m/s/s]
float32 throttle_filtered # filtered fixed-wing throttle [-]
float32 pitch_filtered # filtered pitch [rad]
float32 calibrated_ground_minus_wind_m_s # [m/s] [@invalid NaN] CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption
float32 calibraded_airspeed_synth_m_s # [m/s] [@invalid NaN] Synthetic airspeed
float32 airspeed_derivative_filtered # [m/s^2] Filtered indicated airspeed derivative
float32 throttle_filtered # [-] Filtered fixed-wing throttle
float32 pitch_filtered # [rad] Filtered pitch

View File

@@ -319,7 +319,7 @@ msp_raw_gps_t construct_RAW_GPS(const sensor_gps_s &vehicle_gps_position,
//raw_gps.hdop = vehicle_gps_position_struct.hdop
raw_gps.numSat = vehicle_gps_position.satellites_used;
if (airspeed_validated.airspeed_source >= airspeed_validated_s::GROUND_MINUS_WIND
if (airspeed_validated.airspeed_source >= airspeed_validated_s::SOURCE_GROUND_MINUS_WIND
&& PX4_ISFINITE(airspeed_validated.indicated_airspeed_m_s)
&& airspeed_validated.indicated_airspeed_m_s > 0.f) {
raw_gps.groundSpeed = airspeed_validated.indicated_airspeed_m_s * 100;

View File

@@ -54,9 +54,9 @@ void AirspeedChecks::checkAndReport(const Context &context, Report &reporter)
reporter.setIsPresent(health_component_t::differential_pressure);
const bool airspeed_from_sensor = airspeed_validated.airspeed_source == airspeed_validated_s::SENSOR_1
|| airspeed_validated.airspeed_source == airspeed_validated_s::SENSOR_2
|| airspeed_validated.airspeed_source == airspeed_validated_s::SENSOR_3;
const bool airspeed_from_sensor = airspeed_validated.airspeed_source == airspeed_validated_s::SOURCE_SENSOR_1
|| airspeed_validated.airspeed_source == airspeed_validated_s::SOURCE_SENSOR_2
|| airspeed_validated.airspeed_source == airspeed_validated_s::SOURCE_SENSOR_3;
const float airspeed_calibrated_from_sensor = airspeed_from_sensor ? airspeed_validated.calibrated_airspeed_m_s : NAN;

View File

@@ -2085,10 +2085,10 @@ void EKF2::UpdateAirspeedSample(ekf2_timestamps_s &ekf2_timestamps)
if (_airspeed_validated_sub.update(&airspeed_validated)) {
if (PX4_ISFINITE(airspeed_validated.true_airspeed_m_s)
&& (airspeed_validated.airspeed_source > airspeed_validated_s::GROUND_MINUS_WIND)
&& (airspeed_validated.airspeed_source > airspeed_validated_s::SOURCE_GROUND_MINUS_WIND)
) {
_ekf.setSyntheticAirspeed(airspeed_validated.airspeed_source == airspeed_validated_s::SYNTHETIC);
_ekf.setSyntheticAirspeed(airspeed_validated.airspeed_source == airspeed_validated_s::SOURCE_SYNTHETIC);
float cas2tas = 1.f;

View File

@@ -607,7 +607,7 @@ void FwLateralLongitudinalControl::updateAirspeed() {
// do not use synthetic airspeed as this would create a thrust loop
if (PX4_ISFINITE(airspeed_validated.calibrated_airspeed_m_s)
&& PX4_ISFINITE(airspeed_validated.true_airspeed_m_s)
&& airspeed_validated.airspeed_source != airspeed_validated_s::SYNTHETIC) {
&& airspeed_validated.airspeed_source != airspeed_validated_s::SOURCE_SYNTHETIC) {
_time_airspeed_last_valid = airspeed_validated.timestamp;
_long_control_state.airspeed_eas = airspeed_validated.calibrated_airspeed_m_s;

View File

@@ -166,7 +166,7 @@ FixedWingModeManager::airspeed_poll()
// do not use synthetic airspeed as it's for the use here not reliable enough
if (PX4_ISFINITE(airspeed_validated.calibrated_airspeed_m_s)
&& airspeed_validated.airspeed_source != airspeed_validated_s::SYNTHETIC) {
&& airspeed_validated.airspeed_source != airspeed_validated_s::SOURCE_SYNTHETIC) {
_airspeed_eas = airspeed_validated.calibrated_airspeed_m_s;
}

View File

@@ -93,9 +93,9 @@ bool FixedwingLandDetector::_get_landed_state()
airspeed_validated_s airspeed_validated{};
_airspeed_validated_sub.copy(&airspeed_validated);
const bool airspeed_from_sensor = airspeed_validated.airspeed_source == airspeed_validated_s::SENSOR_1
|| airspeed_validated.airspeed_source == airspeed_validated_s::SENSOR_2
|| airspeed_validated.airspeed_source == airspeed_validated_s::SENSOR_3;
const bool airspeed_from_sensor = airspeed_validated.airspeed_source == airspeed_validated_s::SOURCE_SENSOR_1
|| airspeed_validated.airspeed_source == airspeed_validated_s::SOURCE_SENSOR_2
|| airspeed_validated.airspeed_source == airspeed_validated_s::SOURCE_SENSOR_3;
bool airspeed_invalid = false;

View File

@@ -82,9 +82,9 @@ private:
airspeed_validated_s airspeed_validated{};
_airspeed_validated_sub.copy(&airspeed_validated);
const bool airspeed_from_sensor = airspeed_validated.airspeed_source == airspeed_validated_s::SENSOR_1
|| airspeed_validated.airspeed_source == airspeed_validated_s::SENSOR_2
|| airspeed_validated.airspeed_source == airspeed_validated_s::SENSOR_3;
const bool airspeed_from_sensor = airspeed_validated.airspeed_source == airspeed_validated_s::SOURCE_SENSOR_1
|| airspeed_validated.airspeed_source == airspeed_validated_s::SOURCE_SENSOR_2
|| airspeed_validated.airspeed_source == airspeed_validated_s::SOURCE_SENSOR_3;
mavlink_vfr_hud_t msg{};
// display NAN in case of source not being one of the sensors

View File

@@ -368,9 +368,9 @@ VtolAttitudeControl::Run()
airspeed_validated_s airspeed_validated;
if (_airspeed_validated_sub.copy(&airspeed_validated)) {
const bool airspeed_from_sensor = airspeed_validated.airspeed_source == airspeed_validated_s::SENSOR_1
|| airspeed_validated.airspeed_source == airspeed_validated_s::SENSOR_2
|| airspeed_validated.airspeed_source == airspeed_validated_s::SENSOR_3;
const bool airspeed_from_sensor = airspeed_validated.airspeed_source == airspeed_validated_s::SOURCE_SENSOR_1
|| airspeed_validated.airspeed_source == airspeed_validated_s::SOURCE_SENSOR_2
|| airspeed_validated.airspeed_source == airspeed_validated_s::SOURCE_SENSOR_3;
const bool use_airspeed = _param_fw_use_airspd.get() && airspeed_from_sensor;
_calibrated_airspeed = use_airspeed ? airspeed_validated.calibrated_airspeed_m_s : NAN;