楼主

[其他] 【分享帖】机器人运动基础:四元数,欧拉角和旋转矩阵

[复制链接]
无人机放弃=给你自由
2017-10-27 12:27:02 只看该作者

马上注册,玩转Robomaster!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

                               
登录/注册后可看帖子
四元数,欧拉角和旋转矩阵
在现实的工程应用中,通常有三种方法被应用于描述一个空间坐标或者空间物体的方向(姿态,rotations):四元数,欧拉角和旋转矩阵。这篇文档将对这三个数学概念做一些简单总结。
1四元数
四元数在代数上是复数的扩展,就像复数是实数的扩展一样。它由爱尔兰数学家William Rowan Hamilton于1843年首先提出。当时最开始提出来的概念是以下这个方程:



                               
登录/注册后可看帖子
虚数只有1个虚部,但它构建了一个2维空间。四元数有3个虚部,它构建了一个4维空间。四元数各维度的单位之间构成一个除法环(i*j = k, j*k = i,k*i=j)的概念。它们之间的乘积有如下图所示的关系:

                               
登录/注册后可看帖子
图1 四元数乘积表
从图中也可以发现到,四元数的乘法不符合交换率(i*j != j*i)。但四元数和乘法确实也能构成一个群论中“群”的概念。这个“群”中1作为单位元,另外它也满足结合律( (i*j)k = i(j*k) )。关于四元数更详细的概念基础可以参照维基百科。
在广义相对论,量子力学,控制系统等研究上,四元数都有很多的应用。但本文接下来仅简要介绍其在描述空间一个物体的姿态上的应用。一个单位四元数(a+bi+cj+dk:a^2 + b^2 + c^2 + d^2 = 1)会因为共厄关系而实现3维空间的转动。单位四元数的四个参数可以描述空间一个物体绕一个经过该物体的坐标系的原点的一个向量所旋转一个特定角度。这个角度的大小与单位四元数的标量部分相对应,而这个向量则对应于四元数的失量部分。就是说如果一个四元数表示成:a+bi+cj+dk,那么a对应着角度大小;b,c,d对应着向量。
假设这个特定角度为α,经过物体坐标系原点的特定向量与该坐标系x,y,z之间的夹角分别为βx,βy,βz,。那么四元数a+bi+cj+dk与这个旋转关系之间对应的数学表达式为:

                               
登录/注册后可看帖子
参照这个表达式,任何一个单位四元数(a^2 + b^2 + c^2 + d^2 = 1)都描述着这样一个绕(cos(βx),cos(βy),cos(βz))这个向量旋转α角度的一个动作。对上式做逆运算即可根据α,cos(βx),cos(βy)和cos(βz)的值,求出四元数a,b,c,d的值。因此相对于后面将要介绍的欧拉角和旋转向量,其实四元数有一种更直观的感觉。因此最后总结就是,一个单位四元数描述了一个物体(或者一个坐标系)相对于其原来所在的坐标系下的一个旋转动作。
另外,任何一个空间旋转都可以用一个向量和一个旋转角度来定义。这是大数学家欧拉曾经证明过的。详细内容可以参考欧拉旋转定理。
欧拉说过这样一句话:
When a sphere is moved around its centre it is always possible to find a diameter whose direction in the displaced position is the same as in the initial position.
翻译过来就是:当一个球绕着球心转动时,一定存在着一条直径,这条直径在转动后和转动前的方向是不变的。
2 欧拉角
四元数用了4个有一定相关性(a^2 + b^2 + c^2 + d^2 = 1)的数来描述一个空间旋转。其实描述一个3维空间物体的旋转不一定需要4个这么多参数,欧拉角就只有三个参数。欧拉认为通过3个独立的参数来描述空间的旋转就足够了。
假设,给一个物体建立一个右手直角坐标系Oxyz。那么任何一个与此坐标系原点相同的坐标系都可以通过三次独立的绕坐标轴旋转而得道。其实这里旋转顺序是可以考究的。三个坐标轴可以有12种方法来组合式的旋转(连续的旋转不能绕同一坐标轴)。这12种方法还可以分两类,它们分别是:
1经典欧拉角(Proper Euler Angles): x-y-x,x-z-x,y-x-y,y-z-y,z-x-z,z-y-z
2, 泰特-布莱恩角(Tait-Bryan Angles):x-y-z,x-z-y,y-x-z,y-z-x,z-x-y,z-y-x
这12种方法里面,通常使用的一种方式是z-x-z的顺序。如下图所示:

                               
登录/注册后可看帖子
图2 z-x-z欧拉角示意图
Oxyz是原来的坐标系,OXYZ是旋转变化后的坐标系。其中,α,β和γ分别是坐标系按先后顺序绕z轴,x轴,z轴旋转的角度。
还有一个要点需要提一下的是所谓的:yaw,pitch,roll的欧拉角表示方法。y-p-r的表示方法其实是内在的泰特-布莱恩角的一种旋转方法(intrinsic tait-bryan angles)。它是按照z,y',x''的方式来旋转的角度。关于欧拉角更详细的描述,可以参考维基百科。
作为与四元数描述同样的现象,欧拉角与四元数应该有相对应的转化方式。以下是欧拉角转化为四元数(yaw,pitch,roll顺序的泰特-布莱恩角):

                               
登录/注册后可看帖子
当然,按照其他旋转方式的欧拉角时,这个等式也是需要一定变换的。另外,以下上式的逆运算。根据四元数来求欧拉角(yaw,pitch,roll顺序的泰特-布莱恩角)。

                               
登录/注册后可看帖子
关于更多欧拉角和四元数的关系,可以参考维基百科。
3旋转矩阵
旋转矩阵是通过一个3x3矩阵来描述一个空间的旋转。它的每一行,每一列都有特殊的含义。现在假设Oxyz是原始坐标系,Ox'y'z'是旋转过后的坐标系。则这个旋转坐标系可以表示为(需要切记,把一个旋转矩阵应用到一个向量上去后,是左乘。即B = MA):

                               
登录/注册后可看帖子
其中x'x表示x'轴与x轴之间的夹角,其他的x'y,x'z,y'x等等也是类似的轴与轴之间夹角的意思。那么,其实夹角的余弦值也可以看作是坐标轴的投影。例如cos(x'x)就可以理解为x'坐标轴上的单位向量在x坐标轴上投影的长度。因此也可以理解为旋转矩阵其实就是9个投影长度的矩阵。
旋转矩阵用了9个数来描述空间旋转,这当然就导致了大量的耦合。这9个参数不是完全独立的,而是有6个方程来约束它们,因此它还是一个3自由度的矩阵。(如果扩展它的自由度,例如不按单位向量的投影来算,而是按一个特定的放大比例后的向量来算。那么这个矩阵就不仅仅代表了空间旋转,还代表了空间的放缩。)
同样旋转矩阵和前两者之间也是可以互相转换的。四元数(a+bi+cj+dk)等效的旋转矩阵的如下:

                               
登录/注册后可看帖子
需要注意的是,旋转矩阵应用到一个坐标系上去,是左乘以那个坐标系(是post-multiplied by a vector/matrix,而不是post-multiply)。例如,坐标系A通过矩阵M旋转到坐标系B的表达式为B = MA。
关于欧拉角和旋转矩阵的转化等式就非常多了。因为欧拉角的转化顺序可以有12种,而且要细分的话(把内在坐标系旋转Intrinsic Rotations和外在坐标系旋转Extrinsic Rotations包括进去),12种还不只。因此,这里仅列举一个参照自维基百科的表格。

                               
登录/注册后可看帖子
图3 欧拉角与旋转矩阵的对应关系
图3中所有的欧拉角旋转都是Intrinsic Rotaions。也就是说,每一次的欧拉角旋转都是相对于当前坐标系的,而不是相对于最原始坐标系的旋转。这里举个例子说明以下表格中等式和符号的含义。X1Z2X3表示最开始的坐标系做了三次旋转,第一次坐标系Oxyz绕自己的x轴旋转后得到Ox1y1z1;第二次Ox1y1z1坐标系绕自己z轴旋转后得到Ox2y2z2;第三次Ox2y2z2坐标系再绕自己的x轴旋转后得到Ox3y3z3。而这个旋转过程与以下的旋转矩阵等效:

                               
登录/注册后可看帖子
这个矩阵中c1,c2,c1分别表示第1,2,3次旋转的角度的余弦值;s1,s2,s3分别表示第1,2,3次旋转角度的正弦值。
这个表格中Z1Y2X3的旋转方式通常被应用于航天器的研究,也就是所谓的yaw,pitch,roll(偏航,俯仰,横滚)。



