Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. float *attitudeDesiredAxis = &stabDesired.Roll;
  2. float *attitudeActualAxis = &attitudeActual.Roll;
  3. float *actuatorDesiredAxis = &actuatorDesired.Roll;
  4. float *rateDesiredAxis = &rateDesired.Roll;
  5.  
  6.  
  7. #if defined(PIOS_QUATERNION_STABILIZATION)
  8. // Quaternion calculation of error in each axis. Uses more memory.
  9. float rpy[3];
  10. float q_desired[4];
  11. float q_curr[4];
  12. float q_error[4];
  13. float local_error[3];
  14.  
  15. // fix non used axis to provoke 0 error
  16. for(int8_t ct=0; ct< MAX_AXES; ct++)
  17. {
  18. switch(stabDesired.StabilizationMode[ct])
  19. {
  20. case STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE:
  21. rpy[ct] = attitudeDesiredAxis[ct];
  22. break;
  23. default:
  24. rpy[ct] = attitudeActualAxis[ct];
  25. break;
  26. }
  27. }
  28. printf(" we go to %f %f %f \n",rpy[0],rpy[1],rpy[2]);
  29. // Compute stabilization error as (q_desired' * q_current)', convert to RPY
  30. RPY2Quaternion(rpy, q_desired);
  31. quat_copy(&attitudeActual.q1, q_curr);
  32. quat_inverse(q_desired);
  33. quat_mult(q_desired, q_curr, q_error);
  34. quat_inverse(q_error);
  35. Quaternion2RPY(q_error, local_error);
  36.  
  37. #else
  38. // Simpler algorithm for CC, less memory
  39. float local_error[3] = {attitudeActual.Roll - stabDesired.Roll,
  40. attitudeActual.Pitch - stabDesired.Pitch,
  41. attitudeActual.Yaw - stabDesired.Yaw};
  42. local_error[2] = fmod(local_error[2] + 180, 360) - 180;
  43. #endif
  44.  
  45. //Calculate desired rate
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement