7 #define AC_PID_2D_FILT_HZ_DEFAULT 20.0f // default input filter frequency 8 #define AC_PID_2D_FILT_HZ_MIN 0.01f // minimum input filter frequency 9 #define AC_PID_2D_FILT_D_HZ_DEFAULT 10.0f // default input filter frequency 10 #define AC_PID_2D_FILT_D_HZ_MIN 0.005f // minimum input filter frequency 49 AC_PID_2D::AC_PID_2D(
float initial_p,
float initial_i,
float initial_d,
float initial_imax,
float initial_filt_hz,
float initial_filt_d_hz,
float dt) :
58 _imax = fabsf(initial_imax);
105 if (!isfinite(input.
x) || !isfinite(input.
y)) {
128 if (!isfinite(input_delta.
x) && !isfinite(input_delta.
y)) {
171 const float integrator_length_new = _integrator.length();
172 if ((integrator_length_new > integrator_length_orig) &&
is_positive(integrator_length_new)) {
173 _integrator *= (integrator_length_orig / integrator_length_new);
Vector2< float > Vector2f
void set_input(const Vector2f &input)
#define AC_PID_2D_FILT_D_HZ_MIN
#define AP_GROUPINFO(name, idx, clazz, element, def)
bool is_positive(const T fVal1)
AC_PID_2D(float initial_p, float initial_i, float initial_d, float initial_imax, float initial_filt_hz, float initial_filt_d_hz, float dt)
Generic PID algorithm, with EEPROM-backed storage of constants.
static auto MAX(const A &one, const B &two) -> decltype(one > two ? one :two)
static const struct AP_Param::GroupInfo var_info[]
bool is_zero(const T fVal1)
void set_input_filter_d(const Vector2f &input_delta)
Copter PID control class.
struct AC_PID_2D::ac_pid_flags _flags
DerivativeFilter< float, 11 > derivative
#define AC_PID_2D_FILT_D_HZ_DEFAULT
#define AC_PID_2D_FILT_HZ_MIN
#define AC_PID_2D_FILT_HZ_DEFAULT
static void setup_object_defaults(const void *object_pointer, const struct GroupInfo *group_info)