欧拉角,轴角,四元数与旋转矩阵详解

这篇具有很好参考价值的文章主要介绍了欧拉角,轴角,四元数与旋转矩阵详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。

目录

一、欧拉角

1、静态定义

2、欧拉角的表示

 3、欧拉角表示的优缺点

 4、欧拉角的万向节死锁(静态不存在万向锁的问题)

二、四元数

1、提出意义和定义 (含轴角)

2、四元数的相关计算法则

3、四元数的极形式

4、四元数的使用举例

5、四元数的优缺点

三、四元数和欧拉角间的相互转化

1、四元数转为欧拉角

2、欧拉角转为四元数

四、旋转矩阵


一、欧拉角

1、静态定义

对于在三维空间里的一个参考系,任何坐标系的取向,都可以用三个欧拉角来表现。

🌳参考系又称为实验室参考系,是静止不动的。

🌳坐标系则固定于刚体,随着刚体的旋转而旋转。

来一个经典的示例:

设定xyz-轴为参考系的参考轴(即下图蓝色部分)。称xy-平面与XY-平面的相交为交点线,用英文字母(N)代表。zxz顺规的欧拉角可以静态地这样定义:

α 是 x-轴与交点线的夹角,
β 是z-轴与Z-轴的夹角,
γ 是交点线与X-轴的夹角。

欧拉角,笔记,数学,旋转,欧拉角,四元数

 但是对于夹角的顺序和标记,夹角的两个轴的指定,并没有任何常规规定。所以每当用到欧拉角时,我们必须明确表示出夹角的顺序,指定其参考轴

2、欧拉角的表示

首先绕z轴转动α角(如左图),然后是绕X’轴转动β角(如中间的图),最后是绕Z’轴转动γ角(如右图),这是zxz顺规(先绕z轴,再绕x轴再绕z‘轴)的欧拉角表示方法。(除了zxz顺规外还有其他的规定方法,如xyx,zyz。这里不做详述)

欧拉角,笔记,数学,旋转,欧拉角,四元数欧拉角,笔记,数学,旋转,欧拉角,四元数欧拉角,笔记,数学,旋转,欧拉角,四元数

 欧拉角包括3个旋转,根据这3个旋转来指定一个刚体的朝向。这3个旋转分别绕x轴,y轴和z轴,分别称为 Pitch,Yaw 和 Roll。

 欧拉角,笔记,数学,旋转,欧拉角,四元数

 3、欧拉角表示的优缺点

🌳优点:

(1)欧拉角由三个角度组成,直观,容易理解。

(2)可以进行从一个方向到另一个方向旋转大于180度的角度。

🌳缺点:

(1)欧拉角是不可传递的,旋转的顺序影响旋转的结果,不同的应用又可能使用不同的旋转顺序,旋转顺序无法统一;

(2)3个旋转的角度可以不受限制,即取值范围是(-inf,inf);

(3)可能造成万向节死锁

 4、欧拉角的万向节死锁(静态不存在万向锁的问题)

 对于动态欧拉角(绕物体坐标系旋转),无论绕第一,三个轴转动的旋转角为多少度,只要绕第二个轴的旋转角为±90°,就会出现万向锁现象。

万向锁现象:一旦选择±90°作为pitch角,就会导致第一次旋转和第三次旋转等价,整个旋转表示系统被限制在只能绕竖直轴旋转,丢失了一个表示维度。

来个例子:

比如说我们先绕z轴转任意角度,得到下图对吧

欧拉角,笔记,数学,旋转,欧拉角,四元数

然后咱们再绕y轴转90度,得到下图(此时Z’轴在蓝色的x-y平面上)

欧拉角,笔记,数学,旋转,欧拉角,四元数

 然后无论我们如何绕X‘轴转动,Z’轴始终在蓝色的x-y平面上,就像是被锁住了一样。

 万向锁的避免问题:限制旋转的角度范围——绕第一个轴转动的旋转角限制在±180°间;绕第二个轴限制范围在±90°间。


二、四元数

1、提出意义和定义 (含轴角)

