| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #pragma once
- /* 欧拉角类型, 顺序 航向->俯仰->横滚 */
- typedef struct euler_angle {
- float yaw;
- float pitch;
- float roll;
- } euler_angle_t;
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * @brief 通过 enu 框架下的 dcm 矩阵, 构造欧拉角
- *
- * @param dcm enu-rfu 框架下的旋转矩阵
- * @param euler 欧拉角, 顺序为航向轴->俯仰轴->横滚轴, 右手定则
- */
- void Euler_ByDcmEnu(const float dcm[3][3], euler_angle_t *euler);
- /**
- * @brief 通过 ned 框架下的 dcm 矩阵, 构造欧拉角
- *
- * @param dcm ned-frd 框架下的旋转矩阵
- * @param euler 欧拉角, 顺序为航向轴->俯仰轴->横滚轴, 右手定则
- */
- void Euler_ByDcmNed(const float dcm[3][3], euler_angle_t *euler);
- /**
- * @brief 通过 enu 框架下的四元数构造欧拉角
- *
- * @param Q enu-rfu 框架下的四元数
- * @param euler 欧拉角, 顺序为航向轴->俯仰轴->横滚轴, 右手定则
- */
- void Euler_ByQuaternionEnu(const float Q[4], euler_angle_t *euler);
- /**
- * @brief 通过 ned 框架下的四元数构造欧拉角
- *
- * @param Q ned-frd 框架下的四元数
- * @param euler 欧拉角, 顺序为航向轴->俯仰轴->横滚轴, 右手定则
- */
- void Euler_ByQuaternionNed(const float Q[4], euler_angle_t *euler);
- #ifdef __cplusplus
- }
- #endif
|