跳转到指定楼层
沙发

[其他] 【分享帖】机器人运动基础:四元数,欧拉角和旋转矩阵

[复制链接]
梯队队员三年以后熟
2017-11-9 19:46:31 只看该作者
66666666666666666666666666
板凳

[其他] 【分享帖】机器人运动基础:四元数,欧拉角和旋转矩阵

[复制链接]
梯队队员soulmate
2017-11-10 09:15:54 只看该作者
萌新求教
回复

使用道具 举报

地板

[其他] 【分享帖】机器人运动基础:四元数,欧拉角和旋转矩阵

[复制链接]
梯队队员2580057872
2017-11-10 10:26:14 只看该作者
6666666666666666666
5#

[其他] 【分享帖】机器人运动基础:四元数,欧拉角和旋转矩阵

[复制链接]
梯队队员11612990904
2018-10-17 16:09:27 只看该作者
6666666666666666
6#

[其他] 【分享帖】机器人运动基础:四元数,欧拉角和旋转矩阵

[复制链接]
梯队队员爱健身的机器人
2018-12-17 10:17:13 只看该作者
6666666666666666
7#

[其他] 【分享帖】机器人运动基础:四元数,欧拉角和旋转矩阵

[复制链接]
梯队队员jcwangzi
2019-1-11 22:15:23 只看该作者
感谢大佬!我这就去试试。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

触屏版 | 电脑版

Copyright © 2024 RoboMasters 版权所有 备案号 粤ICP备2022092332号

快速回复 返回顶部 返回列表