运动学与质量和受力无关,只研究位置,速度,姿态,角速度等参量
坐标系变换与旋转矩阵
$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}$就是惯性系下的角速度,记为
也可以写成
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