#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