// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*- #pragma once /// @file AC_AttitudeControl_Multi.h /// @brief ArduCopter attitude control library #include "AC_AttitudeControl.h" #include // default rate controller PID gains #ifndef AC_ATC_MULTI_RATE_RP_P # define AC_ATC_MULTI_RATE_RP_P 0.135f #endif #ifndef AC_ATC_MULTI_RATE_RP_I # define AC_ATC_MULTI_RATE_RP_I 0.090f #endif #ifndef AC_ATC_MULTI_RATE_RP_D # define AC_ATC_MULTI_RATE_RP_D 0.0036f #endif #ifndef AC_ATC_MULTI_RATE_RP_IMAX # define AC_ATC_MULTI_RATE_RP_IMAX 0.444f #endif #ifndef AC_ATC_MULTI_RATE_RP_FILT_HZ # define AC_ATC_MULTI_RATE_RP_FILT_HZ 20.0f #endif #ifndef AC_ATC_MULTI_RATE_YAW_P # define AC_ATC_MULTI_RATE_YAW_P 0.180f #endif #ifndef AC_ATC_MULTI_RATE_YAW_I # define AC_ATC_MULTI_RATE_YAW_I 0.018f #endif #ifndef AC_ATC_MULTI_RATE_YAW_D # define AC_ATC_MULTI_RATE_YAW_D 0.0f #endif #ifndef AC_ATC_MULTI_RATE_YAW_IMAX # define AC_ATC_MULTI_RATE_YAW_IMAX 0.222f #endif #ifndef AC_ATC_MULTI_RATE_YAW_FILT_HZ # define AC_ATC_MULTI_RATE_YAW_FILT_HZ 5.0f #endif class AC_AttitudeControl_Multi : public AC_AttitudeControl { public: AC_AttitudeControl_Multi(AP_AHRS &ahrs, const AP_Vehicle::MultiCopter &aparm, AP_MotorsMulticopter& motors, float dt); // empty destructor to suppress compiler warning virtual ~AC_AttitudeControl_Multi() {} // pid accessors AC_PID& get_rate_roll_pid() { return _pid_rate_roll; } AC_PID& get_rate_pitch_pid() { return _pid_rate_pitch; } AC_PID& get_rate_yaw_pid() { return _pid_rate_yaw; } // get lean angle max for pilot input that prioritises altitude hold over lean angle float get_althold_lean_angle_max() const; // calculate total body frame throttle required to produce the given earth frame throttle float get_boosted_throttle(float throttle_in); // user settable parameters static const struct AP_Param::GroupInfo var_info[]; protected: AP_MotorsMulticopter& _motors_multi; AC_PID _pid_rate_roll; AC_PID _pid_rate_pitch; AC_PID _pid_rate_yaw; };