|
|
|
@ -21,13 +21,13 @@ public:
@@ -21,13 +21,13 @@ public:
|
|
|
|
|
AP_Controller(nav, guide, hal, new AP_ArmingMechanism(hal,this,ch_thrust,ch_yaw,0.1,-0.9,0.9), ch_mode, k_cntrl), |
|
|
|
|
pidRoll(new AP_Var_group(k_pidRoll, PSTR("ROLL_")), 1, |
|
|
|
|
PID_ATT_P, PID_ATT_I, PID_ATT_D, PID_ATT_AWU, |
|
|
|
|
PID_ATT_LIM, PID_ATT_DFCUT), |
|
|
|
|
PID_ATT_LIM), |
|
|
|
|
pidPitch(new AP_Var_group(k_pidPitch, PSTR("PITCH_")), 1, |
|
|
|
|
PID_ATT_P, PID_ATT_I, PID_ATT_D, PID_ATT_AWU, |
|
|
|
|
PID_ATT_LIM, PID_ATT_DFCUT), |
|
|
|
|
PID_ATT_LIM), |
|
|
|
|
pidYaw(new AP_Var_group(k_pidYaw, PSTR("YAW_")), 1, |
|
|
|
|
PID_YAWPOS_P, PID_YAWPOS_I, PID_YAWPOS_D, |
|
|
|
|
PID_YAWPOS_AWU, PID_YAWPOS_LIM, PID_ATT_DFCUT), |
|
|
|
|
PID_YAWPOS_AWU, PID_YAWPOS_LIM), |
|
|
|
|
pidYawRate(new AP_Var_group(k_pidYawRate, PSTR("YAWRT_")), 1, |
|
|
|
|
PID_YAWSPEED_P, PID_YAWSPEED_I, PID_YAWSPEED_D, |
|
|
|
|
PID_YAWSPEED_AWU, PID_YAWSPEED_LIM, PID_YAWSPEED_DFCUT), |
|
|
|
@ -36,7 +36,7 @@ public:
@@ -36,7 +36,7 @@ public:
|
|
|
|
|
pidTilt(new AP_Var_group(k_pidTilt, PSTR("TILT_")), 1, PID_TILT_P, |
|
|
|
|
PID_TILT_I, PID_TILT_D, PID_TILT_AWU, PID_TILT_LIM, PID_TILT_DFCUT), |
|
|
|
|
pidPD(new AP_Var_group(k_pidPD, PSTR("DOWN_")), 1, PID_POS_Z_P, |
|
|
|
|
PID_POS_Z_I, PID_POS_Z_D, PID_POS_Z_AWU, PID_POS_Z_LIM, PID_POS_Z_DFCUT), |
|
|
|
|
PID_POS_Z_I, PID_POS_Z_D, PID_POS_Z_AWU, PID_POS_Z_LIM), |
|
|
|
|
_thrustMix(0), _pitchMix(0), _rollMix(0), _yawMix(0), |
|
|
|
|
_cmdRoll(0), _cmdPitch(0), _cmdYawRate(0) { |
|
|
|
|
_hal->debug->println_P(PSTR("initializing quad controller")); |
|
|
|
@ -91,7 +91,7 @@ private:
@@ -91,7 +91,7 @@ private:
|
|
|
|
|
} |
|
|
|
|
void autoPositionLoop(float dt) { |
|
|
|
|
float cmdSpeed = pidSpeed.update(_guide->getGroundSpeedError(),dt); |
|
|
|
|
float cmdDown = pidPD.update(_guide->getPDError(),_nav->getVD(),dt); |
|
|
|
|
float cmdDown = pidPD.update(_guide->getPDError(),-_nav->getVD(),dt); |
|
|
|
|
|
|
|
|
|
// tilt based control
|
|
|
|
|
float cmdTilt = pidTilt.update(_guide->getDistanceToNextWaypoint(),dt); |
|
|
|
@ -102,7 +102,7 @@ private:
@@ -102,7 +102,7 @@ private:
|
|
|
|
|
_cmdPitch -= cmdSpeed*cos(_nav->getRelativeCourseOverGround());
|
|
|
|
|
_cmdRoll += cmdSpeed*sin(_nav->getRelativeCourseOverGround()); |
|
|
|
|
|
|
|
|
|
_cmdYawRate = pidYaw.update(_guide->getYawError(),_nav->getYawRate(),dt); // always points to next waypoint
|
|
|
|
|
_cmdYawRate = pidYaw.update(_guide->getYawError(),-_nav->getYawRate(),dt); // always points to next waypoint
|
|
|
|
|
_thrustMix = THRUST_HOVER_OFFSET - cmdDown; |
|
|
|
|
|
|
|
|
|
// "thrust-trim-adjust"
|
|
|
|
@ -117,9 +117,9 @@ private:
@@ -117,9 +117,9 @@ private:
|
|
|
|
|
} |
|
|
|
|
void autoAttitudeLoop(float dt) { |
|
|
|
|
_rollMix = pidRoll.update(_cmdRoll - _nav->getRoll(), |
|
|
|
|
_nav->getRollRate(), dt); |
|
|
|
|
-_nav->getRollRate(), dt); |
|
|
|
|
_pitchMix = pidPitch.update(_cmdPitch - _nav->getPitch(), |
|
|
|
|
_nav->getPitchRate(), dt); |
|
|
|
|
-_nav->getPitchRate(), dt); |
|
|
|
|
_yawMix = pidYawRate.update(_cmdYawRate - _nav->getYawRate(), dt); |
|
|
|
|
} |
|
|
|
|
void setMotors() { |
|
|
|
|