rotation.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. #include "rotation.h"
  2. #include "helpler_funtions.h"
  3. void rotation_to_dcm(enum Rotation rotation, float dcm[3][3]) {
  4. float yaw = 0.f, roll = 0.f, pitch = 0.f;
  5. switch (rotation) {
  6. case ROTATION_NONE:
  7. break;
  8. case ROTATION_YAW_45:
  9. yaw = 45;
  10. break;
  11. case ROTATION_YAW_90:
  12. yaw = 90;
  13. break;
  14. case ROTATION_YAW_135:
  15. yaw = 135;
  16. break;
  17. case ROTATION_YAW_180:
  18. yaw = 180;
  19. break;
  20. case ROTATION_YAW_225:
  21. yaw = 225;
  22. break;
  23. case ROTATION_YAW_270:
  24. yaw = 270;
  25. break;
  26. case ROTATION_YAW_315:
  27. yaw = 315;
  28. break;
  29. case ROTATION_ROLL_180:
  30. roll = 180;
  31. break;
  32. case ROTATION_ROLL_180_YAW_45:
  33. roll = 180;
  34. yaw = 45;
  35. break;
  36. case ROTATION_ROLL_180_YAW_90:
  37. roll = 180;
  38. yaw = 90;
  39. break;
  40. case ROTATION_PITCH_180_YAW_270:
  41. pitch = 180;
  42. yaw = 270;
  43. break;
  44. case ROTATION_ROLL_180_YAW_135:
  45. roll = 180;
  46. yaw = 135;
  47. break;
  48. case ROTATION_PITCH_180:
  49. pitch = 180;
  50. break;
  51. case ROTATION_ROLL_180_YAW_225:
  52. roll = 180;
  53. yaw = 225;
  54. break;
  55. case ROTATION_ROLL_180_YAW_270:
  56. roll = 180;
  57. yaw = 270;
  58. break;
  59. case ROTATION_PITCH_180_YAW_90:
  60. pitch = 180;
  61. yaw = 90;
  62. break;
  63. case ROTATION_ROLL_180_YAW_315:
  64. roll = 180;
  65. yaw = 315;
  66. break;
  67. case ROTATION_ROLL_90:
  68. roll = 90;
  69. break;
  70. case ROTATION_ROLL_90_YAW_45:
  71. roll = 90;
  72. yaw = 45;
  73. break;
  74. case ROTATION_ROLL_90_YAW_90:
  75. roll = 90;
  76. yaw = 90;
  77. break;
  78. case ROTATION_ROLL_90_YAW_135:
  79. roll = 90;
  80. yaw = 135;
  81. break;
  82. case ROTATION_ROLL_270:
  83. roll = 270;
  84. break;
  85. case ROTATION_ROLL_270_YAW_45:
  86. roll = 270;
  87. yaw = 45;
  88. break;
  89. case ROTATION_ROLL_270_YAW_90:
  90. roll = 270;
  91. yaw = 90;
  92. break;
  93. case ROTATION_ROLL_270_YAW_135:
  94. roll = 270;
  95. yaw = 135;
  96. break;
  97. case ROTATION_PITCH_90:
  98. pitch = 90;
  99. break;
  100. case ROTATION_PITCH_270:
  101. pitch = 270;
  102. break;
  103. case ROTATION_ROLL_90_PITCH_90:
  104. roll = 90;
  105. pitch = 90;
  106. break;
  107. case ROTATION_ROLL_180_PITCH_90:
  108. roll = 180;
  109. pitch = 90;
  110. break;
  111. case ROTATION_ROLL_270_PITCH_90:
  112. roll = 270;
  113. pitch = 90;
  114. break;
  115. case ROTATION_ROLL_90_PITCH_180:
  116. roll = 90;
  117. pitch = 180;
  118. break;
  119. case ROTATION_ROLL_270_PITCH_180:
  120. roll = 270;
  121. pitch = 180;
  122. break;
  123. case ROTATION_ROLL_90_PITCH_270:
  124. roll = 90;
  125. pitch = 270;
  126. break;
  127. case ROTATION_ROLL_180_PITCH_270:
  128. roll = 180;
  129. pitch = 270;
  130. break;
  131. case ROTATION_ROLL_270_PITCH_270:
  132. roll = 270;
  133. pitch = 270;
  134. break;
  135. case ROTATION_ROLL_90_PITCH_180_YAW_90:
  136. roll = 90;
  137. pitch = 180;
  138. yaw = 90;
  139. break;
  140. case ROTATION_ROLL_90_YAW_270:
  141. roll = 90;
  142. yaw = 270;
  143. break;
  144. case ROTATION_ROLL_90_PITCH_68_YAW_293:
  145. roll = 90;
  146. pitch = 68;
  147. yaw = 293;
  148. break;
  149. case ROTATION_PITCH_315:
  150. pitch = 315;
  151. break;
  152. case ROTATION_ROLL_90_PITCH_315:
  153. roll = 90;
  154. pitch = 315;
  155. break;
  156. case ROTATION_PITCH_7:
  157. pitch = 7;
  158. break;
  159. case ROTATION_ROLL_45:
  160. roll = 45;
  161. break;
  162. case ROTATION_ROLL_315:
  163. roll = 315;
  164. break;
  165. default:
  166. break;;
  167. }
  168. roll *= DEG_TO_RAD;
  169. pitch *= DEG_TO_RAD;
  170. yaw *= DEG_TO_RAD;
  171. DCM_Enu_ByEuler(-yaw, pitch, roll, dcm);
  172. }