mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-07-27 00:48:23 +08:00
fix(fw_latlon): align airspeed load factor (#27519)
This commit is contained in:
@@ -607,13 +607,13 @@ void FwLateralLongitudinalControl::updateAttitude() {
|
||||
_long_control_state.pitch_rad = euler_angles.theta();
|
||||
_yaw = euler_angles.psi();
|
||||
|
||||
const float load_factor_from_bank_angle = 1.0f / max(cosf(euler_angles.phi()), FLT_EPSILON);
|
||||
_load_factor_from_bank_angle = 1.0f / max(cosf(euler_angles.phi()), FLT_EPSILON);
|
||||
|
||||
// Used to compensate for higher induced drag during banking
|
||||
_tecs.set_load_factor(load_factor_from_bank_angle);
|
||||
_tecs.set_load_factor(_load_factor_from_bank_angle);
|
||||
// Used to give underspeed mitigation the correct minimum airspeed
|
||||
_tecs.set_equivalent_airspeed_min(
|
||||
_performance_model.getMinimumCalibratedAirspeed(load_factor_from_bank_angle, _flaps_setpoint)
|
||||
_performance_model.getMinimumCalibratedAirspeed(_load_factor_from_bank_angle, _flaps_setpoint)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -649,7 +649,7 @@ float
|
||||
FwLateralLongitudinalControl::adapt_airspeed_setpoint(const float control_interval, float calibrated_airspeed_setpoint,
|
||||
float calibrated_min_airspeed_guidance, float wind_speed)
|
||||
{
|
||||
float system_min_airspeed = _performance_model.getMinimumCalibratedAirspeed(getLoadFactor(), _flaps_setpoint);
|
||||
float system_min_airspeed = _performance_model.getMinimumCalibratedAirspeed(_load_factor_from_bank_angle, _flaps_setpoint);
|
||||
|
||||
const float system_max_airspeed = _performance_model.getMaximumCalibratedAirspeed();
|
||||
|
||||
@@ -853,19 +853,6 @@ void FwLateralLongitudinalControl::updateLongitudinalControlConfiguration(const
|
||||
}
|
||||
}
|
||||
|
||||
float FwLateralLongitudinalControl::getLoadFactor() const
|
||||
{
|
||||
float load_factor_from_bank_angle = 1.f;
|
||||
|
||||
const float roll_body = Eulerf(Quatf(_att_sp.q_d)).phi();
|
||||
|
||||
if (PX4_ISFINITE(roll_body)) {
|
||||
load_factor_from_bank_angle = 1.f / math::max(cosf(roll_body), FLT_EPSILON);
|
||||
}
|
||||
|
||||
return load_factor_from_bank_angle;
|
||||
}
|
||||
|
||||
extern "C" __EXPORT int fw_lat_lon_control_main(int argc, char *argv[])
|
||||
{
|
||||
return ModuleBase::main(FwLateralLongitudinalControl::desc, argc, argv);
|
||||
|
||||
@@ -201,6 +201,7 @@ private:
|
||||
vehicle_attitude_setpoint_s _att_sp{};
|
||||
bool _landed{false};
|
||||
float _can_run_factor{0.f};
|
||||
float _load_factor_from_bank_angle{1.f};
|
||||
SlewRate<float> _airspeed_slew_rate_controller;
|
||||
|
||||
perf_counter_t _loop_perf; // loop performance counter
|
||||
@@ -248,8 +249,6 @@ private:
|
||||
|
||||
void updateControllerConfiguration(hrt_abstime now);
|
||||
|
||||
float getLoadFactor() const;
|
||||
|
||||
/**
|
||||
* @brief Returns an adapted calibrated airspeed setpoint
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user