96 if (_last_t == 0 || dt > 1000) {
106 float k_ff =
gains.
FF / eas2tas;
107 float delta_time = (float)dt * 0.001
f;
120 float achieved_rate =
ToDeg(omega_x);
121 float rate_error = (desired_rate - achieved_rate) * scaler;
133 if (!disable_integrator && ki_rate > 0) {
136 float integrator_delta = rate_error * ki_rate * delta_time * scaler;
139 integrator_delta =
MAX(integrator_delta , 0);
142 integrator_delta =
MIN(integrator_delta, 0);
210 float desired_rate = angle_err * 0.01f /
gains.
tau;
212 return _get_rate_out(desired_rate, scaler, disable_integrator);
virtual const Vector3f & get_gyro(void) const =0
int32_t get_rate_out(float desired_rate, float scaler)
void update(float desired_rate, float achieved_rate, float servo_out)
#define AP_GROUPINFO(name, idx, clazz, element, def)
virtual bool airspeed_estimate(float *airspeed_ret) const
AP_AutoTune::ATGains gains
static auto MAX(const A &one, const B &two) -> decltype(one > two ? one :two)
int32_t get_servo_out(int32_t angle_err, float scaler, bool disable_integrator)
int32_t _get_rate_out(float desired_rate, float scaler, bool disable_integrator)
float constrain_float(const float amt, const float low, const float high)
const AP_Vehicle::FixedWing & aparm
static const struct AP_Param::GroupInfo var_info[]
DataFlash_Class::PID_Info _pid_info
float get_EAS2TAS(void) const
const AP_HAL::HAL & hal
-*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-