坐标系
基本概念
直角坐标系
有X,Y,Z三个轴,相互正交(垂直)。
右手系
对直角坐标系X,Y,Z轴正方向的一种规定。右手拇指、食指、中指自然伸开呈相互正交。X轴,Y轴,Z轴反别为拇指、食指、中指方向。
惯性系
牛顿力学三定律在惯性系中成立。一般取地球面。
对地坐标系(GCS)
取地面一点为原点,取东方为X方向,北方为Y方向,右手系原则确定指向天空为Z轴方向(其实怎么选无所谓,只要是右手系就行,这里我就这么选)。设计这么一个坐标系的意义在于,可以假定地球是不动的,这样GCS就是固定的,其他变化的坐标系可以最后都转化到它这里进行融合。
这个坐标系下的坐标上标通常为E(earth)。
机体坐标系(BCS)
取机体一点为原点。右手系原则规定X,Y,Z轴方向(怎么方便怎么来)。设计这么一个坐标系的意义在于,方便进行受力分析。本项目采用B3坐标系。(根据怎么选X,Y,Z方向,坐标系分为B1,2,3。)
右手螺旋
右手四指握住一个坐标轴,大拇指指向坐标轴方向。则四指弯曲方向为绕该轴旋转的正方向。
旋转矩阵
(
0
−
i
i
0
)
\quad \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix} \quad
(0i−i0)
无人机的受力分析在机体坐标系进行,而最后的无人机姿态描述在对地坐标系进行。两个坐标系不统一,要怎么将一个坐标系的坐标向量转化为另一个坐标系的坐标向量呐?这就需要旋转矩阵了。他是这么用的:
r
B
=
C
E
B
×
r
E
r^B = C^B_E\times r^E
rB=CEB×rE
r
B
=
[
x
B
y
B
z
B
]
r^B = \quad \begin{bmatrix} x^B \\ y^B \\ z^B \end{bmatrix} \quad
rB=⎣⎡xByBzB⎦⎤
r
E
=
[
x
E
y
E
z
E
]
r^E = \quad \begin{bmatrix} x^E \\ y^E \\ z^E \end{bmatrix} \quad
rE=⎣⎡xEyEzE⎦⎤
C
E
B
\ C^B_E
CEB呐,采用不同的旋转顺序会有不同。这里我采用航空次序欧拉角,即Z-Y-X次序欧拉角。这里你可能还不理解欧拉角还有这个旋转顺序,等一等。现让我把这个说完。航空次序欧拉角下,
C
E
B
\ C^B_E
CEB为:
C
E
B
=
[
c
o
s
θ
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
ψ
s
i
n
ϕ
s
i
n
θ
s
i
n
ψ
+
c
o
s
ϕ
c
o
s
ψ
s
i
n
ϕ
c
o
s
θ
c
o
s
ϕ
s
i
n
θ
c
o
s
ψ
+
s
i
n
ϕ
s
i
n
ψ
c
o
s
ϕ
s
i
n
θ
s
i
n
ψ
−
s
i
n
ϕ
c
o
s
ψ
c
o
s
ϕ
c
o
s
θ
]
C^B_E = \quad \begin{bmatrix} cos\theta cos\psi &cos\theta sin\psi & -sin\theta \\ sin\phi sin\theta cos\psi-cos\phi sin\psi & sin\phi sin\theta sin\psi+cos\phi cos\psi & sin\phi cos\theta \\ cos\phi sin\theta cos\psi+sin\phi sin\psi & cos\phi sin\theta sin\psi-sin\phi cos\psi & cos\phi cos\theta \end{bmatrix} \quad
CEB=⎣⎡cosθcosψsinϕsinθcosψ−cosϕsinψcosϕsinθcosψ+sinϕsinψcosθsinψsinϕsinθsinψ+cosϕcosψcosϕsinθsinψ−sinϕcosψ−sinθsinϕcosθcosϕcosθ⎦⎤
ψ
\psi
ψ,
θ
\theta
θ,
ϕ
\phi
ϕ分别为机体坐标系相当于对地坐标系绕Z轴旋转的角度、绕Y轴旋转的角度和绕X轴旋转的角度。
这样我们就实现了对地坐标系的坐标值向机体坐标系下的坐标值的映射。如果我们想反过来等式两边都左乘
C
E
B
\ C^B_E
CEB的逆就好(我们把
C
E
B
\ C^B_E
CEB的逆写为
C
B
E
\ C^E_B
CBE):
r
E
=
C
B
E
×
r
B
r^E = C^E_B\times r^B
rE=CBE×rB
如此,我们直接用这个旋转矩阵就可以了。但他是怎么来的呐?我们从二维的情况开始推导。
- 首先我们假设有两个二维坐标系XOY和xoy。XOY不动,xoy绕他们共同的z轴转动。即刚开始连个坐标系是重合的,后来机体运动了,它俩就不重合了,找到两坐标系下坐标的关系就要找到两坐标系间的关系。
- 如图,两坐标系间关系可以由转动角度
θ
\theta
θ完全描述。
- 简单推导可知:
y = c o s θ ⋅ ( Y − X ⋅ t a n θ ) = − X ⋅ s i n θ + Y ⋅ c o s θ y = cos\theta \cdot (Y- X \cdot tan\theta) = - X \cdot sin\theta+Y \cdot cos\theta y=cosθ⋅(Y−X⋅tanθ)=−X⋅sinθ+Y⋅cosθ
x = X c o s θ + y ⋅ t a n θ = X ⋅ c o s θ + Y ⋅ s i n θ x = \frac{X}{cos\theta}+y \cdot tan\theta = X \cdot cos\theta+Y \cdot sin\theta x=cosθX+y⋅tanθ=X⋅cosθ+Y⋅sinθ
矩阵形式:
[ x y ] = [ c o s θ s i n θ − s i n θ c o s θ ] × [ X Y ] \begin{bmatrix} x \\ y\end{bmatrix} = \begin{bmatrix} cos\theta & sin\theta \\ -sin\theta & cos\theta \end{bmatrix} \times \begin{bmatrix} X \\ Y \end{bmatrix} [xy]=[cosθ−sinθsinθcosθ]×[XY]
二维情况下只需要一个旋转角就可以完全描述两个坐标系的关系。但三维情况下就需要三个旋转角了。我们称之为三个欧拉角,而这三个角改变的顺序的不同区分了不同的旋转矩阵。来看三维的情况: - 假设有两个二维坐标系OXYZ和Oxyz。OXYZ不动,Oxyz依次绕z,y,x轴转动(注意,此时绕的轴始终是机体坐标系的轴)。
- 绕Z轴旋转
ψ
\psi
ψ角。
[ x 1 y 1 z 1 ] = [ c o s ψ s i n ψ 0 − s i n ψ c o s ψ 0 0 0 1 ] × [ X Y Z ] \begin{bmatrix} x1 \\ y1 \\ z1 \end{bmatrix} = \begin{bmatrix} cos\psi & sin\psi & 0 \\ -sin\psi & cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix} \times \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} ⎣⎡x1y1z1⎦⎤=⎣⎡cosψ−sinψ0sinψcosψ0001⎦⎤×⎣⎡XYZ⎦⎤ - 绕Y轴旋转
θ
\theta
θ角
[ x 2 y 2 z 2 ] = [ c o s θ 0 − s i n θ 0 0 0 s i n θ 0 c o s θ ] × [ x 1 y 1 z 1 ] \begin{bmatrix} x2 \\ y2 \\ z2 \end{bmatrix} = \begin{bmatrix} cos\theta & 0 & -sin\theta \\ 0 & 0 & 0 \\ sin\theta & 0 & cos\theta \end{bmatrix} \times \begin{bmatrix} x1 \\ y1 \\ z1 \end{bmatrix} ⎣⎡x2y2z2⎦⎤=⎣⎡cosθ0sinθ000−sinθ0cosθ⎦⎤×⎣⎡x1y1z1⎦⎤ - 绕X轴旋转
ϕ
\phi
ϕ角
[ x y z ] = [ 0 0 0 0 c o s ϕ s i n ϕ 0 − s i n ϕ c o s ϕ ] × [ x 2 y 2 z 2 ] \begin{bmatrix} x \\ y \\ z \end{bmatrix} = \begin{bmatrix} 0 & 0 & 0 \\ 0 & cos\phi & sin\phi \\ 0 & -sin\phi & cos\phi \end{bmatrix} \times \begin{bmatrix} x2 \\ y2 \\ z2 \end{bmatrix} ⎣⎡xyz⎦⎤=⎣⎡0000cosϕ−sinϕ0sinϕcosϕ⎦⎤×⎣⎡x2y2z2⎦⎤ - 三个旋转矩阵相乘
[ x y z ] = [ 0 0 0 0 c o s ϕ s i n ϕ 0 − s i n ϕ c o s ϕ ] × [ 0 0 0 0 c o s ϕ s i n ϕ 0 − s i n ϕ c o s ϕ ] × [ c o s θ 0 − s i n θ 0 0 0 s i n θ 0 c o s θ ] [ X Y Z ] = [ c o s θ 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 ψ s i n ϕ s i n θ s i n ψ + c o s ϕ c o s ψ s i n ϕ c o s θ c o s ϕ s i n θ c o s ψ + s i n ϕ s i n ψ c o s ϕ s i n θ s i n ψ − s i n ϕ c o s ψ c o s ϕ c o s θ ] × [ X Y Z ] \begin{bmatrix} x \\ y \\ z \end{bmatrix} = \begin{bmatrix} 0 & 0 & 0 \\ 0 & cos\phi & sin\phi \\ 0 & -sin\phi & cos\phi \end{bmatrix} \times \begin{bmatrix} 0 & 0 & 0 \\ 0 & cos\phi & sin\phi \\ 0 & -sin\phi & cos\phi \end{bmatrix} \times \begin{bmatrix} cos\theta & 0 & -sin\theta \\ 0 & 0 & 0 \\ sin\theta & 0 & cos\theta \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} = \begin{bmatrix} cos\theta cos\psi &cos\theta sin\psi & -sin\theta \\ sin\phi sin\theta cos\psi-cos\phi sin\psi & sin\phi sin\theta sin\psi+cos\phi cos\psi & sin\phi cos\theta \\ cos\phi sin\theta cos\psi+sin\phi sin\psi & cos\phi sin\theta sin\psi-sin\phi cos\psi & cos\phi cos\theta \end{bmatrix} \times \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} ⎣⎡xyz⎦⎤=⎣⎡0000cosϕ−sinϕ0sinϕcosϕ⎦⎤×⎣⎡0000cosϕ−sinϕ0sinϕcosϕ⎦⎤×⎣⎡cosθ0sinθ000−sinθ0cosθ⎦⎤⎣⎡XYZ⎦⎤=⎣⎡cosθcosψsinϕsinθcosψ−cosϕsinψcosϕsinθcosψ+sinϕsinψcosθsinψsinϕsinθsinψ+cosϕcosψcosϕsinθsinψ−sinϕcosψ−sinθsinϕcosθcosϕcosθ⎦⎤×⎣⎡XYZ⎦⎤
欧拉角
上问提到的三个角就是欧拉角,分别为 ψ \psi ψ, θ \theta θ, ϕ \phi ϕ。分别念psi,theta,phi。在无人机建模中,他们分别被称为偏航角YAW、俯仰角ROLL、滚转角(横滚角)PITCH。
补充
- 之前所提的航空次序欧拉角只是一种顺规而已。你可以发现很多种旋转次序都可以使一个坐标系旋转到任意位置。实际上只要满足这个条件就行:任何两次连续的旋转,必须绕着不同的旋转轴。共有12种合法顺规。而采取不同的顺规,对应的欧拉角肯定不同。只有欧拉角应用于惯性导航领域时,才称为偏航、俯仰、横滚角。
- 姿态除了可以用欧拉角表示,也可以用四元数表示。