You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.2 KiB
70 lines
2.2 KiB
// -*- 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 <AP_Motors/AP_MotorsMulticopter.h> |
|
|
|
// 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; |
|
};
|
|
|