From b788d5c64783ab6314dc0f4814243b042230a170 Mon Sep 17 00:00:00 2001 From: NotAWalrus Date: Sun, 2 Mar 2025 15:36:00 +0000 Subject: [PATCH 1/7] Allow negative differential pressure if parameter enabled Allow negative values of differential pressure to be used by converting them to absolute values if SENS_DIFF_PRESS_ABS is set to 1. Allows users to fly an aircraft where static and pitot pipes aren't installed correctly but are no longer accessible --- .../differential_pressure/asp5033/ASP5033.cpp | 10 ++++++++++ .../auav/AUAV_Differential.cpp | 8 ++++++++ .../differential_pressure/ets/ETSAirspeed.cpp | 9 +++++++++ src/drivers/differential_pressure/ms4515/MS4515.cpp | 9 +++++++++ .../differential_pressure/ms4525do/MS4525DO.cpp | 9 +++++++++ .../differential_pressure/ms5525dso/MS5525DSO.cpp | 9 +++++++++ src/drivers/differential_pressure/sdp3x/SDP3X.cpp | 9 +++++++++ .../uavcan/sensors/differential_pressure.cpp | 9 ++++++++- src/modules/commander/airspeed_calibration.cpp | 7 ++++--- src/modules/sensors/sensor_params.c | 13 +++++++++++++ src/modules/sensors/sensors.cpp | 1 + src/modules/sensors/sensors.hpp | 2 ++ 12 files changed, 91 insertions(+), 4 deletions(-) diff --git a/src/drivers/differential_pressure/asp5033/ASP5033.cpp b/src/drivers/differential_pressure/asp5033/ASP5033.cpp index 3f4b05b6d891..ae328a622862 100644 --- a/src/drivers/differential_pressure/asp5033/ASP5033.cpp +++ b/src/drivers/differential_pressure/asp5033/ASP5033.cpp @@ -40,6 +40,7 @@ */ #include "ASP5033.hpp" +#include ASP5033::ASP5033(const I2CSPIDriverConfig &config) : I2C(config), @@ -232,6 +233,15 @@ int ASP5033::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = _pressure; + int32_t differential_press_abs = 0; + param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + + //If differential pressure absolute param set to 1, ignore negative values + if(differential_press_abs == 1){ + differential_pressure.differential_pressure_pa = fabsf(_pressure); + } + + differential_pressure.temperature = _temperature ; differential_pressure.error_count = perf_event_count(_comms_errors); differential_pressure.timestamp = timestamp_sample; diff --git a/src/drivers/differential_pressure/auav/AUAV_Differential.cpp b/src/drivers/differential_pressure/auav/AUAV_Differential.cpp index 7b97f6e5cf3b..8f16ca54761a 100644 --- a/src/drivers/differential_pressure/auav/AUAV_Differential.cpp +++ b/src/drivers/differential_pressure/auav/AUAV_Differential.cpp @@ -32,6 +32,7 @@ ****************************************************************************/ #include "AUAV_Differential.hpp" +#include AUAV_Differential::AUAV_Differential(const I2CSPIDriverConfig &config) : AUAV(config) @@ -46,6 +47,13 @@ void AUAV_Differential::publish_pressure(const float pressure_p, const float tem differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = pressure_p; + int32_t differential_press_abs = 0; + param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + + //If differential pressure absolute param set to 1, ignore negative values + if(differential_press_abs == 1){ + differential_pressure.differential_pressure_pa = fabsf(pressure_p); + } differential_pressure.temperature = temperature_c; differential_pressure.error_count = perf_event_count(_comms_errors); _differential_pressure_pub.publish(differential_pressure); diff --git a/src/drivers/differential_pressure/ets/ETSAirspeed.cpp b/src/drivers/differential_pressure/ets/ETSAirspeed.cpp index 93193a2721dd..e620b6484e63 100644 --- a/src/drivers/differential_pressure/ets/ETSAirspeed.cpp +++ b/src/drivers/differential_pressure/ets/ETSAirspeed.cpp @@ -32,6 +32,7 @@ ****************************************************************************/ #include "ETSAirspeed.hpp" +#include ETSAirspeed::ETSAirspeed(const I2CSPIDriverConfig &config) : I2C(config), @@ -113,6 +114,14 @@ int ETSAirspeed::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; + int32_t differential_press_abs = 0; + param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + + //If differential pressure absolute param set to 1, ignore negative values + if(differential_press_abs == 1){ + differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); + } + differential_pressure.temperature = NAN; differential_pressure.error_count = perf_event_count(_comms_errors); differential_pressure.timestamp = hrt_absolute_time(); diff --git a/src/drivers/differential_pressure/ms4515/MS4515.cpp b/src/drivers/differential_pressure/ms4515/MS4515.cpp index 8abac257f766..c9fb514c961f 100644 --- a/src/drivers/differential_pressure/ms4515/MS4515.cpp +++ b/src/drivers/differential_pressure/ms4515/MS4515.cpp @@ -32,6 +32,7 @@ ****************************************************************************/ #include "MS4515.hpp" +#include MS4515::MS4515(const I2CSPIDriverConfig &config) : I2C(config), @@ -163,6 +164,14 @@ int MS4515::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; + int32_t differential_press_abs = 0; + param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + + //If differential pressure absolute param set to 1, ignore negative values + if(differential_press_abs == 1){ + differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); + } + differential_pressure.temperature = temperature_c; differential_pressure.error_count = perf_event_count(_comms_errors); differential_pressure.timestamp = hrt_absolute_time(); diff --git a/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp b/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp index 3e321a65a375..8049288891a0 100644 --- a/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp +++ b/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp @@ -32,6 +32,7 @@ ****************************************************************************/ #include "MS4525DO.hpp" +#include using namespace time_literals; @@ -200,6 +201,14 @@ void MS4525DO::RunImpl() differential_pressure.timestamp_sample = _timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; + int32_t differential_press_abs = 0; + param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + + //If differential pressure absolute param set to 1, ignore negative values + if(differential_press_abs == 1){ + differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); + } + differential_pressure.temperature = temperature_c; differential_pressure.error_count = perf_event_count(_comms_errors); differential_pressure.timestamp = hrt_absolute_time(); diff --git a/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp b/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp index 4b6202537721..c4f4e980c6d0 100644 --- a/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp +++ b/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp @@ -32,6 +32,7 @@ ****************************************************************************/ #include "MS5525DSO.hpp" +#include MS5525DSO::MS5525DSO(const I2CSPIDriverConfig &config) : I2C(config), @@ -308,6 +309,14 @@ int MS5525DSO::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; + int32_t differential_press_abs = 0; + param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + + //If differential pressure absolute param set to 1, ignore negative values + if(differential_press_abs == 1){ + differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); + } + differential_pressure.temperature = temperature_c; differential_pressure.error_count = perf_event_count(_comms_errors); differential_pressure.timestamp = hrt_absolute_time(); diff --git a/src/drivers/differential_pressure/sdp3x/SDP3X.cpp b/src/drivers/differential_pressure/sdp3x/SDP3X.cpp index 82a7c4c24d4e..b4696e9a0efb 100644 --- a/src/drivers/differential_pressure/sdp3x/SDP3X.cpp +++ b/src/drivers/differential_pressure/sdp3x/SDP3X.cpp @@ -32,6 +32,7 @@ ****************************************************************************/ #include "SDP3X.hpp" +#include using namespace time_literals; @@ -187,6 +188,14 @@ int SDP3X::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; + int32_t differential_press_abs = 0; + param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + + //If differential pressure absolute param set to 1, ignore negative values + if(differential_press_abs == 1){ + differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); + } + differential_pressure.temperature = temperature_c; differential_pressure.error_count = perf_event_count(_comms_errors); differential_pressure.timestamp = hrt_absolute_time(); diff --git a/src/drivers/uavcan/sensors/differential_pressure.cpp b/src/drivers/uavcan/sensors/differential_pressure.cpp index 245778734849..9f6f82038c77 100644 --- a/src/drivers/uavcan/sensors/differential_pressure.cpp +++ b/src/drivers/uavcan/sensors/differential_pressure.cpp @@ -69,8 +69,15 @@ void UavcanDifferentialPressureBridge::air_sub_cb(const _device_id.devid_s.devtype = DRV_DIFF_PRESS_DEVTYPE_UAVCAN; _device_id.devid_s.address = msg.getSrcNodeID().get() & 0xFF; - float diff_press_pa = msg.differential_pressure; + int32_t differential_press_abs = 0; + param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + + //If differential pressure absolute param set to 1, ignore negative values + if(differential_press_abs == 1){ + diff_press_pa = fabsf(msg.differential_pressure); + } + float temperature_c = msg.static_air_temperature + atmosphere::kAbsoluteNullCelsius; differential_pressure_s report{}; diff --git a/src/modules/commander/airspeed_calibration.cpp b/src/modules/commander/airspeed_calibration.cpp index e644e7723a23..179e325204d2 100644 --- a/src/modules/commander/airspeed_calibration.cpp +++ b/src/modules/commander/airspeed_calibration.cpp @@ -164,11 +164,12 @@ int do_airspeed_calibration(orb_advert_t *mavlink_log_pub) calibration_log_info(mavlink_log_pub, "[cal] Positive pressure: OK (%d Pa)", (int)differential_pressure_pa); break; - } else { - /* do not allow negative values */ + } + else { + /* do not allow negative values if SENS_DPRES_ABS not set */ calibration_log_critical(mavlink_log_pub, "[cal] Negative pressure difference detected (%d Pa)", (int)differential_pressure_pa); - calibration_log_critical(mavlink_log_pub, "[cal] Swap static and dynamic ports!"); + calibration_log_critical(mavlink_log_pub, "[cal] Swap static and dynamic ports or set SENS_DPRES_ABS to 1"); /* the user setup is wrong, wipe the calibration to force a proper re-calibration */ diff_pres_offset = 0.0f; diff --git a/src/modules/sensors/sensor_params.c b/src/modules/sensors/sensor_params.c index fd93e18dff7a..310fdf61ffe9 100644 --- a/src/modules/sensors/sensor_params.c +++ b/src/modules/sensors/sensor_params.c @@ -87,6 +87,19 @@ PARAM_DEFINE_FLOAT(CAL_AIR_TUBED_MM, 1.5f); */ PARAM_DEFINE_FLOAT(SENS_DPRES_OFF, 0.0f); +/** + * Differential pressure sensor absolute + * + * Set to 1 to enable absolute values only for differential pressure sensors. + * This should be done if differential pressure sensors have had static and dynamic ports swapped. + * Setting this parameter to 1 makes it difficult to detect pitot-static pressure leaks; only + * set this parameter if static and dynamic tubes are inaccessible. + * + * @category system + * @group Sensor Calibration + */ +PARAM_DEFINE_INT32(SENS_DPRES_ABS, 0); + /** * Differential pressure sensor analog scaling * diff --git a/src/modules/sensors/sensors.cpp b/src/modules/sensors/sensors.cpp index 97ceb6db216c..02aae4d6fbdc 100644 --- a/src/modules/sensors/sensors.cpp +++ b/src/modules/sensors/sensors.cpp @@ -59,6 +59,7 @@ Sensors::Sensors(bool hil_enabled) : #if defined(CONFIG_SENSORS_VEHICLE_AIRSPEED) /* Differential pressure offset */ _parameter_handles.diff_pres_offset_pa = param_find("SENS_DPRES_OFF"); + _parameter_handles.diff_pres_abs = param_find("SENS_DPRES_ABS"); #ifdef ADC_AIRSPEED_VOLTAGE_CHANNEL _parameter_handles.diff_pres_analog_scale = param_find("SENS_DPRES_ANSC"); #endif /* ADC_AIRSPEED_VOLTAGE_CHANNEL */ diff --git a/src/modules/sensors/sensors.hpp b/src/modules/sensors/sensors.hpp index 3a8bcd50bc7a..66904b8e4c7a 100644 --- a/src/modules/sensors/sensors.hpp +++ b/src/modules/sensors/sensors.hpp @@ -198,6 +198,7 @@ class Sensors : public ModuleBase, public ModuleParams, public px4::Sch struct Parameters { float diff_pres_offset_pa; + int32_t diff_pres_abs; #ifdef ADC_AIRSPEED_VOLTAGE_CHANNEL float diff_pres_analog_scale; #endif /* ADC_AIRSPEED_VOLTAGE_CHANNEL */ @@ -209,6 +210,7 @@ class Sensors : public ModuleBase, public ModuleParams, public px4::Sch struct ParameterHandles { param_t diff_pres_offset_pa; + param_t diff_pres_abs; #ifdef ADC_AIRSPEED_VOLTAGE_CHANNEL param_t diff_pres_analog_scale; #endif /* ADC_AIRSPEED_VOLTAGE_CHANNEL */ From 29e9861f6ef0ee922d6c8456a0141d025bc9bd08 Mon Sep 17 00:00:00 2001 From: NotAWalrus Date: Mon, 3 Mar 2025 07:45:45 +0000 Subject: [PATCH 2/7] Fixed formatting for if and else statements --- src/drivers/differential_pressure/asp5033/ASP5033.cpp | 2 +- src/drivers/differential_pressure/auav/AUAV_Differential.cpp | 2 +- src/drivers/differential_pressure/ets/ETSAirspeed.cpp | 2 +- src/drivers/differential_pressure/ms4515/MS4515.cpp | 2 +- src/drivers/differential_pressure/ms4525do/MS4525DO.cpp | 2 +- src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp | 2 +- src/drivers/differential_pressure/sdp3x/SDP3X.cpp | 2 +- src/drivers/uavcan/sensors/differential_pressure.cpp | 2 +- src/modules/commander/airspeed_calibration.cpp | 3 +-- 9 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/drivers/differential_pressure/asp5033/ASP5033.cpp b/src/drivers/differential_pressure/asp5033/ASP5033.cpp index ae328a622862..372947278ba2 100644 --- a/src/drivers/differential_pressure/asp5033/ASP5033.cpp +++ b/src/drivers/differential_pressure/asp5033/ASP5033.cpp @@ -237,7 +237,7 @@ int ASP5033::collect() param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); //If differential pressure absolute param set to 1, ignore negative values - if(differential_press_abs == 1){ + if (differential_press_abs == 1) { differential_pressure.differential_pressure_pa = fabsf(_pressure); } diff --git a/src/drivers/differential_pressure/auav/AUAV_Differential.cpp b/src/drivers/differential_pressure/auav/AUAV_Differential.cpp index 8f16ca54761a..ff23ca669695 100644 --- a/src/drivers/differential_pressure/auav/AUAV_Differential.cpp +++ b/src/drivers/differential_pressure/auav/AUAV_Differential.cpp @@ -51,7 +51,7 @@ void AUAV_Differential::publish_pressure(const float pressure_p, const float tem param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); //If differential pressure absolute param set to 1, ignore negative values - if(differential_press_abs == 1){ + if (differential_press_abs == 1) { differential_pressure.differential_pressure_pa = fabsf(pressure_p); } differential_pressure.temperature = temperature_c; diff --git a/src/drivers/differential_pressure/ets/ETSAirspeed.cpp b/src/drivers/differential_pressure/ets/ETSAirspeed.cpp index e620b6484e63..eceee7814da1 100644 --- a/src/drivers/differential_pressure/ets/ETSAirspeed.cpp +++ b/src/drivers/differential_pressure/ets/ETSAirspeed.cpp @@ -118,7 +118,7 @@ int ETSAirspeed::collect() param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); //If differential pressure absolute param set to 1, ignore negative values - if(differential_press_abs == 1){ + if (differential_press_abs == 1) { differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); } diff --git a/src/drivers/differential_pressure/ms4515/MS4515.cpp b/src/drivers/differential_pressure/ms4515/MS4515.cpp index c9fb514c961f..439e96e3ca06 100644 --- a/src/drivers/differential_pressure/ms4515/MS4515.cpp +++ b/src/drivers/differential_pressure/ms4515/MS4515.cpp @@ -168,7 +168,7 @@ int MS4515::collect() param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); //If differential pressure absolute param set to 1, ignore negative values - if(differential_press_abs == 1){ + if (differential_press_abs == 1) { differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); } diff --git a/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp b/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp index 8049288891a0..310427d608ee 100644 --- a/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp +++ b/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp @@ -205,7 +205,7 @@ void MS4525DO::RunImpl() param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); //If differential pressure absolute param set to 1, ignore negative values - if(differential_press_abs == 1){ + if (differential_press_abs == 1) { differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); } diff --git a/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp b/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp index c4f4e980c6d0..78bdee4a574a 100644 --- a/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp +++ b/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp @@ -313,7 +313,7 @@ int MS5525DSO::collect() param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); //If differential pressure absolute param set to 1, ignore negative values - if(differential_press_abs == 1){ + if (differential_press_abs == 1) { differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); } diff --git a/src/drivers/differential_pressure/sdp3x/SDP3X.cpp b/src/drivers/differential_pressure/sdp3x/SDP3X.cpp index b4696e9a0efb..ebbf6cebc333 100644 --- a/src/drivers/differential_pressure/sdp3x/SDP3X.cpp +++ b/src/drivers/differential_pressure/sdp3x/SDP3X.cpp @@ -192,7 +192,7 @@ int SDP3X::collect() param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); //If differential pressure absolute param set to 1, ignore negative values - if(differential_press_abs == 1){ + if (differential_press_abs == 1) { differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); } diff --git a/src/drivers/uavcan/sensors/differential_pressure.cpp b/src/drivers/uavcan/sensors/differential_pressure.cpp index 9f6f82038c77..a67942c7febe 100644 --- a/src/drivers/uavcan/sensors/differential_pressure.cpp +++ b/src/drivers/uavcan/sensors/differential_pressure.cpp @@ -74,7 +74,7 @@ void UavcanDifferentialPressureBridge::air_sub_cb(const param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); //If differential pressure absolute param set to 1, ignore negative values - if(differential_press_abs == 1){ + if (differential_press_abs == 1) { diff_press_pa = fabsf(msg.differential_pressure); } diff --git a/src/modules/commander/airspeed_calibration.cpp b/src/modules/commander/airspeed_calibration.cpp index 179e325204d2..3ceb8fcc5593 100644 --- a/src/modules/commander/airspeed_calibration.cpp +++ b/src/modules/commander/airspeed_calibration.cpp @@ -164,8 +164,7 @@ int do_airspeed_calibration(orb_advert_t *mavlink_log_pub) calibration_log_info(mavlink_log_pub, "[cal] Positive pressure: OK (%d Pa)", (int)differential_pressure_pa); break; - } - else { + } else { /* do not allow negative values if SENS_DPRES_ABS not set */ calibration_log_critical(mavlink_log_pub, "[cal] Negative pressure difference detected (%d Pa)", (int)differential_pressure_pa); From 28872d725ee7cf5d3acedddd90e7eff97e673413 Mon Sep 17 00:00:00 2001 From: NotAWalrus Date: Mon, 3 Mar 2025 07:54:52 +0000 Subject: [PATCH 3/7] Added a space to pass build check --- src/drivers/differential_pressure/auav/AUAV_Differential.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/drivers/differential_pressure/auav/AUAV_Differential.cpp b/src/drivers/differential_pressure/auav/AUAV_Differential.cpp index ff23ca669695..49a30604d390 100644 --- a/src/drivers/differential_pressure/auav/AUAV_Differential.cpp +++ b/src/drivers/differential_pressure/auav/AUAV_Differential.cpp @@ -54,6 +54,7 @@ void AUAV_Differential::publish_pressure(const float pressure_p, const float tem if (differential_press_abs == 1) { differential_pressure.differential_pressure_pa = fabsf(pressure_p); } + differential_pressure.temperature = temperature_c; differential_pressure.error_count = perf_event_count(_comms_errors); _differential_pressure_pub.publish(differential_pressure); From c06b6a4dc472b32a078acbfe70c21e85247cbb9a Mon Sep 17 00:00:00 2001 From: NotAWalrus Date: Wed, 12 Mar 2025 08:08:44 +0000 Subject: [PATCH 4/7] Redid commit with SENS_DPRES_INV because of merge issues --- src/drivers/differential_pressure/asp5033/ASP5033.cpp | 10 +++++----- .../differential_pressure/auav/AUAV_Differential.cpp | 10 +++++----- src/drivers/differential_pressure/ets/ETSAirspeed.cpp | 10 +++++----- src/drivers/differential_pressure/ms4515/MS4515.cpp | 10 +++++----- .../differential_pressure/ms4525do/MS4525DO.cpp | 10 +++++----- .../differential_pressure/ms5525dso/MS5525DSO.cpp | 10 +++++----- src/drivers/differential_pressure/sdp3x/SDP3X.cpp | 10 +++++----- src/drivers/uavcan/sensors/differential_pressure.cpp | 10 +++++----- src/modules/commander/airspeed_calibration.cpp | 4 ++-- src/modules/sensors/sensor_params.c | 6 +++--- src/modules/sensors/sensors.cpp | 2 +- src/modules/sensors/sensors.hpp | 4 ++-- 12 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/drivers/differential_pressure/asp5033/ASP5033.cpp b/src/drivers/differential_pressure/asp5033/ASP5033.cpp index 372947278ba2..2e3f7643c01f 100644 --- a/src/drivers/differential_pressure/asp5033/ASP5033.cpp +++ b/src/drivers/differential_pressure/asp5033/ASP5033.cpp @@ -233,12 +233,12 @@ int ASP5033::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = _pressure; - int32_t differential_press_abs = 0; - param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + int32_t differential_press_inv = 0; + param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); - //If differential pressure absolute param set to 1, ignore negative values - if (differential_press_abs == 1) { - differential_pressure.differential_pressure_pa = fabsf(_pressure); + //If differential pressure invert param set to 1, swap positive and negative + if (differential_press_inv == 1) { + differential_pressure.differential_pressure_pa = -1.0f * _pressure; } diff --git a/src/drivers/differential_pressure/auav/AUAV_Differential.cpp b/src/drivers/differential_pressure/auav/AUAV_Differential.cpp index 49a30604d390..2b3570151ec4 100644 --- a/src/drivers/differential_pressure/auav/AUAV_Differential.cpp +++ b/src/drivers/differential_pressure/auav/AUAV_Differential.cpp @@ -47,12 +47,12 @@ void AUAV_Differential::publish_pressure(const float pressure_p, const float tem differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = pressure_p; - int32_t differential_press_abs = 0; - param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + int32_t differential_press_inv = 0; + param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); - //If differential pressure absolute param set to 1, ignore negative values - if (differential_press_abs == 1) { - differential_pressure.differential_pressure_pa = fabsf(pressure_p); + //If differential pressure invert param set to 1, swap positive and negative + if (differential_press_inv == 1) { + differential_pressure.differential_pressure_pa = -1.0f * pressure_p; } differential_pressure.temperature = temperature_c; diff --git a/src/drivers/differential_pressure/ets/ETSAirspeed.cpp b/src/drivers/differential_pressure/ets/ETSAirspeed.cpp index eceee7814da1..290430d46372 100644 --- a/src/drivers/differential_pressure/ets/ETSAirspeed.cpp +++ b/src/drivers/differential_pressure/ets/ETSAirspeed.cpp @@ -114,12 +114,12 @@ int ETSAirspeed::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; - int32_t differential_press_abs = 0; - param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + int32_t differential_press_inv = 0; + param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); - //If differential pressure absolute param set to 1, ignore negative values - if (differential_press_abs == 1) { - differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); + //If differential pressure invert param set to 1, swap positive and negative + if (differential_press_inv == 1) { + differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; } differential_pressure.temperature = NAN; diff --git a/src/drivers/differential_pressure/ms4515/MS4515.cpp b/src/drivers/differential_pressure/ms4515/MS4515.cpp index 439e96e3ca06..8c33ebc6fd81 100644 --- a/src/drivers/differential_pressure/ms4515/MS4515.cpp +++ b/src/drivers/differential_pressure/ms4515/MS4515.cpp @@ -164,12 +164,12 @@ int MS4515::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; - int32_t differential_press_abs = 0; - param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + int32_t differential_press_inv = 0; + param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); - //If differential pressure absolute param set to 1, ignore negative values - if (differential_press_abs == 1) { - differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); + //If differential pressure invert param set to 1, swap positive and negative + if (differential_press_inv == 1) { + differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; } differential_pressure.temperature = temperature_c; diff --git a/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp b/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp index 310427d608ee..e81926dd0fc9 100644 --- a/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp +++ b/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp @@ -201,12 +201,12 @@ void MS4525DO::RunImpl() differential_pressure.timestamp_sample = _timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; - int32_t differential_press_abs = 0; - param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + int32_t differential_press_inv = 0; + param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); - //If differential pressure absolute param set to 1, ignore negative values - if (differential_press_abs == 1) { - differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); + //If differential pressure invert param set to 1, swap positive and negative + if (differential_press_inv == 1) { + differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; } differential_pressure.temperature = temperature_c; diff --git a/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp b/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp index 78bdee4a574a..773f8b8ebf2d 100644 --- a/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp +++ b/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp @@ -309,12 +309,12 @@ int MS5525DSO::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; - int32_t differential_press_abs = 0; - param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + int32_t differential_press_inv = 0; + param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); - //If differential pressure absolute param set to 1, ignore negative values - if (differential_press_abs == 1) { - differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); + //If differential pressure invert param set to 1, swap positive and negative + if (differential_press_inv == 1) { + differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; } differential_pressure.temperature = temperature_c; diff --git a/src/drivers/differential_pressure/sdp3x/SDP3X.cpp b/src/drivers/differential_pressure/sdp3x/SDP3X.cpp index ebbf6cebc333..36e7a95a0fab 100644 --- a/src/drivers/differential_pressure/sdp3x/SDP3X.cpp +++ b/src/drivers/differential_pressure/sdp3x/SDP3X.cpp @@ -188,12 +188,12 @@ int SDP3X::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; - int32_t differential_press_abs = 0; - param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + int32_t differential_press_inv = 0; + param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); - //If differential pressure absolute param set to 1, ignore negative values - if (differential_press_abs == 1) { - differential_pressure.differential_pressure_pa = fabsf(diff_press_pa); + //If differential pressure invert param set to 1, swap positive and negative + if (differential_press_inv == 1) { + differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; } differential_pressure.temperature = temperature_c; diff --git a/src/drivers/uavcan/sensors/differential_pressure.cpp b/src/drivers/uavcan/sensors/differential_pressure.cpp index a67942c7febe..34414e522fdf 100644 --- a/src/drivers/uavcan/sensors/differential_pressure.cpp +++ b/src/drivers/uavcan/sensors/differential_pressure.cpp @@ -70,12 +70,12 @@ void UavcanDifferentialPressureBridge::air_sub_cb(const _device_id.devid_s.devtype = DRV_DIFF_PRESS_DEVTYPE_UAVCAN; _device_id.devid_s.address = msg.getSrcNodeID().get() & 0xFF; float diff_press_pa = msg.differential_pressure; - int32_t differential_press_abs = 0; - param_get(param_find("SENS_DPRES_ABS"), &differential_press_abs); + int32_t differential_press_inv = 0; + param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); - //If differential pressure absolute param set to 1, ignore negative values - if (differential_press_abs == 1) { - diff_press_pa = fabsf(msg.differential_pressure); + //If differential pressure invert param set to 1, swap positive and negative + if (differential_press_inv == 1) { + diff_press_pa = -1.0f * msg.differential_pressure; } float temperature_c = msg.static_air_temperature + atmosphere::kAbsoluteNullCelsius; diff --git a/src/modules/commander/airspeed_calibration.cpp b/src/modules/commander/airspeed_calibration.cpp index 3ceb8fcc5593..ac4589802bc6 100644 --- a/src/modules/commander/airspeed_calibration.cpp +++ b/src/modules/commander/airspeed_calibration.cpp @@ -165,10 +165,10 @@ int do_airspeed_calibration(orb_advert_t *mavlink_log_pub) break; } else { - /* do not allow negative values if SENS_DPRES_ABS not set */ + /* do not allow negative values if SENS_DPRES_INV not set */ calibration_log_critical(mavlink_log_pub, "[cal] Negative pressure difference detected (%d Pa)", (int)differential_pressure_pa); - calibration_log_critical(mavlink_log_pub, "[cal] Swap static and dynamic ports or set SENS_DPRES_ABS to 1"); + calibration_log_critical(mavlink_log_pub, "[cal] Swap static and dynamic ports or set SENS_DPRES_INV to 1"); /* the user setup is wrong, wipe the calibration to force a proper re-calibration */ diff_pres_offset = 0.0f; diff --git a/src/modules/sensors/sensor_params.c b/src/modules/sensors/sensor_params.c index 310fdf61ffe9..10dc6d8d9c75 100644 --- a/src/modules/sensors/sensor_params.c +++ b/src/modules/sensors/sensor_params.c @@ -88,9 +88,9 @@ PARAM_DEFINE_FLOAT(CAL_AIR_TUBED_MM, 1.5f); PARAM_DEFINE_FLOAT(SENS_DPRES_OFF, 0.0f); /** - * Differential pressure sensor absolute + * Differential pressure sensor invert * - * Set to 1 to enable absolute values only for differential pressure sensors. + * Set to 1 to enable inverted values for all differential pressure sensors. * This should be done if differential pressure sensors have had static and dynamic ports swapped. * Setting this parameter to 1 makes it difficult to detect pitot-static pressure leaks; only * set this parameter if static and dynamic tubes are inaccessible. @@ -98,7 +98,7 @@ PARAM_DEFINE_FLOAT(SENS_DPRES_OFF, 0.0f); * @category system * @group Sensor Calibration */ -PARAM_DEFINE_INT32(SENS_DPRES_ABS, 0); +PARAM_DEFINE_INT32(SENS_DPRES_INV, 0); /** * Differential pressure sensor analog scaling diff --git a/src/modules/sensors/sensors.cpp b/src/modules/sensors/sensors.cpp index 02aae4d6fbdc..4ee7dc0e3ac0 100644 --- a/src/modules/sensors/sensors.cpp +++ b/src/modules/sensors/sensors.cpp @@ -59,7 +59,7 @@ Sensors::Sensors(bool hil_enabled) : #if defined(CONFIG_SENSORS_VEHICLE_AIRSPEED) /* Differential pressure offset */ _parameter_handles.diff_pres_offset_pa = param_find("SENS_DPRES_OFF"); - _parameter_handles.diff_pres_abs = param_find("SENS_DPRES_ABS"); + _parameter_handles.diff_pres_inv = param_find("SENS_DPRES_INV"); #ifdef ADC_AIRSPEED_VOLTAGE_CHANNEL _parameter_handles.diff_pres_analog_scale = param_find("SENS_DPRES_ANSC"); #endif /* ADC_AIRSPEED_VOLTAGE_CHANNEL */ diff --git a/src/modules/sensors/sensors.hpp b/src/modules/sensors/sensors.hpp index 66904b8e4c7a..cfa80f4b077a 100644 --- a/src/modules/sensors/sensors.hpp +++ b/src/modules/sensors/sensors.hpp @@ -198,7 +198,7 @@ class Sensors : public ModuleBase, public ModuleParams, public px4::Sch struct Parameters { float diff_pres_offset_pa; - int32_t diff_pres_abs; + int32_t diff_pres_inv; #ifdef ADC_AIRSPEED_VOLTAGE_CHANNEL float diff_pres_analog_scale; #endif /* ADC_AIRSPEED_VOLTAGE_CHANNEL */ @@ -210,7 +210,7 @@ class Sensors : public ModuleBase, public ModuleParams, public px4::Sch struct ParameterHandles { param_t diff_pres_offset_pa; - param_t diff_pres_abs; + param_t diff_pres_inv; #ifdef ADC_AIRSPEED_VOLTAGE_CHANNEL param_t diff_pres_analog_scale; #endif /* ADC_AIRSPEED_VOLTAGE_CHANNEL */ From e3943a5c32908e294c244b7228971def98aa5f74 Mon Sep 17 00:00:00 2001 From: NotAWalrus Date: Mon, 17 Mar 2025 08:06:05 +0000 Subject: [PATCH 5/7] Amended to SENS_DPRES_REV following review. Kept reverse differential pressure functionality in drivers, because if the functionality is moved to sensors.cpp, airspeed calibration and mavlink inspector must also be modified, as these read the differential pressure UORB message. Kept the internal param_get type as int32_t, because param_get does not support boolean types. --- src/drivers/differential_pressure/asp5033/ASP5033.cpp | 8 ++++---- .../differential_pressure/auav/AUAV_Differential.cpp | 8 ++++---- src/drivers/differential_pressure/ets/ETSAirspeed.cpp | 8 ++++---- src/drivers/differential_pressure/ms4515/MS4515.cpp | 8 ++++---- .../differential_pressure/ms4525do/MS4525DO.cpp | 8 ++++---- .../differential_pressure/ms5525dso/MS5525DSO.cpp | 8 ++++---- src/drivers/differential_pressure/sdp3x/SDP3X.cpp | 8 ++++---- src/drivers/uavcan/sensors/differential_pressure.cpp | 8 ++++---- src/modules/commander/airspeed_calibration.cpp | 4 ++-- src/modules/sensors/sensor_params.c | 11 +++++------ src/modules/sensors/sensors.cpp | 5 ++++- src/modules/sensors/sensors.hpp | 3 +-- 12 files changed, 44 insertions(+), 43 deletions(-) diff --git a/src/drivers/differential_pressure/asp5033/ASP5033.cpp b/src/drivers/differential_pressure/asp5033/ASP5033.cpp index 2e3f7643c01f..c5e6b98b656c 100644 --- a/src/drivers/differential_pressure/asp5033/ASP5033.cpp +++ b/src/drivers/differential_pressure/asp5033/ASP5033.cpp @@ -233,11 +233,11 @@ int ASP5033::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = _pressure; - int32_t differential_press_inv = 0; - param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); - //If differential pressure invert param set to 1, swap positive and negative - if (differential_press_inv == 1) { + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { differential_pressure.differential_pressure_pa = -1.0f * _pressure; } diff --git a/src/drivers/differential_pressure/auav/AUAV_Differential.cpp b/src/drivers/differential_pressure/auav/AUAV_Differential.cpp index 2b3570151ec4..3a4243b36623 100644 --- a/src/drivers/differential_pressure/auav/AUAV_Differential.cpp +++ b/src/drivers/differential_pressure/auav/AUAV_Differential.cpp @@ -47,11 +47,11 @@ void AUAV_Differential::publish_pressure(const float pressure_p, const float tem differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = pressure_p; - int32_t differential_press_inv = 0; - param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); - //If differential pressure invert param set to 1, swap positive and negative - if (differential_press_inv == 1) { + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { differential_pressure.differential_pressure_pa = -1.0f * pressure_p; } diff --git a/src/drivers/differential_pressure/ets/ETSAirspeed.cpp b/src/drivers/differential_pressure/ets/ETSAirspeed.cpp index 290430d46372..a5f8e6a312f5 100644 --- a/src/drivers/differential_pressure/ets/ETSAirspeed.cpp +++ b/src/drivers/differential_pressure/ets/ETSAirspeed.cpp @@ -114,11 +114,11 @@ int ETSAirspeed::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; - int32_t differential_press_inv = 0; - param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); - //If differential pressure invert param set to 1, swap positive and negative - if (differential_press_inv == 1) { + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; } diff --git a/src/drivers/differential_pressure/ms4515/MS4515.cpp b/src/drivers/differential_pressure/ms4515/MS4515.cpp index 8c33ebc6fd81..e1b6ae90e310 100644 --- a/src/drivers/differential_pressure/ms4515/MS4515.cpp +++ b/src/drivers/differential_pressure/ms4515/MS4515.cpp @@ -164,11 +164,11 @@ int MS4515::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; - int32_t differential_press_inv = 0; - param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); - //If differential pressure invert param set to 1, swap positive and negative - if (differential_press_inv == 1) { + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; } diff --git a/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp b/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp index e81926dd0fc9..fcce76eddab0 100644 --- a/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp +++ b/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp @@ -201,11 +201,11 @@ void MS4525DO::RunImpl() differential_pressure.timestamp_sample = _timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; - int32_t differential_press_inv = 0; - param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); - //If differential pressure invert param set to 1, swap positive and negative - if (differential_press_inv == 1) { + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; } diff --git a/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp b/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp index 773f8b8ebf2d..2a15b6e6269b 100644 --- a/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp +++ b/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp @@ -309,11 +309,11 @@ int MS5525DSO::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; - int32_t differential_press_inv = 0; - param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); - //If differential pressure invert param set to 1, swap positive and negative - if (differential_press_inv == 1) { + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; } diff --git a/src/drivers/differential_pressure/sdp3x/SDP3X.cpp b/src/drivers/differential_pressure/sdp3x/SDP3X.cpp index 36e7a95a0fab..06418de1b52d 100644 --- a/src/drivers/differential_pressure/sdp3x/SDP3X.cpp +++ b/src/drivers/differential_pressure/sdp3x/SDP3X.cpp @@ -188,11 +188,11 @@ int SDP3X::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; - int32_t differential_press_inv = 0; - param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); - //If differential pressure invert param set to 1, swap positive and negative - if (differential_press_inv == 1) { + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; } diff --git a/src/drivers/uavcan/sensors/differential_pressure.cpp b/src/drivers/uavcan/sensors/differential_pressure.cpp index 34414e522fdf..0fcb6520c2c9 100644 --- a/src/drivers/uavcan/sensors/differential_pressure.cpp +++ b/src/drivers/uavcan/sensors/differential_pressure.cpp @@ -70,11 +70,11 @@ void UavcanDifferentialPressureBridge::air_sub_cb(const _device_id.devid_s.devtype = DRV_DIFF_PRESS_DEVTYPE_UAVCAN; _device_id.devid_s.address = msg.getSrcNodeID().get() & 0xFF; float diff_press_pa = msg.differential_pressure; - int32_t differential_press_inv = 0; - param_get(param_find("SENS_DPRES_INV"), &differential_press_inv); + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); - //If differential pressure invert param set to 1, swap positive and negative - if (differential_press_inv == 1) { + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { diff_press_pa = -1.0f * msg.differential_pressure; } diff --git a/src/modules/commander/airspeed_calibration.cpp b/src/modules/commander/airspeed_calibration.cpp index ac4589802bc6..d013eb9e733e 100644 --- a/src/modules/commander/airspeed_calibration.cpp +++ b/src/modules/commander/airspeed_calibration.cpp @@ -165,10 +165,10 @@ int do_airspeed_calibration(orb_advert_t *mavlink_log_pub) break; } else { - /* do not allow negative values if SENS_DPRES_INV not set */ + /* do not allow negative values */ calibration_log_critical(mavlink_log_pub, "[cal] Negative pressure difference detected (%d Pa)", (int)differential_pressure_pa); - calibration_log_critical(mavlink_log_pub, "[cal] Swap static and dynamic ports or set SENS_DPRES_INV to 1"); + calibration_log_critical(mavlink_log_pub, "[cal] Swap static and dynamic ports or set SENS_DPRES_REV"); /* the user setup is wrong, wipe the calibration to force a proper re-calibration */ diff_pres_offset = 0.0f; diff --git a/src/modules/sensors/sensor_params.c b/src/modules/sensors/sensor_params.c index 10dc6d8d9c75..3288f9d87337 100644 --- a/src/modules/sensors/sensor_params.c +++ b/src/modules/sensors/sensor_params.c @@ -88,17 +88,16 @@ PARAM_DEFINE_FLOAT(CAL_AIR_TUBED_MM, 1.5f); PARAM_DEFINE_FLOAT(SENS_DPRES_OFF, 0.0f); /** - * Differential pressure sensor invert + * Reverse differential pressure sensor readings * - * Set to 1 to enable inverted values for all differential pressure sensors. - * This should be done if differential pressure sensors have had static and dynamic ports swapped. - * Setting this parameter to 1 makes it difficult to detect pitot-static pressure leaks; only - * set this parameter if static and dynamic tubes are inaccessible. + * Reverse the raw measurements of all differential pressure sensors. + * This can be enabled if the sensors have static and dynamic ports swapped. * * @category system * @group Sensor Calibration + * @boolean */ -PARAM_DEFINE_INT32(SENS_DPRES_INV, 0); +PARAM_DEFINE_INT32(SENS_DPRES_REV, 0); /** * Differential pressure sensor analog scaling diff --git a/src/modules/sensors/sensors.cpp b/src/modules/sensors/sensors.cpp index 4ee7dc0e3ac0..0075b829e907 100644 --- a/src/modules/sensors/sensors.cpp +++ b/src/modules/sensors/sensors.cpp @@ -59,7 +59,10 @@ Sensors::Sensors(bool hil_enabled) : #if defined(CONFIG_SENSORS_VEHICLE_AIRSPEED) /* Differential pressure offset */ _parameter_handles.diff_pres_offset_pa = param_find("SENS_DPRES_OFF"); - _parameter_handles.diff_pres_inv = param_find("SENS_DPRES_INV"); + + /* Differential pressure reverse*/ + //Parameter handle here, parameter used in differential pressure sensor drivers + _parameter_handles.diff_pres_rev = param_find("SENS_DPRES_REV"); #ifdef ADC_AIRSPEED_VOLTAGE_CHANNEL _parameter_handles.diff_pres_analog_scale = param_find("SENS_DPRES_ANSC"); #endif /* ADC_AIRSPEED_VOLTAGE_CHANNEL */ diff --git a/src/modules/sensors/sensors.hpp b/src/modules/sensors/sensors.hpp index cfa80f4b077a..87167f9cf204 100644 --- a/src/modules/sensors/sensors.hpp +++ b/src/modules/sensors/sensors.hpp @@ -198,7 +198,6 @@ class Sensors : public ModuleBase, public ModuleParams, public px4::Sch struct Parameters { float diff_pres_offset_pa; - int32_t diff_pres_inv; #ifdef ADC_AIRSPEED_VOLTAGE_CHANNEL float diff_pres_analog_scale; #endif /* ADC_AIRSPEED_VOLTAGE_CHANNEL */ @@ -210,7 +209,7 @@ class Sensors : public ModuleBase, public ModuleParams, public px4::Sch struct ParameterHandles { param_t diff_pres_offset_pa; - param_t diff_pres_inv; + param_t diff_pres_rev; #ifdef ADC_AIRSPEED_VOLTAGE_CHANNEL param_t diff_pres_analog_scale; #endif /* ADC_AIRSPEED_VOLTAGE_CHANNEL */ From 7950fdd11ac722865a479840af855bf605a4f467 Mon Sep 17 00:00:00 2001 From: NotAWalrus Date: Thu, 20 Mar 2025 07:28:05 +0000 Subject: [PATCH 6/7] Removed diff_pres_rev from sensors.cpp and sensors.hpp --- src/modules/sensors/sensors.cpp | 3 --- src/modules/sensors/sensors.hpp | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/modules/sensors/sensors.cpp b/src/modules/sensors/sensors.cpp index 0075b829e907..0d8996214e8b 100644 --- a/src/modules/sensors/sensors.cpp +++ b/src/modules/sensors/sensors.cpp @@ -60,9 +60,6 @@ Sensors::Sensors(bool hil_enabled) : /* Differential pressure offset */ _parameter_handles.diff_pres_offset_pa = param_find("SENS_DPRES_OFF"); - /* Differential pressure reverse*/ - //Parameter handle here, parameter used in differential pressure sensor drivers - _parameter_handles.diff_pres_rev = param_find("SENS_DPRES_REV"); #ifdef ADC_AIRSPEED_VOLTAGE_CHANNEL _parameter_handles.diff_pres_analog_scale = param_find("SENS_DPRES_ANSC"); #endif /* ADC_AIRSPEED_VOLTAGE_CHANNEL */ diff --git a/src/modules/sensors/sensors.hpp b/src/modules/sensors/sensors.hpp index 87167f9cf204..a467dc93b262 100644 --- a/src/modules/sensors/sensors.hpp +++ b/src/modules/sensors/sensors.hpp @@ -209,7 +209,7 @@ class Sensors : public ModuleBase, public ModuleParams, public px4::Sch struct ParameterHandles { param_t diff_pres_offset_pa; - param_t diff_pres_rev; + #ifdef ADC_AIRSPEED_VOLTAGE_CHANNEL param_t diff_pres_analog_scale; #endif /* ADC_AIRSPEED_VOLTAGE_CHANNEL */ From 71a94f17b018468078b239826e8ec2a020b6114f Mon Sep 17 00:00:00 2001 From: Mathieu Bresciani Date: Mon, 24 Mar 2025 09:25:32 +0100 Subject: [PATCH 7/7] Apply suggestions from code review --- src/modules/sensors/sensors.cpp | 1 - src/modules/sensors/sensors.hpp | 1 - 2 files changed, 2 deletions(-) diff --git a/src/modules/sensors/sensors.cpp b/src/modules/sensors/sensors.cpp index 0d8996214e8b..97ceb6db216c 100644 --- a/src/modules/sensors/sensors.cpp +++ b/src/modules/sensors/sensors.cpp @@ -59,7 +59,6 @@ Sensors::Sensors(bool hil_enabled) : #if defined(CONFIG_SENSORS_VEHICLE_AIRSPEED) /* Differential pressure offset */ _parameter_handles.diff_pres_offset_pa = param_find("SENS_DPRES_OFF"); - #ifdef ADC_AIRSPEED_VOLTAGE_CHANNEL _parameter_handles.diff_pres_analog_scale = param_find("SENS_DPRES_ANSC"); #endif /* ADC_AIRSPEED_VOLTAGE_CHANNEL */ diff --git a/src/modules/sensors/sensors.hpp b/src/modules/sensors/sensors.hpp index a467dc93b262..3a8bcd50bc7a 100644 --- a/src/modules/sensors/sensors.hpp +++ b/src/modules/sensors/sensors.hpp @@ -209,7 +209,6 @@ class Sensors : public ModuleBase, public ModuleParams, public px4::Sch struct ParameterHandles { param_t diff_pres_offset_pa; - #ifdef ADC_AIRSPEED_VOLTAGE_CHANNEL param_t diff_pres_analog_scale; #endif /* ADC_AIRSPEED_VOLTAGE_CHANNEL */