euler.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #pragma once
  2. /* 欧拉角类型, 顺序 航向->俯仰->横滚 */
  3. typedef struct euler_angle {
  4. float yaw;
  5. float pitch;
  6. float roll;
  7. } euler_angle_t;
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. /**
  12. * @brief 通过 enu 框架下的 dcm 矩阵, 构造欧拉角
  13. *
  14. * @param dcm enu-rfu 框架下的旋转矩阵
  15. * @param euler 欧拉角, 顺序为航向轴->俯仰轴->横滚轴, 右手定则
  16. */
  17. void Euler_ByDcmEnu(const float dcm[3][3], euler_angle_t *euler);
  18. /**
  19. * @brief 通过 ned 框架下的 dcm 矩阵, 构造欧拉角
  20. *
  21. * @param dcm ned-frd 框架下的旋转矩阵
  22. * @param euler 欧拉角, 顺序为航向轴->俯仰轴->横滚轴, 右手定则
  23. */
  24. void Euler_ByDcmNed(const float dcm[3][3], euler_angle_t *euler);
  25. /**
  26. * @brief 通过 enu 框架下的四元数构造欧拉角
  27. *
  28. * @param Q enu-rfu 框架下的四元数
  29. * @param euler 欧拉角, 顺序为航向轴->俯仰轴->横滚轴, 右手定则
  30. */
  31. void Euler_ByQuaternionEnu(const float Q[4], euler_angle_t *euler);
  32. /**
  33. * @brief 通过 ned 框架下的四元数构造欧拉角
  34. *
  35. * @param Q ned-frd 框架下的四元数
  36. * @param euler 欧拉角, 顺序为航向轴->俯仰轴->横滚轴, 右手定则
  37. */
  38. void Euler_ByQuaternionNed(const float Q[4], euler_angle_t *euler);
  39. #ifdef __cplusplus
  40. }
  41. #endif