🌳提出意义:上述欧拉角是多次旋转后才能得到,那么为什么不一步到位,只旋转一次呢?那么四元数应运而生。

🌳定义:

对于一个物体的旋转,我们只需要知道四个值:一个旋转的向量 + 一个旋转的角度。而四元数也正是这样的设计:

其中x,y,z 代表的是向量的三维坐标,w代表的是角度

其实,四元数本质上是一个超复数:

欧拉角,笔记,数学,旋转,欧拉角,四元数

🌳轴角

  ——这种一个轴向量(单位向量)加一个绕转角度的表示方式是轴角表示方法。

轴角最大的一个局限就是不能进行简单的插值;

此外,轴角形式的旋转不能直接施于点或矢量,必转换为矩阵或者四元数。

2、四元数的相关计算法则

(1)加法

欧拉角,笔记,数学,旋转,欧拉角,四元数

(2)乘法

欧拉角,笔记,数学,旋转,欧拉角,四元数

单位四元数——为了表示方便,常规定:

欧拉角,笔记,数学,旋转,欧拉角,四元数

此时复数乘法可以表示为:

欧拉角,笔记,数学,旋转,欧拉角,四元数

 也可以表示为矩阵形式

欧拉角,笔记,数学,旋转,欧拉角,四元数

(3)共轭 ——  

3、四元数的极形式

其中 ||q|| 代表了四元数的模,单位四元数模为1,而θ是四元数表示的旋转过程的半角大小,也就是说2θ就是旋转角大小,n则是表示旋转轴方向的单位向量。

4、四元数的使用举例

一个向量:v1,要让它绕 v2 旋转θ度(顺时针转动)

那么有p = (v1, 0); q = ( v2 * sin(θ/2) , cos(θ/2) )

旋转后的四元数为(得到的四元数实部为0,虚部为新的坐标):

5、四元数的优缺点

🌳优点:

  • 存储空间小,计算效率高。
  • 四元旋转不存在万向节锁问题。

🌳缺点:

  • 四元数的数字表示不直观。
  • 单个四元数不能表示在任何方向上超过180度的旋转。

三、四元数和欧拉角间的相互转化

1、四元数转为欧拉角

设定—— 欧拉角,笔记,数学,旋转,欧拉角,四元数

欧拉角,笔记,数学,旋转,欧拉角,四元数

2、欧拉角转为四元数

我们设欧拉角,笔记,数学,旋转,欧拉角,四元数

 则有:

欧拉角,笔记,数学,旋转,欧拉角,四元数


四、旋转矩阵

假设绕XYZ三个轴旋转的角度分别为 α ,β ,γ   ,则三次旋转的旋转矩阵计算方法如下:

若按Z-Y-X旋转顺序(指先绕自身轴Z,再绕自身轴Y,最后绕自身轴X),则旋转矩阵为:


欢迎大家在评论区中批评指正,谢谢~文章来源地址https://www.toymoban.com/news/detail-798097.html

