四元数、欧拉角和方向余弦的定义及关系

本文介绍了描述两个坐标系间关系的三种方法:欧拉角法、方向余弦矩阵法和四元数法。通过四旋翼无人机为例,详细解析了各方法的定义、计算过程及其相互之间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  目前,描述两个坐标系之间关系的常用方法主要有欧拉角法、方向余弦矩阵法和四元数法。因此要弄懂这三种方法的定义及关系,我们必须先从坐标系转化开始了解。下面以四旋翼为例,定义两个坐标系。导航坐标系(参考坐标系)n,选取东北天右手直角坐标系作为导航坐标系n、载体坐标系(机体坐标系)b,选取右手直角坐标系定义:四轴向右为X正方向,向前为Y轴正方向,向上为Z轴正方向。

  欧拉角:欧拉角是一种常用的描述方位的方法,是由欧拉提出的。基本思想就是将两个坐标系的变换分解为绕三个不同的坐标轴的三次连续转动组成的序列。欧拉角的旋转规定为连续两次旋转,必须绕着不同的转动轴旋转,所以一共有12种旋转顺规。这里我们选用Z-Y-X的旋转顺规来描述b系与n系的关系。Z-Y-X顺规就是指。绕Z轴旋转偏航角(YAW),绕Y轴旋转横滚角(ROLL),绕X轴旋转俯仰角(PITCH)

  先由简单的2维XY坐标系计算,如下图,载体坐标系b和导航坐标系n初始重合,绕X轴逆时针旋转角。向量OA在导航坐标系中的坐标为(Y,Z),在载体坐标系中的坐标为(Y',Z')。则可以通过计算得出两个坐标的关系。


如上图,做出辅助线1可得    写成矩阵运算为,

推广至三维坐标系中则为

同理得绕Y轴旋转的坐标关系,

绕Z轴旋转的坐标关系为

由此 得到经过三个欧拉角转动后,导航坐标系下的向量旋转后的与其对应的载体坐标系下的向量  之间的关系为,按Z-Y-X的顺规得到          


即为,其中即为坐标系n到坐标系b的变换矩阵,我们平常定义的欧拉角形式的方向余弦矩阵为

四元数:四元数是由四个元构成的数,,其中,是实数,既是互相正交的单位向量,又是虚单位。且满足以下四元数乘法关系:


其中表示四元数乘法,具体展开为


写成矩阵形式为

或者


其中的构成形式为第一列是四元数本身,第一行是的共轭四元数的转置,剩下的部分是一个3行3列的矩阵称为的核,是由四元数构成的反对称矩阵

同理得到的核


定义四元数用来表示导航坐标系n到在台坐标系的旋转变换,那么有


即为


其中

简化为

其中为通常定义的四元数旋转矩阵为载体坐标系b到导航坐标系n的旋转矩阵

四元数欧拉角、方向余弦矩阵之间的关系之间的关系,已知方向余弦矩阵和四元数旋转矩阵后,可以通过方向余弦矩阵的第一列和第三行元素计算姿态欧拉角如下

到此介绍完毕,欢迎大家互相交流指正。

### 欧拉角四元数方向余弦矩阵之间的数学转换 #### 从欧拉角四元数的转换 设给定一组绕Z轴-Y轴-X轴旋转的欧拉角分别为ψ(偏航), θ(俯仰), φ(滚转),则对应的四元数q可表示为: \[ q = \begin{bmatrix} w \\ x \\ y \\ z \end{bmatrix} = \begin{bmatrix} \cos(\phi/2)\cos(\theta/2)\cos(\psi/2)+\sin(\phi/2)\sin(\theta/2)\sin(\psi/2) \\ \sin(\phi/2)\cos(\theta/2)\cos(\psi/2)-\cos(\phi/2)\sin(\theta/2)\sin(\psi/2) \\ \cos(\phi/2)\sin(\theta/2)\cos(\psi/2)+\sin(\phi/2)\cos(\theta/2)\sin(\psi/2) \\ \cos(\phi/2)\cos(\theta/2)\sin(\psi/2)-\sin(\phi/2)\sin(\theta/2)\cos(\psi/2) \end{bmatrix} \] 此表达式展示了如何由三个独立的角度构建一个描述物体方位变化的四元数值[^1]。 #### 从四元数方向余弦矩阵(DCM)的转换 对于任意单位四元数 \( q=[w,x,y,z]^T \),其对应的方向余弦矩阵可通过下述关系获得: \[ C = \begin{pmatrix} 1 - 2(y^{2} + z^{2}) & 2(xy - wz) & 2(xz + wy) \\ 2(xy + wz) & 1 - 2(x^{2} + z^{2}) & 2(yz - wx) \\ 2(xz - wy) & 2(yz + wx) & 1 - 2(x^{2} + y^{2}) \end{pmatrix}\] 这里C即为我们所寻求的方向余弦矩阵,它能够有效地表征两个坐标系间的相对定向关系。 #### 从方向余弦矩阵欧拉角的转换 当已知方向余弦矩阵\( C_{i,j} \),可以通过下面给出的一组公式计算出相应的欧拉角度数: \[ \tan{\phi}=\frac{-c_{3,2}}{c_{3,3}},\quad \tan{\theta}=-\frac{c_{3,1}}{\sqrt{(c_{3,2})^2+(c_{3,3})^2}},\quad \tan{\psi}=+\frac{c_{2,1}}{c_{1,1}} \] 需要注意的是,在某些特殊情况下(比如奇异位置),上述公式的应用可能会遇到除零错误等问题;此时应采取适当措施加以规避或处理[^4]。 ```matlab function [eulerAngles] = dcmToEuler(dcm) phi = atan2d(-dcm(3,2), dcm(3,3)); theta = asind(-90°,+90°] psi = atan2d(dcm(2,1), dcm(1,1)); eulerAngles = [phi; theta; psi]; end ```
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值