|
|
|
@ -88,10 +88,6 @@ private:
@@ -88,10 +88,6 @@ private:
|
|
|
|
|
void autoLoop(const float dt) { |
|
|
|
|
autoPositionLoop(dt); |
|
|
|
|
autoAttitudeLoop(dt); |
|
|
|
|
|
|
|
|
|
// XXX currently auto loop not tested, so
|
|
|
|
|
// put vehicle in standby
|
|
|
|
|
_hal->setState(MAV_STATE_STANDBY); |
|
|
|
|
} |
|
|
|
|
void autoPositionLoop(float dt) { |
|
|
|
|
float cmdNorthTilt = pidPN.update(_nav->getPN(),_nav->getVN(),dt); |
|
|
|
@ -105,6 +101,11 @@ private:
@@ -105,6 +101,11 @@ private:
|
|
|
|
|
_cmdPitch = cmdEastTilt * trigCos - cmdNorthTilt * trigSin; |
|
|
|
|
_cmdRoll = -cmdEastTilt * trigSin + cmdNorthTilt * trigCos; |
|
|
|
|
// note that the north tilt is negative of the pitch
|
|
|
|
|
|
|
|
|
|
Serial.print(" trigSin: "); |
|
|
|
|
Serial.print(trigSin); |
|
|
|
|
Serial.print(" trigCos: "); |
|
|
|
|
Serial.print(trigCos); |
|
|
|
|
} |
|
|
|
|
_cmdYawRate = 0; |
|
|
|
|
|
|
|
|
@ -116,6 +117,34 @@ private:
@@ -116,6 +117,34 @@ private:
|
|
|
|
|
|
|
|
|
|
if (fabs(_cmdPitch) > 0.5) _thrustMix *= 1.13949393; |
|
|
|
|
else _thrustMix /= cos(_cmdPitch); |
|
|
|
|
|
|
|
|
|
//debug statements
|
|
|
|
|
Serial.print(" getPN: "); |
|
|
|
|
Serial.print(_nav->getPN()); |
|
|
|
|
Serial.print(" getPE: "); |
|
|
|
|
Serial.print(_nav->getPE()); |
|
|
|
|
Serial.print(" getPD: "); |
|
|
|
|
Serial.print(_nav->getPD()); |
|
|
|
|
Serial.print(" getVN: "); |
|
|
|
|
Serial.print(_nav->getVN()); |
|
|
|
|
Serial.print(" getVE: "); |
|
|
|
|
Serial.print(_nav->getVE()); |
|
|
|
|
Serial.print(" getVD: "); |
|
|
|
|
Serial.println(_nav->getVD()); |
|
|
|
|
//Serial.print("Roll: ");
|
|
|
|
|
//Serial.print(_cmdRoll);
|
|
|
|
|
//Serial.print(" Pitch");
|
|
|
|
|
//Serial.print(_cmdPitch);
|
|
|
|
|
//Serial.print(" YawRate");
|
|
|
|
|
//Serial.print(_cmdYawRate);
|
|
|
|
|
//Serial.print(" ThrustMix");
|
|
|
|
|
//Serial.print(_thrustMix);
|
|
|
|
|
//Serial.print(" North Tilt");
|
|
|
|
|
//Serial.print(cmdNorthTilt);
|
|
|
|
|
//Serial.print(" East Tilt");
|
|
|
|
|
//Serial.print(cmdEastTilt);
|
|
|
|
|
//Serial.print(" Down");
|
|
|
|
|
//Serial.println(cmdDown);
|
|
|
|
|
} |
|
|
|
|
void autoAttitudeLoop(float dt) { |
|
|
|
|
_rollMix = pidRoll.update(_cmdRoll - _nav->getRoll(), |
|
|
|
@ -123,8 +152,29 @@ private:
@@ -123,8 +152,29 @@ private:
|
|
|
|
|
_pitchMix = pidPitch.update(_cmdPitch - _nav->getPitch(), |
|
|
|
|
_nav->getPitchRate(), dt); |
|
|
|
|
_yawMix = pidYawRate.update(_cmdYawRate - _nav->getYawRate(), dt); |
|
|
|
|
|
|
|
|
|
//debug statements
|
|
|
|
|
//Serial.print("Roll Cmd: ");
|
|
|
|
|
//Serial.print(_cmdRoll*1000);
|
|
|
|
|
//Serial.print(" Nav_GetRoll: ");
|
|
|
|
|
//Serial.print(_nav->getRoll()*1000);
|
|
|
|
|
//Serial.print(" Roll Error: ");
|
|
|
|
|
//Serial.print((_cmdRoll - _nav->getRoll())*1000);
|
|
|
|
|
//Serial.print(" Pitch Cmd: ");
|
|
|
|
|
//Serial.print(_cmdPitch*1000);
|
|
|
|
|
//Serial.print(" Nav_GetPitch: ");
|
|
|
|
|
//Serial.print(_nav->getPitch()*1000);
|
|
|
|
|
//Serial.print(" Pitch Error: ");
|
|
|
|
|
//Serial.println((_cmdPitch - _nav->getPitch())*1000);
|
|
|
|
|
//Serial.print(" YawRate Cmd: ");
|
|
|
|
|
//Serial.print(_cmdYawRate);
|
|
|
|
|
//Serial.print(" Nav_GetYawRate: ");
|
|
|
|
|
//Serial.print( _nav->getYawRate());
|
|
|
|
|
//Serial.print(" YawRate Error: ");
|
|
|
|
|
//Serial.println(_cmdYawRate - _nav->getYawRate());
|
|
|
|
|
} |
|
|
|
|
void setMotorsActive() { |
|
|
|
|
|
|
|
|
|
// turn all motors off if below 0.1 throttle
|
|
|
|
|
if (fabs(_hal->rc[ch_thrust]->getRadioPosition()) < 0.1) { |
|
|
|
|
setAllRadioChannelsToNeutral(); |
|
|
|
|