到了这里,关于欧拉角,轴角,四元数与旋转矩阵详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 四元数,旋转矩阵,欧拉角互转(python)

    运行代码之前需要安装pyquaternion和scipy。 pip install pyquaternion pip install scipy 代码之前放下面,main函数有使用的方式

    2024年02月12日
    浏览(42)
  • 转换矩阵、平移矩阵、旋转矩阵关系以及python实现旋转矩阵、四元数、欧拉角之间转换

    由于在平时总是或多或少的遇到平移旋转的问题,每次都是现查资料,然后查了忘,忘了继续查,这次弄明白之后干脆写一篇文章,给人方便同时于己方便,后续如有扩充或变动也方便添加。 假设有两个向量 a 1 = ( x 1 , y 1 , z 1 ) a_1 = (x_1, y_1, z_1) a 1 ​ = ( x 1 ​ , y 1 ​ , z 1 ​

    2024年02月03日
    浏览(77)
  • 【Eigen库使用】角轴、旋转矩阵、欧拉角、四元数转换

    在slam中经常用到的四种描述机器人orientation的变量,他们之间可以相互转化,使用Eigen库可以很容易的做到这一点, 需要特别关注的是:欧拉角与其余量之间的转换关系 : 1)首先要明确的是, 必须要明确欧拉角的旋转次序 ,你可以选择RPY、YPR等方式,在相同的orientation下,

    2024年01月18日
    浏览(47)
  • 欧拉角,四元数和旋转矩阵互转代码【python版】

    欧拉角以 Roll、Pitch、Yaw 的顺序表示 四元数以[ q w q_w q w ​ , q x q_x q x ​ , q y q_y q y ​ , q z q_z q z ​ ]的顺序表示 代码包括了 欧拉角与四元数互转 , 旋转矩阵与四元数互转 , 欧拉角与旋转矩阵互转 ,输入参数均为 np.array 形式 代码内置了角度制和弧度制😃😃 当时因为这块

    2023年04月22日
    浏览(50)
  • 持之以恒(一)位姿转换:姿态 / 四元数 / 旋转矩阵 / 欧拉角 及 位姿矩阵

    姿态的几种表示形式, 姿态角 、 四元数 、 欧拉角 、 旋转矩阵 、 位姿矩阵 。 姿态 说明 表示形式 Eigen 姿态角 指的是机体坐标系与地理坐标系的夹角,即旋转向量 rx,ry,rz Eigen::Vector3f(Degrees) 四元数 四元素不存在万向节死锁问题、利用球面插值可以获得均匀的转速 w,x,y,z

    2024年02月15日
    浏览(51)
  • ABB机器人欧拉角与四元数的相互转化以及旋转矩阵的求法

    做项目时用到ABB机器人,直接通过ABB内置的函数可以轻松实现四元数读数与欧拉角的相互转化。但实际项目需要从示教器读出相关位置并自行计算,尤其需要计算旋转矩阵。 本文以 ABB IRB120机器人 (不确定其他机器人是否与ABB机器人一致)为例如下姿态为例来描述上述几个量

    2024年02月03日
    浏览(52)
  • 车辆姿态表达:旋转矩阵、欧拉角、四元数的转换以及eigen、matlab、pathon方法实现

    旋转矩阵、欧拉角、四元数主要用于表示坐标系中的旋转关系,通过三者之间的转换可以减小一些算法的复杂度。 本文主要概述旋转矩阵、欧拉角、四元数的基本理论、三者之间的转换关系以及三者转换在eigen、matlab和pathon上的方法实现。 对于两个三维点 p1 、 p2 : p 1 ( x

    2023年04月11日
    浏览(44)
  • Unity 四元数与物体旋转

    由三个角度(x,y,z)组成 在特定坐标系下用于描述物体的旋转量 空间中的任意旋转都可以分解成绕三个互相垂直轴的三个旋转角组成的序列 欧拉角旋转约定——heading-pitch-bank 这是一种最常用的旋转序列约定——Y-X-Z约定 heading:物体绕自身的对象坐标系的Y轴旋转的角度 pitch:物体

    2024年01月18日
    浏览(55)
  • 【数理知识】三维空间旋转矩阵的欧拉角表示法,四元数表示法,两者之间的转换,Matlab 代码实现

    序号 内容 1 【数理知识】自由度 degree of freedom 及自由度的计算方法 2 【数理知识】刚体 rigid body 及刚体的运动 3 【数理知识】刚体基本运动,平动,转动 4 【数理知识】向量数乘,内积,外积,matlab代码实现 5 【数理知识】最小二乘法,从线性回归出发,数值举例并用最小

    2024年02月12日
    浏览(48)
  • Unity旋转 欧拉角和四元数

    Unity中的旋转最为常知的是Transform.rotation,但其内部实现是由 Quaternion (四元数)进行计算处理,而Inspactor中显示的旋转值是由 EulerAngles (欧拉角)处理。 Unity使用四元数对实际的旋转值进行计算和存储,使用欧拉角对基于世界空间坐标的旋转进行描述和显示,而Inspacetor中显示

    2024年02月13日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包