AP_TECS: added use_synthetic_airspeed() API

used by quadplane during transitions
This commit is contained in:
Andrew Tridgell 2016-10-05 11:52:34 +11:00
parent eec491a1f9
commit 2fab15dcd5
2 changed files with 16 additions and 3 deletions

View File

@ -366,7 +366,7 @@ void AP_TECS::_update_speed(float load_factor)
// Get airspeed or default to halfway between min and max if // Get airspeed or default to halfway between min and max if
// airspeed is not being used and set speed rate to zero // airspeed is not being used and set speed rate to zero
if (!_ahrs.airspeed_sensor_enabled() || !_ahrs.airspeed_estimate(&_EAS)) { if (!(_use_synthetic_airspeed || _ahrs.airspeed_sensor_enabled()) || !_ahrs.airspeed_estimate(&_EAS)) {
// If no airspeed available use average of min and max // If no airspeed available use average of min and max
_EAS = 0.5f * (aparm.airspeed_min.get() + (float)aparm.airspeed_max.get()); _EAS = 0.5f * (aparm.airspeed_min.get() + (float)aparm.airspeed_max.get());
} }
@ -1034,9 +1034,14 @@ void AP_TECS::update_pitch_throttle(int32_t hgt_dem_cm,
// Calculate specific energy quantitiues // Calculate specific energy quantitiues
_update_energies(); _update_energies();
// Calculate throttle demand - use simple pitch to throttle if no airspeed sensor // Calculate throttle demand - use simple pitch to throttle if no
if (_ahrs.airspeed_sensor_enabled()) { // airspeed sensor.
// Note that caller can demand the use of
// synthetic airspeed for one loop if needed. This is required
// during QuadPlane transition when pitch is constrained
if (_ahrs.airspeed_sensor_enabled() || _use_synthetic_airspeed) {
_update_throttle_with_airspeed(); _update_throttle_with_airspeed();
_use_synthetic_airspeed = false;
} else { } else {
_update_throttle_without_airspeed(throttle_nudge); _update_throttle_without_airspeed(throttle_nudge);
} }

View File

@ -104,6 +104,11 @@ public:
_pitch_max_limit = pitch_limit; _pitch_max_limit = pitch_limit;
} }
// force use of synthetic airspeed for one loop
void use_synthetic_airspeed(void) {
_use_synthetic_airspeed = true;
}
// this supports the TECS_* user settable parameters // this supports the TECS_* user settable parameters
static const struct AP_Param::GroupInfo var_info[]; static const struct AP_Param::GroupInfo var_info[];
@ -306,6 +311,9 @@ private:
float SEB_delta; float SEB_delta;
} logging; } logging;
// use synthetic airspeed for next loop
bool _use_synthetic_airspeed;
// Update the airspeed internal state using a second order complementary filter // Update the airspeed internal state using a second order complementary filter
void _update_speed(float load_factor); void _update_speed(float load_factor);