四元数、欧拉角、旋转矩阵笔记
四元数
单位四元数
四元数性质
任意向量 $\vec{v}$ 沿着以单位向量定义的旋转轴 $\vec{u}$ 旋转 $\theta$ 度之后的 $\vec{v}’$ 可以使用四元数乘法来获得。令 $q_v=[0,\vec{v}]$,$q=[\cos\frac{\theta}{2},\sin\frac{\theta}{2}\vec{u}]$,那么
四元数微分方程
旋转矩阵
横滚角 $\phi$ 绕x轴旋转,向左横滚为正
俯仰角 $\theta$ 绕y轴旋转,抬头为正
偏航角 $\psi$ 绕z轴旋转,向左偏航为正
由罗德里格斯公式
可以将旋转矩阵和轴角互相转换,有了轴角即可转换成四元数。
由旋转矩阵转换成轴角的公式为
由于$\boldsymbol{n}$为旋转轴且满足
所以 $\boldsymbol{n}$ 为旋转矩阵 $\mathbf{R}$ 的特征值为1对应的模长为1的特征向量。
欧拉角
统一按照本体系zyx轴的旋转顺序,先绕z轴偏航,再绕y轴俯仰,最后绕x轴横滚。本体系x轴朝后为横滚轴,向左横滚为正;y轴朝右为俯仰轴,抬头为正;z轴朝上为偏航轴,向左偏航为正。旋转后横滚俯仰偏航三个角度的定义见后文四元数、旋转矩阵转欧拉角
一节。
四元数转旋转矩阵
Quaternion to Rotation Matriq_1 -OpenGL
旋转矩阵转四元数
Conversion of rotation matrix to quaternion -stackexchange
Converting a Rotation Matrix to a Quaternion -stackexchange
Maths - Conversion Matrix to Quaternion -EuclideanSpace
旋转矩阵与四元数的各个元素间有如下关系
已知旋转矩阵求四元数,上面方程组可以等价写为已知 $a_1$ 到 $a_9$ 求 $x,y,z,w$:
这9个方程中,等式左边包含 $4x,4y,4z,4w$ 项的方程分别有4,4,4,3个,等式两侧同时除以共同项后即可剩下 $x,y,z,w$ 项,而共同项 $4x,4y,4z$ 的计算方法为
例如,
这个例子以共同项 $4x$ 或 $a_1$ 为分母,但有时候分母可能为0,所以需要根据实际情况分别以4个共同项为分母。共同项 $4y$、$4z$ 与 $4x$ 类似,而 $4w$ 的计算方法为,将前3式相加得到
实际中有一些比较常用的特殊情况。例如,四元数
对应的旋转矩阵分别为
四元数
对应的旋转矩阵分别为
欧拉角转旋转矩阵
https://en.wikipedia.org/wiki/Euler_angles
四元数、旋转矩阵转欧拉角
航模飞控上用的四元数转欧拉角代码如下1
2
3rol=atan2(2*(q0*q1+q2*q3),1-2*(q1*q1+q2*q2));
pit=asin(2*(q0*q2-q1*q3));
yaw=atan2(2*(q0*q3+q1*q2),1-2*(q2*q2+q3*q3));
四元数转旋转矩阵代码1
2
3
4
5Mat matqr(3, 3, vecdble{
q0*q0+q1*q1-q2*q2-q3*q3, 2*q1*q2-2*q0*q3, 2*q1*q3+2*q0*q2,
2*q1*q2+2*q0*q3, q0*q0-q1*q1+q2*q2-q3*q3, 2*q2*q3-2*q0*q1,
2*q1*q3-2*q0*q2, 2*q2*q3+2*q0*q1, q0*q0-q1*q1-q2*q2+q3*q3,
});
对应得到旋转矩阵转欧拉角1
2
3rol=atan2(r23, r33);
pit=asin(-r31);
yaw=atan2(r21, r11);
二值反正切函数为atan2(y,x)
,横滚角的二值反正切函数中的y、x值分别为本体系y坐标轴和z坐标轴在世界系的z坐标(r23, r33),俯仰角为0时也可以理解成世界系z轴在本体系YOZ平面上的投影与z轴的夹角(但俯仰角不为0时不能这样等价)。偏航角的二值反正切函数中的y、x值分别为本体系x轴在世界系的y坐标和x坐标(r21, r11),可以理解成本体系x轴在世界系XOY平面上的投影与世界系x轴的夹角。俯仰角为本体系x轴与世界系XOY平面的距离,因为x轴朝向本体后方,所以取负号,表示抬头为正。
欧拉角速度
欧拉角速度与角速度的关系推导 -CSDN博客
Angular Velocity expressed via Euler Angles -Physics Stack Exchange
assume that $x=x(t),y=y(t)$, then let $z=\text e^x\sin y$, how to use sympy to calculate the total differentiation of $z$, i.e. $\sin y+\text e^x\cos y$?
角速度 $\vec\omega$ 是表示在惯性坐标系的,可分解为
同时,又可以将它分解到刚体固连坐标系三次旋转的转轴上:
首先绕 $z$ 轴旋转
其次绕 $y$ 轴旋转
最后绕 $x$ 轴旋转
将三者相加,就可得到角速度与欧拉角速度的关系
反过来得到
罗德里格斯参数
xyz固定角和zyx欧拉角相等的直观理解
xyz固定角指所有的旋转均在世界坐标系下,刚体先后绕世界坐标系的xyz轴旋转,设旋转前的向量为 $\vec{v}$ (为了便于理解,可以想象 $\vec{v}=(1,0,0)^T$),则旋转后的向量为
zyx欧拉角指3次旋转均为绕与刚体固连的坐标系的轴旋转,顺序为zyx。旋转前刚体坐标系与世界坐标系重合,绕刚体坐标系z轴旋转一次后的向量在世界坐标系下的坐标为 $R_z\vec{v}$。一直在动的刚体坐标系称为刚体系,刚体系在绕z轴旋转一次后的坐标系称为”刚1系”。此时再绕刚体系(刚1系)y轴旋转,旋转后的坐标在刚体系中仍为 $\vec{v}$,在刚1系中的坐标为 $R_y\vec{v}$。此时注意对向量乘一个矩阵的另一个作用,即将向量从一个坐标系变换到另一个坐标系,刚1系下的任意坐标 $\vec{x}$ 在世界系下的坐标为 $R_z\vec{x}$,所以现在旋转了两次的向量 $\vec{v}$ 在刚1系中的坐标为 $R_y\vec{v}$,在世界系中的坐标就是 $R_zR_y\vec{v}$。
同理,再旋转最后一次后,向量 $\vec{v}$ 在刚体系的坐标仍然为 $\vec{v}$,在刚2系中的坐标为 $R_x\vec{v}$,刚2系的任意坐标 $\vec{x}$ 在刚1系下的坐标为 $R_y\vec{x}$ 所以向量 $\vec{v}$ 在刚2系中的坐标为 $R_x\vec{v}$,在刚1系中的坐标为 $R_yR_x\vec{v}$,在世界系中的坐标为 $R_zR_yR_x\vec{v}$,与xyz固定角相同。