0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言实现欧拉角转四元数

zhc135136 来源:SmartHWFW 2023-08-07 09:57 次阅读

1. 说在前面的话

2. 欧拉角

3. 欧拉角与四元数关系

4. Matlabe 欧拉角转四元数

5.C语言实现欧拉角转四元数

6. 获取资源

1. 说在前面的话

1)在介绍以下内容之前,我们假设读者已经对复数与2D旋转、3D空间中的旋转、四元数的性质以及四元数与3D旋转等数学理论有一定的阅读理解基础。

2)欧拉角与四元数姿态表示方法是目前工程上最常用的两种方法。欧拉角表示法具有简便、几何意义明显等优点,同时姿态敏感器可以直接测出这些参数,能较方便地求解用这些姿态参数描述的姿态动力学方程。但采用欧拉角的姿态描述方法存在奇点问题,且需多次三角运算。而采用四元数表示方法则可以避免这些问题,因此目前工程上开始采用四元数来描述飞行器运动及动力学方程中的姿态,而在设计控制规律时,由于欧拉角的直观性和几何意义,仍然采用欧拉角描述。

2. 欧拉角

根据欧拉定理,刚体绕固定点的位移也可以是绕该点的若干次有限转动的合成。在欧拉转动中,将载体坐标系转动三次得到导航坐标系。在三次转动中,每次的旋转轴是被转动坐标系的某一坐标轴,每次的转动角即为欧拉角。因此,用欧拉角确定的姿态矩阵是三次坐标转换矩阵的乘积。

最终的姿态矩阵还与三次转动的顺序有关,下面公式采用3-2-1顺序,即按照Z-Y-X轴的顺序旋转(东北地坐标系(对应的载体坐标系前右下)):

4a947fe4-3466-11ee-9e74-dac502259ad0.png

于是可得姿态矩阵

4aac1be0-3466-11ee-9e74-dac502259ad0.png

式中,字符"c","s"分别为"cos"和"sin"的缩写形式。

3. 欧拉角与四元数关系

根据四元数的定义,可以将欧拉角式转换为四元数,以欧拉3-2-1转动为例:第一次先绕Z轴转动,φ = θ =0,

四元数表示为:

4ad3f91c-3466-11ee-9e74-dac502259ad0.png

第二次先绕Y轴转动,φ = ψ = 0,

四元数表示为:

4ae80aba-3466-11ee-9e74-dac502259ad0.png

第三次先绕X轴转动,θ = ψ = 0,

四元数表示为:

4afdcb16-3466-11ee-9e74-dac502259ad0.png

则,绕三轴转动的合成为

4b1abfc8-3466-11ee-9e74-dac502259ad0.png

4b27b0e8-3466-11ee-9e74-dac502259ad0.png

该转换方法在360±°内均有效,是一对一的关系。

4. MATLAB 欧拉角转四元数

4b524218-3466-11ee-9e74-dac502259ad0.png

4b7da5e8-3466-11ee-9e74-dac502259ad0.png

5. C语言实现欧拉角转四元数

欧拉角转四元数的步骤如下:

STEP1:确定每个欧拉角的轴和旋转角度。Yaw对应y轴,Pitch对应x轴,Roll对应z轴。记为yaw_angle,pitch_angle和roll_angle。

STEP2:分别根据每个欧拉角的旋转轴和旋转角度,构造旋转四元数的各个分量。以yaw_angle为例,qw = cos(yaw_angle/2)qx = 0qy = sin(yaw_angle/2)qz = 0

同样地,根据pitch_angle和roll_angle可以得到对应的旋转四元数分量。

STEP3:根据旋转四元数的分量,构造最终的旋转四元数。旋转四元数的分量为(qw, qx, qy, qz)。

请注意,欧拉角到四元数的转换是一个多对一的映射,即不同的欧拉角可能对应相同的旋转四元数。因此,在实际应用中,可能需要根据具体需求选择适合的欧拉角表示方式。

校验结果:

4b944096-3466-11ee-9e74-dac502259ad0.png

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    186

    文章

    2986

    浏览量

    231590
  • C语言
    +关注

    关注

    180

    文章

    7618

    浏览量

    138512
  • 飞行器
    +关注

    关注

    13

    文章

    729

    浏览量

    45775
  • 欧拉角
    +关注

    关注

    0

    文章

    5

    浏览量

    6790

原文标题:MEMS_惯性传感器程序集02-欧拉角转四元数

文章出处:【微信号:SmartHWFW,微信公众号:SmartHWFW】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    欧拉角之间的转换

    欧拉角之间的转换
    发表于 08-17 12:08

    飞控姿态解算中,欧拉角之间的转换

    //欧拉角void cjx_from_euler(float roll, float pitch, float yaw){ floa
    发表于 11-17 13:09

    请问我用欧拉角造成的这些问题该怎么解决?

    我用欧拉角的时候出现了一些问题。我是按偏航,俯仰,横滚的顺序解算的,动作是三个轴依次3
    发表于 06-26 04:37

    基于Proteus和C语言实现

    基于Proteus和C语言实现一共个题目,有没有人愿意尝试一下?
    发表于 07-14 06:20

    旋转矩阵、欧拉角比较

    MPU的旋转矩阵 欧拉角比较,能够帮助新手了解三者的不同之处
    发表于 12-08 11:41 55次下载

    DSP算法的c语言实现

    DSP算法的c语言实现,又需要的朋友下来看看。
    发表于 05-09 10:59 0次下载

    PID控制算法的C语言实现(完整版)

    PID控制算法的C语言实现一 PID算法原理
    发表于 11-05 15:45 0次下载

    4个重要算法C语言实现源代码

    4个重要算法C语言实现源代码
    发表于 06-10 08:00 13次下载

    如何使用C语言实现一个比较简单的猜游戏的程序免费下载

    本文档的主要内容详细介绍的是如何使用C语言实现一个比较简单的猜游戏的程序免费下载
    发表于 04-24 18:31 0次下载
    如何使用<b class='flag-5'>C</b><b class='flag-5'>语言实现</b>一个比较简单的猜<b class='flag-5'>数</b>游戏的程序免费下载

    MPU6050传感器的欧拉角程序免费下载

    本文档的主要内容详细介绍的是MPU6050传感器的欧拉角程序免费下载。
    发表于 08-30 17:29 23次下载
    MPU6050传感器的<b class='flag-5'>四</b><b class='flag-5'>元</b><b class='flag-5'>数</b><b class='flag-5'>欧拉角</b>程序免费下载

    如何将转化为欧拉角

    转化为欧拉角: 1. 初始姿态的(w,
    发表于 12-05 17:03 13次下载
    如何将<b class='flag-5'>四</b><b class='flag-5'>元</b><b class='flag-5'>数</b>转化为<b class='flag-5'>欧拉角</b>

    使用单片机实现并数字芯片测试的C语言实例免费下载

    本文档的主要内容详细介绍的是使用单片机实现并数字芯片测试的C语言实例免费下载。
    发表于 03-29 11:48 3次下载

    使用单片机实现PCF8591换器应用的C语言实

    本文档的主要内容详细介绍的是使用单片机实现PCF8591换器应用的C语言实例免费下载。
    发表于 03-31 14:45 12次下载

    累加校验和C语言实现

    累加校验和C语言实现
    发表于 11-29 18:06 10次下载
    累加校验和<b class='flag-5'>C</b><b class='flag-5'>语言实现</b>

    怎么用C语言实现多态

    这里我想主要介绍下在C语言中是如何实现的面向对象。知道了C语言实现面向对象的方式,我们再联想下,C
    的头像 发表于 10-12 09:12 2142次阅读