mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-07-22 00:20:34 +08:00
At every consumation of AirspeedValidated, check for SOURCE
Signed-off-by: Silvan <silvan@auterion.com>
This commit is contained in:
@@ -54,6 +54,12 @@ void AirspeedChecks::checkAndReport(const Context &context, Report &reporter)
|
|||||||
|
|
||||||
reporter.setIsPresent(health_component_t::differential_pressure);
|
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 float airspeed_calibrated_from_sensor = airspeed_from_sensor ? airspeed_validated.calibrated_airspeed_m_s : NAN;
|
||||||
|
|
||||||
// Maximally allow the airspeed reading to be at FW_AIRSPD_MAX when arming. This is to catch very badly calibrated
|
// Maximally allow the airspeed reading to be at FW_AIRSPD_MAX when arming. This is to catch very badly calibrated
|
||||||
// airspeed sensors, but also high wind conditions that prevent a forward flight of the vehicle.
|
// airspeed sensors, but also high wind conditions that prevent a forward flight of the vehicle.
|
||||||
float arming_max_airspeed_allowed = 20.f;
|
float arming_max_airspeed_allowed = 20.f;
|
||||||
@@ -62,7 +68,7 @@ void AirspeedChecks::checkAndReport(const Context &context, Report &reporter)
|
|||||||
/*
|
/*
|
||||||
* Check if airspeed is declared valid or not by airspeed selector.
|
* Check if airspeed is declared valid or not by airspeed selector.
|
||||||
*/
|
*/
|
||||||
if (!PX4_ISFINITE(airspeed_validated.calibrated_airspeed_m_s)) {
|
if (!PX4_ISFINITE(airspeed_calibrated_from_sensor)) {
|
||||||
|
|
||||||
/* EVENT
|
/* EVENT
|
||||||
*/
|
*/
|
||||||
@@ -75,7 +81,7 @@ void AirspeedChecks::checkAndReport(const Context &context, Report &reporter)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!context.isArmed() && fabsf(airspeed_validated.calibrated_airspeed_m_s) > arming_max_airspeed_allowed) {
|
if (!context.isArmed() && airspeed_calibrated_from_sensor > arming_max_airspeed_allowed) {
|
||||||
/* EVENT
|
/* EVENT
|
||||||
* @description
|
* @description
|
||||||
* Current airspeed reading too high. Check if wind is below maximum airspeed and redo airspeed
|
* Current airspeed reading too high. Check if wind is below maximum airspeed and redo airspeed
|
||||||
|
|||||||
@@ -214,8 +214,10 @@ FixedwingPositionControl::airspeed_poll()
|
|||||||
|
|
||||||
_eas2tas = 1.0f; //this is the default value, taken in case of invalid airspeed
|
_eas2tas = 1.0f; //this is the default value, taken in case of invalid airspeed
|
||||||
|
|
||||||
|
// do not use synthetic airspeed as this would create a thrust loop
|
||||||
if (PX4_ISFINITE(airspeed_validated.calibrated_airspeed_m_s)
|
if (PX4_ISFINITE(airspeed_validated.calibrated_airspeed_m_s)
|
||||||
&& PX4_ISFINITE(airspeed_validated.true_airspeed_m_s)) {
|
&& PX4_ISFINITE(airspeed_validated.true_airspeed_m_s)
|
||||||
|
&& airspeed_validated.airspeed_source != airspeed_validated_s::SYNTHETIC) {
|
||||||
|
|
||||||
airspeed_valid = true;
|
airspeed_valid = true;
|
||||||
|
|
||||||
|
|||||||
@@ -93,10 +93,15 @@ bool FixedwingLandDetector::_get_landed_state()
|
|||||||
airspeed_validated_s airspeed_validated{};
|
airspeed_validated_s airspeed_validated{};
|
||||||
_airspeed_validated_sub.copy(&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;
|
||||||
|
|
||||||
bool airspeed_invalid = false;
|
bool airspeed_invalid = false;
|
||||||
|
|
||||||
// set _airspeed_filtered to 0 if airspeed data is invalid
|
// set _airspeed_filtered to 0 if airspeed data is invalid or not from an actual airspeed sensor
|
||||||
if (!PX4_ISFINITE(airspeed_validated.true_airspeed_m_s) || hrt_elapsed_time(&airspeed_validated.timestamp) > 1_s) {
|
if (!airspeed_from_sensor || !PX4_ISFINITE(airspeed_validated.true_airspeed_m_s)
|
||||||
|
|| hrt_elapsed_time(&airspeed_validated.timestamp) > 1_s) {
|
||||||
_airspeed_filtered = 0.0f;
|
_airspeed_filtered = 0.0f;
|
||||||
airspeed_invalid = true;
|
airspeed_invalid = true;
|
||||||
|
|
||||||
|
|||||||
@@ -82,9 +82,13 @@ private:
|
|||||||
|
|
||||||
airspeed_validated_s airspeed_validated{};
|
airspeed_validated_s airspeed_validated{};
|
||||||
_airspeed_validated_sub.copy(&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;
|
||||||
|
|
||||||
mavlink_vfr_hud_t msg{};
|
mavlink_vfr_hud_t msg{};
|
||||||
msg.airspeed = airspeed_validated.calibrated_airspeed_m_s;
|
// display NAN in case of source not being one of the sensors
|
||||||
|
msg.airspeed = airspeed_from_sensor ? airspeed_validated.calibrated_airspeed_m_s : NAN;
|
||||||
msg.groundspeed = sqrtf(lpos.vx * lpos.vx + lpos.vy * lpos.vy);
|
msg.groundspeed = sqrtf(lpos.vx * lpos.vx + lpos.vy * lpos.vy);
|
||||||
msg.heading = math::degrees(matrix::wrap_2pi(lpos.heading));
|
msg.heading = math::degrees(matrix::wrap_2pi(lpos.heading));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user