玩命加载中 . . .

无人机运动学


运动学与质量和受力无关,只研究位置,速度,姿态,角速度等参量

坐标系变换与旋转矩阵

$p$在$\mathcal{A}$中的坐标为$\begin{bmatrix}p_1&p_2&p_3\end{bmatrix}^\mathrm{T}$,$p^{\prime}$在$\mathcal{B}$中的坐标也是$\begin{bmatrix}p_1&p_2&p_3\end{bmatrix}^\mathrm{T}$,旋转矩阵$R$的每一列是$\mathcal{B}$的三个基向量在$\mathcal{A}$中的投影。

两边同乘以$\begin{bmatrix}p_1&p_2&p_3\end{bmatrix}^\mathrm{T}$,得到

也就是$p^{\prime}$在$\mathcal{A}$中的坐标是$R\begin{bmatrix}p_1&p_2&p_3\end{bmatrix}^\mathrm{T}$
即把$p^{\prime}$移动到$\mathcal{A}$中,记为$q$,要得到$q$在$\mathcal{A}$中的坐标,需要左乘旋转矩阵$R$

这也可以看成在$\mathcal{A}$坐标系中,向量$p$通过旋转得到向量$q$。

例子


$\mathcal{A}$绕$z$轴旋转$60^{\circ}$得到$\mathcal{B}$,则$\mathcal{B}$中向量$\begin{bmatrix}1&0&0\end{bmatrix}^\mathrm{T}$在$\mathcal{A}$中的坐标为

也可以看成是$\mathcal{A}$中的向量$\mathbf{p}=\begin{bmatrix}1&0&0\end{bmatrix}^\mathrm{T}$绕$z$轴旋转$60^{\circ}$得到向量$\mathbf{q}=\begin{bmatrix}\frac{1}{2} &\frac{\sqrt{3}}{2}& 0\end{bmatrix}^\mathrm{T}$

旋转矩阵姿态运动学方程

对$\mathbf{q}=R\mathbf{p}$微分可得

$\dot{\mathbf{q}}$是惯性系下的速度
两边同乘以$R^\mathrm{T}$,可得

将方程转换到体轴系下,$R^\mathrm{T}\dot{\mathbf{q}}$是体轴系下的速度,根据

或者写成反对称阵形式

$p$是体轴系下的向量,所以$R^\mathrm{T}\dot{R}$就是体轴系下的角速度的反对称形式,记为

也可以写成

同理,由$\mathbf{q}=R\mathbf{p}$可得$\mathbf{p} = R^\mathrm{T}\mathbf{q}$,代入微分方程可得

则$\dot{R} R^\mathrm{T}$就是惯性系下的角速度,记为

也可以写成

参考Aerial Robotics

Rodrigues公式

任意旋转都可以用一个旋转轴$u$和一个旋转角$\phi$刻画

$\hat{u}$是反对称阵(skew-symmetric matrix),即$u=\begin{bmatrix}x&y&z\end{bmatrix}$

即当已知旋转轴和旋转角度后,就可以通过Rodrigues公式求出旋转矩阵

欧拉角

根据Rodrigues公式,可以写出绕$z$轴、$y$轴、$x$轴的旋转矩阵

绕$z$轴旋转$\psi$

绕$y$轴旋转$\theta$

绕$x$轴旋转$\phi$

按Z-Y-X的顺序组成三次旋转的复合旋转矩阵

这里每个旋转矩阵都是在新的坐标系中描述的,所以是右乘
如果是相对于原始坐标系,就要左乘。所以也可以看成是相对于原始坐标系的描述的X-Y-Z旋转复合

欧拉角姿态运动方程

机体角速度可以表示为

可以分解为三次变换的欧拉角速度组合

因为

所以

所以

同理

所以

所以

组合起来就是

所以

也可以写成

四元数

或写成

加减法

乘法

共轭

已知旋转轴$u=\begin{bmatrix}u_1&u_2&u_3\end{bmatrix}^\mathrm{T}$和旋转角度$\phi$,可以写出四元数

要对一个向量$p$进行旋转,先将向量写成四元数形式$p=(0, \mathbf{p})$,再左乘四元数$q$,右乘四元数的共轭$q^{-1}$

如果$q_1$是坐标系$\mathcal{A}$的四元数,$q_2$也是坐标系$\mathcal{A}$的四元数,则两次四元数的复合旋转是

如果$q_1$是坐标系$\mathcal{A}$的四元数,旋转之后得到坐标系$\mathcal{B}$,$q_2$是坐标系$\mathcal{B}$的四元数,则两次旋转的复合是

四元数姿态运动方程

写成矩阵形式

一阶龙格库塔求解

代码实现

q0 = q0 + (-q1*wx - q2*wy - q3*wz)*halfT;
q1 = q1 + (q0*wx + q2*wz - q3*wy)*halfT;
q2 = q2 + (q0*wy - q1*wz + q3*wx)*halfT;
q3 = q3 + (q0*wz + q1*wy - q2*wx)*halfT;

四元数转欧拉角

四元数表示旋转矩阵

坐标系$\mathcal{A}$到坐标系$\mathcal{B}$的旋转用四元数描述是$q$
则旋转矩阵可以表示为

例子

坐标变换

旋转轴$u=\begin{bmatrix}0&0&1\end{bmatrix}^\mathrm{T}$,旋转角度$60^{\circ}$

$q$在坐标系$\mathcal{A}$中的表示为

所以在坐标系$\mathcal{A}$中向量$\mathbf{q}=\begin{bmatrix}\frac{1}{2} &\frac{\sqrt{3}}{2}& 0\end{bmatrix}^\mathrm{T}$

旋转复合

坐标系$\mathcal{A}$通过$q_1$旋转到坐标系$\mathcal{B}$,再通过$q_2$旋转到坐标系$\mathcal{C}$,其中$q_2$是在坐标系$\mathcal{B}$中的描述,$q_2^{\prime}$是在$\mathcal{A}$中的描述

$q_2^{\prime}$的旋转轴是$\begin{bmatrix}\frac{1}{2} &\frac{\sqrt{3}}{2}& 0\end{bmatrix}^\mathrm{T}$

两种表达的复合结果应该是一样的,只是乘的顺序不一样

坐标系$\mathcal{C}$中的向量$r=\begin{bmatrix}0 & 1 & 0 \end{bmatrix}^\mathrm{T}$在$\mathcal{A}$中的表示为

由图可知是正确的

tips:四元数乘法的matlab编程实现

function result = quaternionMultiplication(q1,q2)
    result(1) = q1(1)*q2(1) - q1(2)*q2(2) - q1(3)*q2(3) - q1(4)*q2(4);
    result(2) = q1(1)*q2(2) + q1(2)*q2(1) + q1(3)*q2(4) - q1(4)*q2(3);
    result(3) = q1(1)*q2(3) - q1(2)*q2(4) + q1(3)*q2(1) + q1(4)*q2(2);
    result(4) = q1(1)*q2(4) + q1(2)*q2(3) - q1(3)*q2(2) + q1(4)*q2(1);
end


文章作者: kunpeng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 kunpeng !
  目录