Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. // Quaternion calculation of error in each axis. Uses more memory.
  2. float rpy_desired[3];
  3. float q_desired[4];
  4. float q_error[4];
  5. float local_error[3];
  6.  
  7. // Essentially zero errors for anything in rate or none
  8. if(stabDesired.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_ROLL] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE)
  9. rpy_desired[0] = stabDesired.Roll;
  10. else
  11. rpy_desired[0] = attitudeActual.Roll;
  12.  
  13. if(stabDesired.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_PITCH] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE)
  14. rpy_desired[1] = stabDesired.Pitch;
  15. else
  16. rpy_desired[1] = attitudeActual.Pitch;
  17.  
  18. if(stabDesired.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_YAW] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE)
  19. rpy_desired[2] = stabDesired.Yaw;
  20. else
  21. rpy_desired[2] = attitudeActual.Yaw;
  22.  
  23. RPY2Quaternion(rpy_desired, q_desired);
  24. quat_inverse(q_desired);
  25. quat_mult(q_desired, &attitudeActual.q1, q_error);
  26. quat_inverse(q_error);
  27. Quaternion2RPY(q_error, local_error);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement