欧拉角表示姿态角

欧拉角和四元数是惯性导航过程的旋转表达方式,但如果你尝试过去理解四元数的话,刚开始学习的你会发现这完全不是让人去理解的东西,能不能有一套说人话的东西存在,这东西真的存在,那就是存在一定问题但让人理解的欧拉角。

下图是维基百科中直观表示欧拉角旋转的图像
维基百科欧拉角动态展示
欧拉角表示的是沿着坐标轴进行旋转的方式,图示为先沿着z轴旋转,再沿着旋转后得到新的坐标系1的x轴旋转,再沿着旋转后得到的坐标系2的y轴旋转。

在实际的口语表达中,xyz三个轴可以用第一个轴、第二个轴、第三个轴进行代替,所以上述旋转过程可以理解为沿第个轴旋转,再沿第个轴转,再沿第个轴转,这就是我们日常或者教科书中312旋转方法的来历。

需要注意的是旋转是沿着上一个轴旋转后生成的新轴进行旋转的,这是欧拉角的核心,如果弄混记成都沿着n系下的轴进行旋转,那样你会得到一个完全不一样的旋转结果,并且很难进行旋转矩阵的求解,也就是很难去表示。

下面先介绍按照旋转后的坐标对应关系,首先说沿z轴旋转后的1系与原来坐标系n系之间的对应关系。

无论怎么旋转,三维空间中的坐标系均可以用一个过渡矩阵进行变换,所以 x n = C 1 n x 1 x^n=C_1^nx^1 xn=C1nx1 C 1 n C_1^n C1n也可以利用一个3x3的矩阵进行表示。
在这里插入图片描述

易知 C n 1 = { c o s ( ψ ) s i n ( ψ ) 0 − s i n ( ψ ) c o s ( ψ ) 0 0 0 1 } C_n^1=\left\{ \begin{matrix} cos(\psi) & sin(\psi) & 0 \\ -sin(\psi) & cos(\psi) & 0 \\ 0 & 0 & 1 \end{matrix} \right\} Cn1=cos(ψ)sin(ψ)0sin(ψ)cos(ψ)0001,此时需要知道 ψ \psi ψ是偏航角,且以北偏西为正。
同理得到 C 1 2 = { 1 0 0 0 c o s ( θ ) s i n ( θ ) 0 − s i n ( θ ) c o s ( θ ) } C_1^2=\left\{ \begin{matrix} 1 & 0 & 0 \\ 0 & cos(\theta) & sin(\theta) \\ 0 & -sin(\theta) & cos(\theta) \\ \end{matrix} \right\} C12=1000cos(θ)sin(θ)0sin(θ)cos(θ) C 2 n = { c o s ( γ ) 0 − s i n ( γ ) 0 1 0 s i n ( γ ) 0 c o s ( γ ) } C_2^n=\left\{ \begin{matrix} cos(\gamma) & 0 & -sin(\gamma) \\ 0 & 1 & 0 \\ sin(\gamma) & 0& cos(\gamma) \\ \end{matrix} \right\} C2n=cos(γ)0sin(γ)010sin(γ)0cos(γ)

这三个矩阵在对角线的正负上可能与书上有所不一样,这是因为书上对 ψ \psi ψ的定义是北偏东为正,本文中的欧拉角转动均严格符合右手定则。

所以 C n b = C 2 b C 1 2 C n 1 = { c o s ( γ ) c o s ( ψ ) − s i n ( γ ) s i n ( ψ ) s i n ( θ ) c o s ( γ ) s i n ( ψ ) + s i n ( γ ) c o s ( ψ ) s i n ( θ ) − s i n ( γ ) c o s ( θ ) − s i n ( ψ ) c o s ( θ ) c o s ( ψ ) c o s ( θ ) s i n ( θ ) s i n ( γ ) c o s ( ψ ) + c o s ( γ ) s i n ( ψ ) s i n ( θ ) s i n ( γ ) s i n ( ψ ) − c o s ( γ ) c o s ( ψ ) s i n ( θ ) c o s ( γ ) c o s ( θ ) } C_n^b=C_2^bC_1^2C_n^1= \left\{ \begin{matrix} cos(\gamma)cos(\psi)-sin(\gamma)sin(\psi )sin(\theta) & cos(\gamma)sin(\psi)+sin(\gamma)cos(\psi)sin(\theta) & -sin(\gamma)cos(\theta) \\ -sin(\psi)cos(\theta) & cos(\psi)cos(\theta) & sin(\theta) \\ sin(\gamma)cos(\psi)+cos(\gamma)sin(\psi)sin(\theta) & sin(\gamma)sin(\psi)-cos(\gamma)cos(\psi)sin(\theta)& cos(\gamma)cos(\theta) \\ \end{matrix} \right\} Cnb=C2bC12Cn1=cos(γ)cos(ψ)sin(γ)sin(ψ)sin(θ)sin(ψ)cos(θ)sin(γ)cos(ψ)+cos(γ)sin(ψ)sin(θ)cos(γ)sin(ψ)+sin(γ)cos(ψ)sin(θ)cos(ψ)cos(θ)sin(γ)sin(ψ)cos(γ)cos(ψ)sin(θ)sin(γ)cos(θ)sin(θ)cos(γ)cos(θ)
这就是从欧拉角到旋转矩阵的变换公式,但是大多数情况下我们都是有旋转矩阵然后反向求欧拉角,从上边式子中观察,找到求欧拉角的方法。

将矩阵 C n b C_n^b Cnb C C C表示,则由 C 23 = s i n ( θ ) C_{23}=sin(\theta) C23=sin(θ)可知, θ = a r c s i n ( C 23 ) \theta=arcsin(C_{23}) θ=arcsin(C23)
同样在上述矩阵表达式上倒推,易知 γ = − a t a n 2 ( C 13 , C 33 ) \gamma=-atan2(C_{13},C_{33}) γ=atan2(C13,C33) ψ = − a t a n 2 ( C 21 , C 22 ) \psi=-atan2(C_{21},C_{22}) ψ=atan2(C21,C22)

但上边这个式子一般是在 ∣ C 23 ∣ < 0.9999999 |C_{23}|<0.9999999 C23<0.9999999时成立,因为若 ∣ C 23 ∣ = 1 |C_{23}|=1 C23=1,则 θ = π / 2 \theta=\pi/2 θ=π/2,此时出现了欧拉角的万向锁情况,此类情况下 ψ , γ \psi,\gamma ψ,γ不唯一,只能在确定一个值得情况下确定另外一个,所以我们可以任意指定一个值,从而确定另外一个,一般情况下指定 ψ = 0 \psi=0 ψ=0,此时 γ = a t a n 2 ( C 31 , C 11 ) \gamma=atan2(C_{31},C_{11}) γ=atan2(C31,C11)

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页