Path: blob/master/libraries/APM_Control/AP_FW_Controller.h
4232 views
#pragma once12#include <AP_Common/AP_Common.h>3#include "AP_AutoTune.h"4#include <AC_PID/AC_PID.h>56class AP_FW_Controller7{8public:9AP_FW_Controller(const AP_FixedWing &parms, const AC_PID::Defaults &defaults, AP_AutoTune::ATType _autotune_type);1011/* Do not allow copies */12CLASS_NO_COPY(AP_FW_Controller);1314float get_rate_out(float desired_rate, float scaler);15virtual float get_servo_out(int32_t angle_err, float scaler, bool disable_integrator, bool ground_mode) = 0;1617// setup a one loop FF scale multiplier. This replaces any previous scale applied18// so should only be used when only one source of scaling is needed19void set_ff_scale(float _ff_scale) { ff_scale = _ff_scale; }2021void reset_I();2223/*24reduce the integrator, used when we have a low scale factor in a quadplane hover25*/26void decay_I();2728void autotune_start(void);29void autotune_restore(void);3031const AP_PIDInfo& get_pid_info(void) const32{33return _pid_info;34}3536// set the PID notch sample rates37void set_notch_sample_rate(float sample_rate) { rate_pid.set_notch_sample_rate(sample_rate); }3839AP_Float &kP(void) { return rate_pid.kP(); }40AP_Float &kI(void) { return rate_pid.kI(); }41AP_Float &kD(void) { return rate_pid.kD(); }42AP_Float &kFF(void) { return rate_pid.ff(); }43AP_Float &tau(void) { return gains.tau; }4445protected:46const AP_FixedWing &aparm;47AP_AutoTune::ATGains gains;48AP_AutoTune *autotune;49bool failed_autotune_alloc;50float _last_out;51AC_PID rate_pid;52float angle_err_deg;53float ff_scale = 1.0;5455AP_PIDInfo _pid_info;5657float _get_rate_out(float desired_rate, float scaler, bool disable_integrator, float aspeed, bool ground_mode);5859virtual bool is_underspeed(const float aspeed) const = 0;6061virtual float get_airspeed() const = 0;6263virtual float get_measured_rate() const = 0;6465const AP_AutoTune::ATType autotune_type;66};676869