前言
四旋翼无人机的应用十分广泛,而且四旋翼无人机是非常理想的控制模型。因为四旋翼是四输入(四个螺旋桨的升力) 六输出 (三个位置,三个姿态角)的欠驱动系统,而且四旋翼的三个姿态角之间是互相耦合的,并且位置与姿态也是耦合的,加上其固有的非线性特性,因此对于学习和熟悉控制系统是十分有帮助的。本文简要介绍无人机的建模以及串级PID控制器的设计。
无人机建模
坐标变换
四旋翼运动过程中实际上涉及很多坐标系,一般包括惯性系,地面系,机体系等等。本文假设四旋翼的运动范围不大,因此本文将惯性系和地面坐标系当做同一坐标系处理。并且为了方面显示图形,将无人机的机头定义为机体系+X,无人机的正左方定义为机体系+Y,垂直向上定义为机体系+Z;同理,水平向前定义为惯性系+X,水平向左定义为惯性系+Y,竖直向上定义为惯性系+Z(很多资料,使用前、右、下作为无人机的机体坐标系正方向,同时使用北东地作为惯性系,二者仅仅相差一个旋转矩阵,无本质差别)。给出图示:
图中,CCW代表逆时针旋转,CW代表顺时针旋转,
X
b
Y
b
Z
b
X_bY_bZ_b
XbYbZb代表机体系,
X
i
Y
i
Z
i
X_iY_iZ_i
XiYiZi代表地面系。
地面系( O i X i Y i Z i O_iX_iY_iZ_i OiXiYiZi,记为 S i S_i Si)与机体系( O b X b Y b Z b O_bX_bY_bZ_b ObXbYbZb,记为 S b S_b Sb)之间的平移关系比较简单,四旋翼在 S i S_i Si系中的位置坐标就是两个坐标系的位置关系。 S i S_i Si与 S b S_b Sb之间的旋转关系由三个姿态角决定,分别为滚转角 ϕ \phi ϕ,俯仰角 θ \theta θ和偏航角 ψ \psi ψ。但是三个坐标轴的旋转顺序不同会产生不同的结果,所以这里按照一般顺序定义:先转 ψ \psi ψ,再转 θ \theta θ,最后转 ϕ \phi ϕ。其对应的旋转矩阵及临时坐标系定义如下:
- 绕惯性系 S i S_i Si的 Z Z Z轴 O Z i OZ_i OZi旋转 ψ \psi ψ,得到临时坐标系 S b 1 S_{b1} Sb1。旋转矩阵为 R i b 1 ( ψ ) = [ cos ψ sin ψ 0 − sin ψ cos ψ 0 0 0 1 ] R_i^{b1}\left(\psi\right) = \left[ \begin{matrix} \cos{\psi} & \sin{\psi} & 0 \\ -\sin{\psi} & \cos{\psi} & 0\\ 0 & 0 & 1 \end{matrix} \right] Rib1(ψ)= cosψ−sinψ0sinψcosψ0001
- 绕系 S b 1 S_{b1} Sb1的 Y Y Y轴 O Y b 1 OY_{b1} OYb1旋转 θ \theta θ,得到临时坐标系 S b 2 S_{b2} Sb2。旋转矩阵为 R b 1 b 2 ( θ ) = [ cos θ 0 − sin θ 0 1 0 sin θ 0 cos θ ] R_{b1}^{b2}\left(\theta\right) = \left[ \begin{matrix} \cos{\theta} & 0 & -\sin{\theta} \\ 0 & 1 & 0\\ \sin{\theta} & 0 & \cos{\theta} \end{matrix} \right] Rb1b2(θ)= cosθ0sinθ010−sinθ0cosθ
- 绕系 S b 2 S_{b2} Sb2的 X X X轴 O X b 2 OX_{b2} OXb2旋转 ϕ \phi ϕ,得到机体坐标系 S b S_{b} Sb。旋转矩阵为 R b 2 b ( ϕ ) = [ 1 0 0 0 cos ϕ sin ϕ 0 − sin ϕ cos ϕ ] R_{b2}^{b}\left(\phi\right) = \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & \cos{\phi} & \sin{\phi}\\ 0 & -\sin{\phi} & \cos{\phi} \end{matrix} \right] Rb2b(ϕ)= 1000cosϕ−sinϕ0sinϕcosϕ
综上,从地面系到机体系的旋转矩阵为
R
i
b
=
R
b
2
b
(
ϕ
)
⋅
R
b
1
b
2
(
θ
)
⋅
R
I
b
1
(
ψ
)
=
[
c
(
ψ
)
c
(
θ
)
c
(
θ
)
s
(
ψ
)
−
s
(
θ
)
c
(
ψ
)
s
(
ϕ
)
s
(
θ
)
−
c
(
ϕ
)
s
(
ψ
)
c
(
ϕ
)
c
(
ψ
)
+
s
(
ϕ
)
s
(
ψ
)
s
(
θ
)
c
(
θ
)
s
(
ϕ
)
s
(
ϕ
)
s
(
ψ
)
+
c
(
ϕ
)
c
(
ψ
)
s
(
θ
)
c
(
ϕ
)
s
(
ψ
)
s
(
θ
)
−
c
(
ψ
)
s
(
ϕ
)
c
(
ϕ
)
c
(
θ
)
]
\begin{align} \begin{aligned} R_i^b &= R_{b2}^{b}\left(\phi\right)\cdot R_{b1}^{b2}\left(\theta\right) \cdot R_I^{b1}\left(\psi\right)\\ &=\left[ \begin{matrix} c(\psi)c(\theta) & c(\theta)s(\psi) & -s(\theta)\\ c(\psi)s(\phi)s(\theta) - c(\phi)s(\psi) & c(\phi)c(\psi) + s(\phi)s(\psi)s(\theta) & c(\theta)s(\phi)\\ s(\phi)s(\psi) + c(\phi)c(\psi)s(\theta) & c(\phi)s(\psi)s(\theta) - c(\psi)s(\phi) & c(\phi)c(\theta) \end{matrix} \right] \end{aligned} \end{align}
Rib=Rb2b(ϕ)⋅Rb1b2(θ)⋅RIb1(ψ)=
c(ψ)c(θ)c(ψ)s(ϕ)s(θ)−c(ϕ)s(ψ)s(ϕ)s(ψ)+c(ϕ)c(ψ)s(θ)c(θ)s(ψ)c(ϕ)c(ψ)+s(ϕ)s(ψ)s(θ)c(ϕ)s(ψ)s(θ)−c(ψ)s(ϕ)−s(θ)c(θ)s(ϕ)c(ϕ)c(θ)
相对应的,从机体系到地面系的变换矩阵为
R
b
i
=
R
i
b
−
1
=
R
i
b
T
=
[
c
(
ψ
)
c
(
θ
)
c
(
ψ
)
s
(
ϕ
)
s
(
θ
)
−
c
(
ϕ
)
s
(
ψ
)
s
(
ϕ
)
s
(
ψ
)
+
c
(
ϕ
)
c
(
ψ
)
s
(
θ
)
c
(
θ
)
s
(
ψ
)
c
(
ϕ
)
c
(
ψ
)
+
s
(
ϕ
)
s
(
ψ
)
s
(
θ
)
c
(
ϕ
)
s
(
ψ
)
s
(
θ
)
−
c
(
ψ
)
s
(
ϕ
)
−
s
(
θ
)
c
(
θ
)
s
(
ϕ
)
c
(
ϕ
)
c
(
θ
)
.
]
\begin{align} \begin{aligned} R_b^i &= {R_{i}^{b}}^{-1} = {R_i^b}^T\\ &=\left[ \begin{matrix} c(\psi)c(\theta) & c(\psi)s(\phi)s(\theta) - c(\phi)s(\psi) & s(\phi)s(\psi) + c(\phi)c(\psi)s(\theta)\\ c(\theta)s(\psi) & c(\phi)c(\psi) + s(\phi)s(\psi)s(\theta) & c(\phi)s(\psi)s(\theta) - c(\psi)s(\phi)\\ -s(\theta) & c(\theta)s(\phi) & c(\phi)c(\theta) \end{matrix}. \right] \end{aligned} \end{align}
Rbi=Rib−1=RibT=
c(ψ)c(θ)c(θ)s(ψ)−s(θ)c(ψ)s(ϕ)s(θ)−c(ϕ)s(ψ)c(ϕ)c(ψ)+s(ϕ)s(ψ)s(θ)c(θ)s(ϕ)s(ϕ)s(ψ)+c(ϕ)c(ψ)s(θ)c(ϕ)s(ψ)s(θ)−c(ψ)s(ϕ)c(ϕ)c(θ).
位置-速度回路动态模型
在得到上面的旋转矩阵之后,加上牛顿第二定律,就可以给出四旋翼的位置动力学模型。
{
v
i
=
x
˙
i
a
i
=
v
˙
i
=
m
g
i
+
f
b
m
\begin{align} \left\{ \begin{aligned} & \boldsymbol{v}^i = \dot{\boldsymbol{x}}^i\\ & \boldsymbol{a}^i = \dot{\boldsymbol{v}}^i = \frac{m\boldsymbol{g}^i + \boldsymbol{f}^b}{m} \end{aligned} \right. \end{align}
⎩
⎨
⎧vi=x˙iai=v˙i=mmgi+fb
其中,上角标
i
i
i代表地面系,上角标
b
b
b代表机体系。已知高中的知识点:向量可以在空间内随意平移,标量没有坐标系的概念,所以把公式
(
3
)
(3)
(3)中的向量统一平移到地面系的原点是完全合理的。因此,可以利用旋转矩阵
(
2
)
(2)
(2)将力转换到地面系中,有
f
i
=
R
b
i
⋅
f
b
⋅
e
3
\begin{align} \begin{aligned} \boldsymbol{f}^i=R_b^i \cdot f^b \cdot \boldsymbol{e}_3 \end{aligned} \end{align}
fi=Rbi⋅fb⋅e3
其中
e
3
=
[
0
0
1
]
\boldsymbol{e}_3=\left[\begin{matrix}0\\0\\1\end{matrix}\right]
e3=
001
为机体系的Z轴对应的单位向量,所以有
[
v
˙
x
v
˙
y
v
˙
z
]
=
−
g
i
⋅
[
0
0
1
]
+
f
b
m
⋅
R
b
i
⋅
[
0
0
1
]
.
\begin{align} \begin{aligned} \left[\begin{matrix} \dot{v}_x \\ \dot{v}_y \\ \dot{v}_z \end{matrix}\right] = -g^i \cdot \left[\begin{matrix}0 \\ 0 \\ 1\end{matrix}\right] + \frac{f^b}{m}\cdot R_b^i \cdot \left[\begin{matrix}0 \\ 0 \\ 1\end{matrix}\right]. \end{aligned} \end{align}
v˙xv˙yv˙z
=−gi⋅
001
+mfb⋅Rbi⋅
001
.
将
(
2
)
(2)
(2)带入
(
5
)
(5)
(5)得到
{
x
˙
=
v
x
y
˙
=
v
y
x
˙
=
v
z
v
˙
x
=
f
m
[
c
(
ψ
)
s
(
θ
)
c
(
ϕ
)
+
s
(
ψ
)
s
(
ϕ
)
]
v
˙
y
=
f
m
[
s
(
ψ
)
s
(
θ
)
c
(
ϕ
)
−
c
(
ψ
)
s
(
ϕ
)
]
v
˙
z
=
−
g
+
f
m
c
(
ϕ
)
c
(
θ
)
\begin{align} \left\{ \begin{aligned} & \dot{x} = v_x\\ & \dot{y} = v_y\\ & \dot{x} = v_z\\ &\dot{v}_x = \frac{f}{m}\left[c(\psi)s(\theta)c(\phi)+s(\psi)s(\phi)\right]\\ &\dot{v}_y = \frac{f}{m}\left[s(\psi)s(\theta)c(\phi) - c(\psi)s(\phi)\right]\\ &\dot{v}_z = -g + \frac{f}{m}c(\phi)c(\theta)\\ \end{aligned} \right. \end{align}
⎩
⎨
⎧x˙=vxy˙=vyx˙=vzv˙x=mf[c(ψ)s(θ)c(ϕ)+s(ψ)s(ϕ)]v˙y=mf[s(ψ)s(θ)c(ϕ)−c(ψ)s(ϕ)]v˙z=−g+mfc(ϕ)c(θ)
其中
f
=
C
T
(
ω
1
2
+
ω
2
2
+
ω
3
2
+
ω
4
2
)
f=C_T\left(\omega_1^2 + \omega_2^2 + \omega_3^2 + \omega_4^2\right)
f=CT(ω12+ω22+ω32+ω42) 是油门 (四个电机的升力和),
C
T
C_T
CT是升力系数,
ω
i
,
i
=
1
,
2
,
3
,
4
\omega_i,i=1,2,3,4
ωi,i=1,2,3,4 是第
i
i
i个电机的转速。写成矩阵形式如下:
{
[
x
˙
y
˙
z
˙
]
=
[
1
0
0
0
1
0
0
0
1
]
[
v
x
v
y
v
z
]
[
v
˙
x
v
˙
y
v
˙
z
]
=
f
m
[
c
(
ψ
)
s
(
θ
)
c
(
ϕ
)
+
s
(
ψ
)
s
(
ϕ
)
s
(
ψ
)
s
(
θ
)
c
(
ϕ
)
−
c
(
ψ
)
s
(
ϕ
)
c
(
ϕ
)
c
(
θ
)
]
−
[
0
0
g
]
\begin{align} \left\{ \begin{aligned} & \left[\begin{matrix}\dot{x}\\\dot{y}\\\dot{z}\end{matrix}\right] = \left[\begin{matrix} 1&0&0\\0&1&0\\0&0&1 \end{matrix}\right] \left[\begin{matrix}v_x\\v_y\\v_z\end{matrix}\right]\\ & \left[\begin{matrix}\dot{v}_x\\\dot{v}_y\\\dot{v}_z\end{matrix}\right] = \frac{f}{m} \left[\begin{matrix} c(\psi)s(\theta)c(\phi)+s(\psi)s(\phi)\\ s(\psi)s(\theta)c(\phi) - c(\psi)s(\phi)\\ c(\phi)c(\theta) \end{matrix}\right]-\left[\begin{matrix}0\\0\\g\end{matrix}\right]\\ \end{aligned} \right. \end{align}
⎩
⎨
⎧
x˙y˙z˙
=
100010001
vxvyvz
v˙xv˙yv˙z
=mf
c(ψ)s(θ)c(ϕ)+s(ψ)s(ϕ)s(ψ)s(θ)c(ϕ)−c(ψ)s(ϕ)c(ϕ)c(θ)
−
00g
至此,位置动力学模型建立完成。
姿态-旋转角速度回路动态模型
这里需要引入刚体动力学的欧拉方程。
J
ω
˙
b
+
ω
b
×
J
ω
b
=
M
g
+
τ
b
\begin{align} \begin{aligned} J\dot{\boldsymbol{\omega}}^b + \boldsymbol{\omega}^b\times J\boldsymbol{\omega}^b = \boldsymbol{M}^{g} + \boldsymbol{\tau}^b \end{aligned} \end{align}
Jω˙b+ωb×Jωb=Mg+τb
其中,
J
=
d
i
a
g
(
J
x
x
,
J
y
y
,
J
z
z
)
J=diag(J_{xx}, J_{yy}, J_{zz})
J=diag(Jxx,Jyy,Jzz) 无人机沿其机体轴方向的惯性张量矩阵,
ω
b
=
[
p
q
r
]
T
\boldsymbol{\omega}^b = \left[\begin{matrix}p&q&r\end{matrix}\right]^T
ωb=[pqr]T 无人机在机体系
S
b
S_b
Sb下的旋转角速度,
M
g
=
[
M
x
g
M
y
g
M
z
g
]
T
\boldsymbol{M}^{g}=\left[\begin{matrix} M_x^g & M_y^g & M_z^g \end{matrix}\right]^T
Mg=[MxgMygMzg]T是机体系下的陀螺力矩
S
b
S_b
Sb,
τ
b
=
[
τ
x
b
τ
y
b
τ
z
b
]
T
\boldsymbol{\tau}^b=\left[\begin{matrix} \tau_x^b & \tau_y^b & \tau_z^b \end{matrix}\right]^T
τb=[τxbτybτzb]T 是无人机的升力为无人机提供的力矩。
Tips:
很多无人机建模忽略了陀螺力矩的影响,实际是不可以忽略的,因为电机的质量虽然只占整个机体很小的比重,但是电机是高速旋转的。众所周知,高速旋转的刚体具有“定轴性”。意思就是,当它的转轴不变的时候,没有任何事情发生,但是如果转轴的方向发生改变,陀螺就会产生“进动”,意图抗拒这个“改变”。所以,当四旋翼悬停的时候,是没有陀螺力矩的;四旋翼只有偏航角改变的时候,也是没有陀螺力矩的。但是如果四旋翼的俯仰角或滚转角发生变化的时候,就会产生陀螺力矩。如果不考虑这个力矩,最后通过调节PID控制器的参数,也能把无人机控制地很好,但是陀螺进动给模型带来的变化是不可以忽略的。
陀螺进动的方程为
G
=
H
×
ω
′
=
J
0
ω
×
ω
′
\boldsymbol{G} = \boldsymbol{H} \times \boldsymbol{\omega}' = J_0\boldsymbol{\omega}\times \boldsymbol{\omega}'
G=H×ω′=J0ω×ω′,其中
G
\boldsymbol{G}
G为电机 (加螺旋桨) 的进动力矩,
J
0
J_0
J0为电机加螺旋桨沿着电机转轴的转动惯量,
ω
\omega
ω为电机的转速,
ω
′
\omega'
ω′为电机的转轴的转速 (这里就是无人机本身的转速)。进而有,
M
g
=
[
M
x
M
y
M
z
]
=
[
∑
i
=
1
4
H
i
×
q
∑
i
=
1
4
H
i
×
1
0
]
=
[
J
0
q
(
−
ω
1
+
ω
2
−
ω
3
+
ω
4
)
J
0
p
(
ω
1
−
ω
2
+
ω
3
−
ω
4
)
0
]
\begin{align} \begin{aligned} \boldsymbol{M}^{g} = \left[\begin{matrix} M_x \\ M_y \\M_z \end{matrix}\right]=\left[\begin{matrix} \sum_{i=1}^4{\boldsymbol{H}_i\times q}\\ \sum_{i=1}^4{\boldsymbol{H}_i\times 1} \\ 0 \end{matrix}\right] = \left[\begin{matrix} J_0q\left(-\omega_1+\omega_2-\omega_3+\omega_4\right)\\ J_0p\left(\omega_1-\omega_2+\omega_3-\omega_4\right) \\ 0 \end{matrix}\right] \end{aligned} \end{align}
Mg=
MxMyMz
=
∑i=14Hi×q∑i=14Hi×10
=
J0q(−ω1+ω2−ω3+ω4)J0p(ω1−ω2+ω3−ω4)0
其中,
p
p
p和
q
q
q已经在上文提到过,
H
i
\boldsymbol{H}_i
Hi的方向与电机的旋转方向相同,从上图中可以看出,1号3号向上,2号4号向下。
τ
b
\tau_b
τb的表达式比较简单,就是中学阶段学过的力矩
=
=
=力
×
\times
×力臂。有
τ
b
=
[
τ
x
τ
y
τ
z
]
=
[
2
C
T
d
2
(
ω
1
2
−
ω
2
2
−
ω
3
2
+
ω
4
2
)
2
C
T
d
2
(
−
ω
1
2
−
ω
2
2
+
ω
3
2
+
ω
4
2
)
C
M
(
−
ω
1
2
+
ω
2
2
−
ω
3
2
+
ω
4
2
)
]
\begin{align} \begin{aligned} \boldsymbol{\tau}^b = \left[\begin{matrix} \tau_x \\ \tau_y \\ \tau_z \end{matrix}\right]=\left[\begin{matrix} \frac{\sqrt{2}C_Td}{2}\left(\omega_1^2 - \omega_2^2 - \omega_3^2 + \omega_4^2\right) \\ \frac{\sqrt{2}C_Td}{2}\left(-\omega_1^2 - \omega_2^2 + \omega_3^2 + \omega_4^2\right) \\ C_M\left(-\omega_1^2 + \omega_2^2 - \omega_3^2 + \omega_4^2\right) \end{matrix}\right] \end{aligned} \end{align}
τb=
τxτyτz
=
22CTd(ω12−ω22−ω32+ω42)22CTd(−ω12−ω22+ω32+ω42)CM(−ω12+ω22−ω32+ω42)
其中,
C
M
C_M
CM为无人机的力矩系数,我们可以认为俯仰和滚转力矩就是电机的螺旋桨产生的,但是偏航的力矩本身不是由电机螺旋桨产生的。偏航力矩本身是由螺旋桨高速旋转与周围空气产生作用,然后空气作用给无人机的反作用力产生的。因此1号电机产生的角动量朝上,但是它在无人机偏航上的贡献是负的,其余三个电机以此类推。 (这个过程类似于坐在可以旋转的办公椅上,用手推门,自己身体会朝反方向转一样。本人没有学过空气动力学,所以最开始误解了。)
(
8
)
(8)
(8)左边部分,直接按照向量叉乘的规则直接代入就好,没有任何细节和陷阱。综合
(
8
)
−
(
10
)
(8)-(10)
(8)−(10)有
{
p
˙
=
1
J
x
x
[
2
C
T
d
2
(
ω
1
2
−
ω
2
2
−
ω
3
2
+
ω
4
2
)
+
(
J
y
y
−
J
z
z
)
q
r
−
J
0
q
Ω
]
q
˙
=
1
J
y
y
[
2
C
T
d
2
(
−
ω
1
2
−
ω
2
2
+
ω
3
2
+
ω
4
2
)
+
(
J
z
z
−
J
x
x
)
p
r
+
J
0
p
Ω
]
r
˙
=
1
J
z
z
[
C
M
(
−
ω
1
2
+
ω
2
2
−
ω
3
2
+
ω
4
2
)
+
(
J
x
x
−
J
y
y
)
p
q
]
\begin{align} \left\{ \begin{aligned} & \dot{p} = \frac{1}{J_{xx}}\left[\frac{\sqrt{2}C_Td}{2}\left(\omega_1^2 - \omega_2^2 - \omega_3^2 + \omega_4^2\right)+\left(J_{yy}-J_{zz}\right)qr - J_0q\Omega\right] \\ & \dot{q} = \frac{1}{J_{yy}}\left[\frac{\sqrt{2}C_Td}{2}\left(-\omega_1^2 - \omega_2^2 + \omega_3^2 + \omega_4^2\right) +\left(J_{zz}-J_{xx}\right)pr + J_0p\Omega\right] \\ & \dot{r} = \frac{1}{J_{zz}}\left[C_M\left(-\omega_1^2 + \omega_2^2 - \omega_3^2 + \omega_4^2\right) +\left(J_{xx}-J_{yy}\right)pq \right] \end{aligned} \right. \end{align}
⎩
⎨
⎧p˙=Jxx1[22CTd(ω12−ω22−ω32+ω42)+(Jyy−Jzz)qr−J0qΩ]q˙=Jyy1[22CTd(−ω12−ω22+ω32+ω42)+(Jzz−Jxx)pr+J0pΩ]r˙=Jzz1[CM(−ω12+ω22−ω32+ω42)+(Jxx−Jyy)pq]
其中
Ω
=
ω
1
−
ω
2
+
ω
3
−
ω
4
\Omega = \omega_1-\omega_2+\omega_3-\omega_4
Ω=ω1−ω2+ω3−ω4。
还没完,这里的角速度是机体坐标系下的,我们还需要获得无人机相对于地面系的旋转角速度。按照位置动力学里面旋转矩阵的建立顺序,计算一下从惯性系到机体系的旋转角速度的变换矩阵。
- 将地面系的Z轴的旋转速度通过
R
b
2
b
(
ϕ
)
R_{b2}^b(\phi)
Rb2b(ϕ)和
R
b
1
b
2
(
θ
)
R_{b1}^{b2}(\theta)
Rb1b2(θ)变换到机体系下
v 1 = R b 2 b ( ϕ ) ⋅ R b 1 b 2 ( θ ) [ 0 0 ψ ˙ ] \boldsymbol{v_1} = R_{b2}^{b}\left(\phi\right) \cdot R_{b1}^{b2}\left(\theta\right) \left[\begin{matrix} 0\\0\\ \dot{\psi} \end{matrix}\right] v1=Rb2b(ϕ)⋅Rb1b2(θ) 00ψ˙ - 再将地面系的Y轴的旋转速度通过
R
b
2
b
(
ϕ
)
R_{b2}^b(\phi)
Rb2b(ϕ)变换到机体系下
v 2 = R b 2 b ( ϕ ) [ 0 θ ˙ 0 ] \boldsymbol{v_2} = R_{b2}^{b}\left(\phi\right)\left[\begin{matrix} 0\\\dot{\theta}\\ 0 \end{matrix}\right] v2=Rb2b(ϕ) 0θ˙0 - 此时地面系的X轴的旋转角速度和机体系相等了
v 3 = [ φ ˙ 0 0 ] \boldsymbol{v_3} = \left[\begin{matrix} \dot{\varphi}\\0\\ 0 \end{matrix}\right] v3= φ˙00
进而有
[ p q r ] = v 1 + v 2 + v 3 = [ φ ˙ 0 0 ] + R b 2 b ( φ ) [ 0 θ ˙ 0 ] + R b 2 b ( φ ) ⋅ R b 1 b 2 ( θ ) [ 0 0 ψ ˙ ] = [ 1 0 − sin θ 0 cos φ sin φ cos θ 0 − sin φ cos φ cos θ ] [ φ ˙ θ ˙ ψ ˙ ] \begin{align} \begin{aligned} \left[\begin{matrix} p\\q\\r \end{matrix}\right] &= \boldsymbol{v_1} + \boldsymbol{v_2} + \boldsymbol{v_3}\\ &=\left[\begin{matrix} \dot{\varphi}\\0\\ 0 \end{matrix}\right]+R_{b2}^{b}\left(\varphi\right)\left[\begin{matrix} 0\\\dot{\theta}\\ 0 \end{matrix}\right]+R_{b2}^{b}\left(\varphi\right) \cdot R_{b1}^{b2}\left(\theta\right) \left[\begin{matrix} 0\\0\\ \dot{\psi} \end{matrix}\right]\\ &=\left[\begin{matrix} 1 & 0 & -\sin{\theta}\\ 0 & \cos{\varphi} & \sin{\varphi}\cos{\theta}\\ 0 & -\sin{\varphi} & \cos{\varphi}\cos{\theta} \end{matrix}\right]\left[\begin{matrix} \dot{\varphi}\\\dot{\theta}\\\dot{\psi} \end{matrix}\right] \end{aligned} \end{align} pqr =v1+v2+v3= φ˙00 +Rb2b(φ) 0θ˙0 +Rb2b(φ)⋅Rb1b2(θ) 00ψ˙ = 1000cosφ−sinφ−sinθsinφcosθcosφcosθ φ˙θ˙ψ˙
整理,有
[ φ ˙ θ ˙ ψ ˙ ] = [ 1 tan θ sin φ tan θ cos φ 0 cos φ − sin φ 0 sin φ / cos θ cos φ / cos θ ] [ p q r ] \begin{align} \begin{aligned} \left[\begin{matrix} \dot{\varphi}\\\dot{\theta}\\\dot{\psi} \end{matrix}\right] = \left[\begin{matrix} 1 & \tan{\theta}\sin{\varphi} & \tan{\theta}\cos{\varphi} \\ 0 & \cos{\varphi} & -\sin{\varphi}\\ 0 & \sin{\varphi}/\cos{\theta} & \cos{\varphi}/\cos{\theta} \end{matrix}\right]\left[\begin{matrix} p\\q\\r \end{matrix}\right] \end{aligned} \end{align} φ˙θ˙ψ˙ = 100tanθsinφcosφsinφ/cosθtanθcosφ−sinφcosφ/cosθ pqr
至此,无人机旋转动力学模型建立完成。
综合模型
综合式
(
7
)
(7)
(7),
(
11
)
(11)
(11)和
(
13
)
(13)
(13),可以得到无人机整理的位置-姿态动力学模型为:
{
[
x
˙
y
˙
z
˙
]
=
[
1
0
0
0
1
0
0
0
1
]
[
v
x
v
y
v
z
]
[
v
˙
x
v
˙
y
v
˙
z
]
=
f
m
[
c
(
ψ
)
s
(
θ
)
c
(
φ
)
+
s
(
ψ
)
s
(
φ
)
s
(
ψ
)
s
(
θ
)
c
(
φ
)
−
c
(
ψ
)
s
(
φ
)
c
(
φ
)
c
(
θ
)
]
−
[
0
0
g
]
[
p
˙
q
˙
r
˙
]
=
J
−
1
{
[
τ
x
τ
y
τ
z
]
+
(
[
J
x
x
0
0
0
J
y
y
0
0
0
J
z
z
]
⋅
[
p
q
r
]
)
×
[
p
q
r
]
+
[
−
J
0
q
Ω
J
0
p
Ω
0
]
}
[
φ
˙
θ
˙
ψ
˙
]
=
[
1
tan
θ
sin
φ
tan
θ
cos
φ
0
cos
φ
−
sin
φ
0
sin
φ
/
cos
θ
cos
φ
/
cos
θ
]
[
p
q
r
]
\begin{align} \left\{ \begin{aligned} & \left[\begin{matrix}\dot{x}\\\dot{y}\\\dot{z}\end{matrix}\right] = \left[\begin{matrix} 1&0&0\\0&1&0\\0&0&1 \end{matrix}\right] \left[\begin{matrix}v_x\\v_y\\v_z\end{matrix}\right]\\ & \left[\begin{matrix}\dot{v}_x\\\dot{v}_y\\\dot{v}_z\end{matrix}\right] = \frac{f}{m} \left[\begin{matrix} c(\psi)s(\theta)c(\varphi)+s(\psi)s(\varphi)\\ s(\psi)s(\theta)c(\varphi) - c(\psi)s(\varphi)\\ c(\varphi)c(\theta) \end{matrix}\right]-\left[\begin{matrix}0\\0\\g\end{matrix}\right]\\ & \left[\begin{matrix}\dot{p}\\\dot{q}\\\dot{r}\end{matrix}\right]= J^{-1} \left\{ \left[\begin{matrix}\tau_x\\ \tau_y\\ \tau_z\end{matrix}\right]+ \left(\left[\begin{matrix}J_{xx} & 0&0\\0&J_{yy}&0\\0&0&J_{zz}\end{matrix}\right]\cdot \left[\begin{matrix}p\\q\\r\end{matrix}\right]\right)\times \left[\begin{matrix}p\\q\\r\end{matrix}\right]+ \left[\begin{matrix}-J_0q\Omega\\J_0p\Omega\\0\end{matrix}\right] \right\}\\ &\left[\begin{matrix}\dot{\varphi}\\\dot{\theta}\\\dot{\psi}\end{matrix}\right]= \left[\begin{matrix} 1 & \tan{\theta}\sin{\varphi} & \tan{\theta}\cos{\varphi} \\ 0 & \cos{\varphi} & -\sin{\varphi}\\ 0 & \sin{\varphi}/\cos{\theta} & \cos{\varphi}/\cos{\theta} \end{matrix}\right]\left[\begin{matrix} p\\q\\r \end{matrix}\right] \end{aligned} \right. \end{align}
⎩
⎨
⎧
x˙y˙z˙
=
100010001
vxvyvz
v˙xv˙yv˙z
=mf
c(ψ)s(θ)c(φ)+s(ψ)s(φ)s(ψ)s(θ)c(φ)−c(ψ)s(φ)c(φ)c(θ)
−
00g
p˙q˙r˙
=J−1⎩
⎨
⎧
τxτyτz
+
Jxx000Jyy000Jzz
⋅
pqr
×
pqr
+
−J0qΩJ0pΩ0
⎭
⎬
⎫
φ˙θ˙ψ˙
=
100tanθsinφcosφsinφ/cosθtanθcosφ−sinφcosφ/cosθ
pqr
其中
{
J
=
[
J
x
x
0
0
0
J
y
y
0
0
0
J
z
z
]
Ω
=
ω
1
−
ω
2
+
ω
3
−
ω
4
[
f
τ
x
τ
y
τ
z
]
=
[
C
T
C
T
C
T
C
T
C
T
d
2
−
C
T
d
2
−
C
T
d
2
C
T
d
2
−
C
T
d
2
−
C
T
d
2
C
T
d
2
C
T
d
2
−
C
M
C
M
−
C
M
C
M
]
[
ω
1
2
ω
2
2
ω
3
2
ω
4
2
]
\begin{align} \left\{ \begin{aligned} & J_=\left[\begin{matrix} J_{xx} & 0 & 0 \\ 0 & J_{yy} &0 \\ 0 & 0 & J_{zz} \end{matrix}\right]\\ & \Omega = \omega_1 - \omega_2 + \omega_3 -\omega_4\\ &\left[\begin{matrix} f \\ \tau_x\\\tau_y\\\tau_z \end{matrix}\right]=\left[\begin{matrix} C_T&C_T&C_T&C_T\\ \frac{C_Td}{\sqrt{2}} & -\frac{C_Td}{\sqrt{2}} & -\frac{C_Td}{\sqrt{2}} &\frac{C_Td}{\sqrt{2}}\\ -\frac{C_Td}{\sqrt{2}} & -\frac{C_Td}{\sqrt{2}} & \frac{C_Td}{\sqrt{2}} & \frac{C_Td}{\sqrt{2}}\\ -C_M &C_M&-C_M&C_M \end{matrix}\right]\left[\begin{matrix} \omega_1^2\\\omega_2^2\\\omega_3^2\\\omega_4^2 \end{matrix}\right] \end{aligned} \right. \end{align}
⎩
⎨
⎧J=
Jxx000Jyy000Jzz
Ω=ω1−ω2+ω3−ω4
fτxτyτz
=
CT2CTd−2CTd−CMCT−2CTd−2CTdCMCT−2CTd2CTd−CMCT2CTd2CTdCM
ω12ω22ω32ω42
动力分配
式 ( 15 ) (15) (15)中最后一个表达式就是动力分配矩阵,实际设计控制器时一般都不直接设计无人机四个电机的转速,而是先设计一个虚拟的控制量:无人机的升力 f f f,和无人机三个方向的转矩 τ x \tau_x τx, τ y \tau_y τy和 τ z \tau_z τz。然后通过动力分配矩阵,将 [ f τ x τ y τ z ] \left[\begin{matrix} f \\ \tau_x\\\tau_y\\\tau_z \end{matrix}\right] fτxτyτz 反向映射回 [ ω 1 ω 2 ω 3 ω 4 ] \left[\begin{matrix} \omega_1\\\omega_2\\\omega_3\\\omega_4 \end{matrix}\right] ω1ω2ω3ω4 。实际使用时,可以先验算一下动力分配矩阵是不是满秩 (非奇异)。
无人机串级PID分为外环和内环两个,外环PID给出的实际上是无人机的参考加速度指令,内环PID给出的是无人机的合外力矩指令。定义外环的位置控制PID输出为
u
x
=
P
I
D
x
.
o
u
t
(
x
,
x
d
,
x
˙
,
x
˙
d
)
u
y
=
P
I
D
y
.
o
u
t
(
y
,
y
d
,
y
˙
,
y
˙
d
)
u
z
=
P
I
D
z
.
o
u
t
(
z
,
z
d
,
z
˙
,
z
˙
d
)
\begin{align} \begin{aligned} &u_x = PID_x.out(x, x_d, \dot{x}, \dot{x}_d)\\ &u_y = PID_y.out(y, y_d, \dot{y}, \dot{y}_d)\\ &u_z = PID_z.out(z, z_d, \dot{z}, \dot{z}_d) \end{aligned} \end{align}
ux=PIDx.out(x,xd,x˙,x˙d)uy=PIDy.out(y,yd,y˙,y˙d)uz=PIDz.out(z,zd,z˙,z˙d)
根据式
(
7
)
(7)
(7)的后三个方程,有
[
u
x
u
y
u
z
]
=
f
m
[
c
(
ψ
)
s
(
θ
)
c
(
ϕ
)
+
s
(
ψ
)
s
(
ϕ
)
s
(
ψ
)
s
(
θ
)
c
(
ϕ
)
−
c
(
ψ
)
s
(
ϕ
)
c
(
ϕ
)
c
(
θ
)
−
m
g
]
\begin{align} \begin{aligned} \left[\begin{matrix} u_x\\u_y\\u_z \end{matrix}\right]=\frac{f}{m} \left[\begin{matrix} c(\psi)s(\theta)c(\phi)+s(\psi)s(\phi)\\ s(\psi)s(\theta)c(\phi) - c(\psi)s(\phi)\\ c(\phi)c(\theta)-mg \end{matrix}\right] \end{aligned} \end{align}
uxuyuz
=mf
c(ψ)s(θ)c(ϕ)+s(ψ)s(ϕ)s(ψ)s(θ)c(ϕ)−c(ψ)s(ϕ)c(ϕ)c(θ)−mg
求出
f
=
m
u
x
2
+
u
y
2
+
(
u
z
+
g
)
2
f=m\sqrt{u_x^2+u_y^2+\left(u_z+g\right)^2}
f=mux2+uy2+(uz+g)2
结合参考偏航角
ψ
d
\psi_d
ψd (人为设定),同时求出参考滚转角,参考俯仰角为
{
ϕ
d
=
arcsin
[
(
u
x
sin
ψ
d
−
u
y
cos
ψ
d
)
m
f
]
θ
d
=
arcsin
[
u
x
m
−
U
1
sin
ψ
d
sin
ϕ
d
f
cos
ψ
d
cos
ϕ
d
]
\begin{align} \left\{ \begin{aligned} & \phi_d = \arcsin{\left[\left(u_x\sin{\psi_d}-u_y\cos{\psi_d}\right)\frac{m}{f}\right]}\\ & \theta_d = \arcsin{\left[\frac{u_xm-U_1\sin{\psi_d}\sin{\phi_d}}{f\cos{\psi_d}\cos{\phi_d}}\right]} \end{aligned} \right. \end{align}
⎩
⎨
⎧ϕd=arcsin[(uxsinψd−uycosψd)fm]θd=arcsin[fcosψdcosϕduxm−U1sinψdsinϕd]
接下来是姿态控制,由于姿态回路不会被位置影响,所以姿态环的PID控制输出直接可以对应无人机三个方向的合外力矩
{
τ
x
=
P
I
D
r
o
l
l
.
o
u
t
(
ϕ
,
ϕ
d
,
ϕ
˙
,
ϕ
˙
d
)
τ
y
=
P
I
D
p
i
t
c
h
.
o
u
t
(
θ
,
θ
,
θ
˙
,
θ
˙
d
)
τ
z
=
P
I
D
y
a
w
.
o
u
t
(
ψ
,
ψ
d
,
ψ
˙
,
ψ
˙
d
)
\begin{align} \left\{ \begin{aligned} & \tau_x = PID_{roll}.out(\phi,\phi_d,\dot{\phi},\dot{\phi}_d) \\ & \tau_y = PID_{pitch}.out(\theta,\theta,\dot{\theta},\dot{\theta}_d) \\ & \tau_z = PID_{yaw}.out(\psi,\psi_d,\dot{\psi},\dot{\psi}_d) \end{aligned} \right. \end{align}
⎩
⎨
⎧τx=PIDroll.out(ϕ,ϕd,ϕ˙,ϕ˙d)τy=PIDpitch.out(θ,θ,θ˙,θ˙d)τz=PIDyaw.out(ψ,ψd,ψ˙,ψ˙d)
根据式
(
15
)
(15)
(15)最后一个公式,将动力分配矩阵记为
P
=
[
C
T
C
T
C
T
C
T
C
T
d
2
−
C
T
d
2
−
C
T
d
2
C
T
d
2
−
C
T
d
2
−
C
T
d
2
C
T
d
2
C
T
d
2
−
C
M
C
M
−
C
M
C
M
]
P=\left[\begin{matrix} C_T&C_T&C_T&C_T\\ \frac{C_Td}{\sqrt{2}} & -\frac{C_Td}{\sqrt{2}} & -\frac{C_Td}{\sqrt{2}} &\frac{C_Td}{\sqrt{2}}\\ -\frac{C_Td}{\sqrt{2}} & -\frac{C_Td}{\sqrt{2}} & \frac{C_Td}{\sqrt{2}} & \frac{C_Td}{\sqrt{2}}\\ -C_M &C_M&-C_M&C_M \end{matrix}\right]
P=
CT2CTd−2CTd−CMCT−2CTd−2CTdCMCT−2CTd2CTd−CMCT2CTd2CTdCM
则无人机四个电机转速的平方为
[
ω
1
2
ω
2
2
ω
3
2
ω
4
2
]
=
P
−
1
[
f
τ
x
τ
y
τ
z
]
\begin{align} \begin{aligned} \left[\begin{matrix} \omega_1^2\\\omega_2^2\\\omega_3^2\\\omega_4^2 \end{matrix}\right]=P^{-1}\left[\begin{matrix} f\\\tau_x\\\tau_y\\\tau_z \end{matrix}\right] \end{aligned} \end{align}
ω12ω22ω32ω42
=P−1
fτxτyτz
至此,可以得到控制指令。上面的PID控制器仅仅是一个示例,实际上PID的输入参数有哪些,或者是否要使用PID控制器,都是根据设计者自己的需求去设计的,甚至可以在位置和参考加速度指令之间再加一个参考速度控制回路,在加速度与参考合外力矩之间加一个参考角速度控制回路,等等。文章来源:https://www.toymoban.com/news/detail-428263.html
代码
文末附上仿真代码 (PID)没有经过精心设计,参数也没怎么调,不过方便阅读和修改。
Github链接
使用时,在\environment\env\下面的“PIDControl”和“UAV”文件夹中。文章来源地址https://www.toymoban.com/news/detail-428263.html
到了这里,关于四旋翼无人机建模 (附github源代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!