首先打个小广告,一直很喜欢无人机,最近有空研究了一下Pixhawk(PX4)飞控,并把总结和心得写到公众号 “SantyNotebook” 里和大家分享,感兴趣的朋友可以一起来交流一下,如何从零手写无人机飞控~
本篇同步发在公众号推送中《串级PID控制四旋翼姿态》
这篇介绍一下,在古典理论PID控制算法下,四旋翼如何保持姿态平稳状态
一 模型解耦线性化
回顾上一篇的推导结果,对于
X
X
X型四旋翼
位置模型
[
x
¨
y
¨
z
¨
]
=
[
−
T
m
(
cos
ψ
sin
θ
sin
ϕ
+
sin
ψ
sin
ϕ
)
−
T
m
(
sin
ψ
sin
θ
cos
ϕ
−
cos
ψ
sin
ϕ
)
g
−
T
m
cos
ϕ
cos
θ
]
\left[\begin{array}{c} \ddot{x} \\ \ddot{y} \\ \ddot{z} \end{array}\right]=\left[\begin{array}{c} -\frac{T}{m}(\cos \psi \sin \theta \sin \phi+\sin \psi \sin \phi) \\ -\frac{T}{m}(\sin \psi \sin \theta \cos \phi-\cos \psi \sin \phi) \\ g-\frac{T}{m} \cos \phi \cos \theta \end{array}\right]
x¨y¨z¨
=
−mT(cosψsinθsinϕ+sinψsinϕ)−mT(sinψsinθcosϕ−cosψsinϕ)g−mTcosϕcosθ
姿态小扰动模型
[
ϕ
¨
θ
¨
ψ
¨
]
=
[
1
I
x
x
[
τ
x
+
qr
(
I
y
y
−
I
z
z
)
−
J
1
q
Ω
]
1
I
y
y
[
τ
y
+
qr
(
I
z
z
−
I
x
x
)
−
J
1
p
Ω
]
1
I
z
z
[
τ
z
+
p
q
(
I
x
x
−
I
y
y
)
]
]
{\left[\begin{array}{c} \ddot{\phi} \\ \ddot{\theta} \\ \ddot{\psi} \end{array}\right]=\left[\begin{array}{l} \frac{1}{I_{x x}}\left[\tau_{x}+\operatorname{qr}\left(I_{y y}-I_{z z}\right)-J_{1} q \Omega\right] \\ \frac{1}{I_{y y}}\left[\tau_{y}+\operatorname{qr}\left(I_{z z}-I_{x x}\right)-J_{1} p \Omega\right] \\ \frac{1}{I_{z z}}\left[\tau_{z}+p q\left(I_{x x}-I_{y y}\right)\right] \end{array}\right]}
ϕ¨θ¨ψ¨
=
Ixx1[τx+qr(Iyy−Izz)−J1qΩ]Iyy1[τy+qr(Izz−Ixx)−J1pΩ]Izz1[τz+pq(Ixx−Iyy)]
Ω
=
−
ϖ
1
+
ϖ
2
−
ϖ
3
+
ϖ
4
\Omega=-\varpi_{1}+\varpi_{2}-\varpi_{3}+\varpi_{4}
Ω=−ϖ1+ϖ2−ϖ3+ϖ4
可见,模型控制变量彼此高度耦合,而PID控制器适用于线性模型,因此需要对模型解耦线性化
显然,如果四旋翼保持姿态平稳,位置固定,需要外力平衡,即
m
g
=
T
mg=T
mg=T
而对于姿态模型,通常四个电机转速可以彼此抵消
Ω
=
0
\Omega=0
Ω=0,则陀螺力矩项可以忽略。于是,小扰动模型简化为
[
ϕ
¨
θ
¨
ψ
¨
]
=
[
1
I
x
x
[
τ
x
+
qr
(
I
y
y
−
I
z
z
)
]
1
I
y
y
[
τ
y
+
qr
(
I
z
z
−
I
x
x
)
]
1
I
z
z
[
τ
z
+
p
q
(
I
x
x
−
I
y
y
)
]
]
{\left[\begin{array}{c} \ddot{\phi} \\ \ddot{\theta} \\ \ddot{\psi} \end{array}\right]=\left[\begin{array}{l} \frac{1}{I_{x x}}\left[\tau_{x}+\operatorname{qr}\left(I_{y y}-I_{z z}\right)\right] \\ \frac{1}{I_{y y}}\left[\tau_{y}+\operatorname{qr}\left(I_{z z}-I_{x x}\right)\right] \\ \frac{1}{I_{z z}}\left[\tau_{z}+p q\left(I_{x x}-I_{y y}\right)\right] \end{array}\right]}
ϕ¨θ¨ψ¨
=
Ixx1[τx+qr(Iyy−Izz)]Iyy1[τy+qr(Izz−Ixx)]Izz1[τz+pq(Ixx−Iyy)]
另外,若四旋翼处在平衡状态,其姿态角均为小量,有
q
r
≈
q
0
r
0
+
r
0
(
q
−
q
0
)
+
q
0
(
r
−
r
0
)
=
0
q r \approx q_{0} r_{0}+r_{0}\left(q-q_{0}\right)+q_{0}\left(r-r_{0}\right)=0
qr≈q0r0+r0(q−q0)+q0(r−r0)=0
故方程可以进一步简化
[
ϕ
¨
θ
¨
ψ
¨
]
=
[
1
I
x
x
1
I
y
y
1
I
z
z
]
[
τ
x
τ
y
τ
z
]
\left[\begin{array}{c} \ddot{\phi} \\ \ddot{\theta} \\ \ddot{\psi} \end{array}\right]=\left[\begin{array}{ccc} \frac{1}{I_{x x}} & & \\ & \frac{1}{I_{y y}} & \\ & & \frac{1}{I_{z z}} \end{array}\right]\left[\begin{array}{l} \tau_{x} \\ \tau_{y} \\ \tau_{z} \end{array}\right]
ϕ¨θ¨ψ¨
=
Ixx1Iyy1Izz1
τxτyτz
至此,四旋翼姿态角之间彼此解耦,并且每个姿态角本身都是一个二阶系统
ϕ
¨
=
τ
x
I
x
x
→
ϕ
(
s
)
=
1
s
2
τ
x
I
x
x
\ddot{\phi}=\frac{\tau_{x}}{I_{x x}} \rightarrow \phi(s)=\frac{1}{s^{2}} \frac{\tau_{x}}{I_{x x}}
ϕ¨=Ixxτx→ϕ(s)=s21Ixxτx
二 PID控制器设计
在传统控制理论中,使用比例-积分-微分控制器完成对线性模型控制
u
(
t
)
=
K
p
e
(
t
)
+
K
i
∫
0
t
e
(
τ
)
d
τ
+
K
d
d
d
t
e
(
t
)
u(t)=K_{p} e(t)+K_{i} \int_{0}^{t} e(\tau) d \tau+K_{d} \frac{d}{d t} e(t)
u(t)=Kpe(t)+Ki∫0te(τ)dτ+Kddtde(t)
其中
e
(
t
)
e(t)
e(t) 为当前时刻的误差
K
p
K
i
K
d
K_pK_iK_d
KpKiKd为比例积分微分增益,需要调试确定。比例系数可以用来加快调节,但是过大会引起系统响应幅度过大,甚至不稳定;积分项用来减少稳态误差,但是过大会引起系统迟滞;微分项是瞬态的考量,可以预测误差变化趋势,但是过大会引起系统过于敏感
u
(
t
)
u(t)
u(t)计算结果作为控制量输入给系统
对于四旋翼的姿态控制,行业内通常是采用串级PID(Cascading PID)以达到更好的控制效果。外环控制角度,内环控制角速度,如下图
三 四旋翼飞行状态规律
四旋翼是一个欠驱动系统。它的前后、左右、上下、左右旋转飞行依赖于姿态俯仰、滚转、油门变化、偏航来进一步完成
通常,电机产生的拉力与其转速为平方正比关系,即某个电机产生的拉力可以表达为
T
=
c
T
ω
~
2
T=c_T\tilde{\omega}^2
T=cTω~2。其中常量
c
T
c_T
cT是一个转化率,显然与螺旋桨效率有关
根据X四旋翼的几何关系,将力矩代入,有
[
ϕ
¨
θ
¨
ψ
¨
T
]
=
[
k
−
k
−
k
k
k
k
−
k
−
k
k
−
k
k
−
k
k
k
k
k
]
[
ϖ
1
2
ϖ
2
2
ϖ
3
2
ϖ
4
2
]
\left[\begin{array}{c} \ddot{\phi} \\ \ddot{\theta} \\ \ddot{\psi} \\ T \end{array}\right]=\left[\begin{array}{cccc} k & -k & -k & k \\ k & k & -k & -k \\ k & -k & k & -k \\ k & k & k & k \end{array}\right]\left[\begin{array}{c} \varpi_{1}^{2} \\ \varpi_{2}^{2} \\ \varpi_{3}^{2} \\ \varpi_{4}^{2} \end{array}\right]
ϕ¨θ¨ψ¨T
=
kkkk−kk−kk−k−kkkk−k−kk
ϖ12ϖ22ϖ32ϖ42
可见,1,2电机一组,3,4电机一组,组内同时提高/降低转速可以实现俯仰运动;1,4电机一组,2,3电机一组,可以实现滚转运动;1,3一组,2,4一组,则可以实现偏航运动;四个电机同时提高(降低)转速则飞行器向上(向下)运动
综上,我们了解了四旋翼解耦的二阶系统模型,以及行业内如何设计串级PID对四旋翼做姿态控制。现代控制理论在状态空间内设计控制器,衍生了最优控制,鲁棒控制,模型预测控制等等多种控制策略,我们放在后续文章中了解
然而,理想很丰满,计算结果只能作为参考,实际模型系统参数往往通过辨识实验来确定。PID参数也通常结合实际飞行效果来调节,而PID控制器本身在微处理器(micro-processor)中的实现也是离散化的近似计算,对于其实现细节,将在后面的内容中和大家一起探讨~