一、引言
之前介绍了四旋翼建模与pid双环控制器设计,本次打算分享一下四旋翼滑模控制器的设计,参考文献【1】(Jiang X Y , Su C L , Xu Y P , et al. An adaptive backstepping sliding mode method for flight attitude of quadrotor UAVs[J]. Journal of Central South University, 2018, 25(3):616-631…)
二、模型搭建
四旋翼的模型在我之前的博客(四旋翼无人机Matlab建模)已经介绍过,这里不再赘述,四旋翼的模型如下:
{
x
¨
=
u
1
m
(
s
ψ
s
ϕ
+
c
ψ
c
ϕ
s
θ
)
+
d
1
y
¨
=
u
1
m
(
s
ψ
s
θ
c
ϕ
−
c
ψ
s
ϕ
)
+
d
2
z
¨
=
u
1
m
c
θ
c
ϕ
−
g
+
d
3
ϕ
¨
=
θ
˙
ψ
˙
(
I
y
y
−
I
z
z
I
x
x
)
+
u
2
I
x
x
+
d
4
θ
¨
=
ϕ
˙
ψ
˙
(
I
z
z
−
I
x
x
I
y
y
)
+
u
3
I
y
y
+
d
5
ψ
¨
=
ϕ
˙
θ
˙
(
I
x
x
−
I
y
y
I
z
z
)
+
u
4
I
z
z
+
d
6
(
1
)
\left\{\begin{matrix} \ddot{x}=\frac{ u_{1}}{m}(s\psi s\phi +c\psi c\phi s\theta )+d_{1}\\ \ddot{y}=\frac{ u_{1}}{m}(s\psi s\theta c\phi - c\psi s\phi)+d_{2}\\ \ddot{z}=\frac{ u_{1}}{m}c\theta c\phi -g+d_{3}\\ \ddot{\phi }=\dot{\theta }\dot{\psi }(\frac{I_{yy}-I_{zz}}{I_{xx}})+\frac{u_{2}}{I_{xx}}+d_{4}\\ \ddot{\theta }=\dot{\phi }\dot{\psi }(\frac{I_{zz}-I_{xx}}{I_{yy}})+\frac{u_{3}}{I_{yy}}+d_{5}\\ \ddot{\psi }=\dot{\phi }\dot{\theta }(\frac{I_{xx}-I_{yy}}{I_{zz}})+\frac{u_{4}}{I_{zz}}+d_{6} \end{matrix}\right.(1)
⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧x¨=mu1(sψsϕ+cψcϕsθ)+d1y¨=mu1(sψsθcϕ−cψsϕ)+d2z¨=mu1cθcϕ−g+d3ϕ¨=θ˙ψ˙(IxxIyy−Izz)+Ixxu2+d4θ¨=ϕ˙ψ˙(IyyIzz−Ixx)+Iyyu3+d5ψ¨=ϕ˙θ˙(IzzIxx−Iyy)+Izzu4+d6(1)式中,
d
i
,
(
i
=
1
,
2...6
)
d_{i},(i=1,2...6)
di,(i=1,2...6)是系统扰动。
但四旋翼模型(1)经过了部分简化合并,即在力矩平衡方程中将四旋翼螺旋桨的对无人机产生影响归到
d
i
d_{i}
di干扰项中,没有进行表示。更常用的四旋翼的动力学模型如下
{
x
¨
=
u
1
m
(
s
ψ
s
ϕ
+
c
ψ
c
ϕ
s
θ
)
+
d
1
y
¨
=
u
1
m
(
s
ψ
s
θ
c
ϕ
−
c
ψ
s
ϕ
)
+
d
2
z
¨
=
u
1
m
c
θ
c
ϕ
−
g
+
d
3
ϕ
¨
=
θ
˙
ψ
˙
(
I
y
y
−
I
z
z
I
x
x
)
+
u
2
I
x
x
+
d
4
−
I
r
I
x
x
θ
˙
ω
r
θ
¨
=
ϕ
˙
ψ
˙
(
I
z
z
−
I
x
x
I
y
y
)
+
u
3
I
y
y
+
d
5
−
I
r
I
y
y
ϕ
˙
ω
r
ψ
¨
=
ϕ
˙
θ
˙
(
I
x
x
−
I
y
y
I
z
z
)
+
u
4
I
z
z
+
d
6
(
2
)
\left\{\begin{matrix} \ddot{x}=\frac{ u_{1}}{m}(s\psi s\phi +c\psi c\phi s\theta )+d_{1}\\ \ddot{y}=\frac{ u_{1}}{m}(s\psi s\theta c\phi - c\psi s\phi)+d_{2}\\ \ddot{z}=\frac{ u_{1}}{m}c\theta c\phi -g+d_{3}\\ \ddot{\phi }=\dot{\theta }\dot{\psi }(\frac{I_{yy}-I_{zz}}{I_{xx}})+\frac{u_{2}}{I_{xx}}+d_{4}-\frac{I_{r}}{I_{xx}}\dot{\theta}\omega_{r}\\ \ddot{\theta }=\dot{\phi }\dot{\psi }(\frac{I_{zz}-I_{xx}}{I_{yy}})+\frac{u_{3}}{I_{yy}}+d_{5}-\frac{I_{r}}{I_{yy}}\dot{\phi}\omega_{r}\\ \ddot{\psi }=\dot{\phi }\dot{\theta }(\frac{I_{xx}-I_{yy}}{I_{zz}})+\frac{u_{4}}{I_{zz}}+d_{6} \end{matrix}\right.(2)
⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧x¨=mu1(sψsϕ+cψcϕsθ)+d1y¨=mu1(sψsθcϕ−cψsϕ)+d2z¨=mu1cθcϕ−g+d3ϕ¨=θ˙ψ˙(IxxIyy−Izz)+Ixxu2+d4−IxxIrθ˙ωrθ¨=ϕ˙ψ˙(IyyIzz−Ixx)+Iyyu3+d5−IyyIrϕ˙ωrψ¨=ϕ˙θ˙(IzzIxx−Iyy)+Izzu4+d6(2)式中
ω
r
=
ω
1
+
ω
3
−
ω
2
−
ω
4
\omega_{r} = \omega_{1}+\omega_{3}-\omega_{2}-\omega_{4}
ωr=ω1+ω3−ω2−ω4
I
r
I_{r}
Ir是螺旋桨旋转的转动惯量。两个模型都可以使用,如果你想表达的更准确,建议使用模型(2)。下面在simulink搭建模型(2)并为其设计滑模控制器。在建立(2)的simulink模型时,需要注意的点在于怎么获得四旋翼各个旋翼的转速,该转速可以通过
u
1
,
u
2
,
u
3
,
u
4
u_{1},u_{2},u_{3},u_{4}
u1,u2,u3,u4算得。由四旋翼无人机Matlab建模可知,控制u的表达式如下
[
u
1
u
2
u
3
u
4
]
=
[
∑
j
=
1
4
ρ
ω
j
2
L
ρ
(
ω
4
2
−
ω
2
2
)
L
ρ
(
ω
1
2
−
ω
3
2
)
∑
j
=
1
4
(
−
1
)
j
γ
ω
j
2
]
=
B
[
ω
1
2
ω
2
2
ω
3
2
ω
4
2
]
(
3
)
\begin{bmatrix} u_{1}\\ u_{2}\\ u_{3}\\ u_{4} \end{bmatrix}=\begin{bmatrix} \sum_{j=1}^{4}\rho \omega _{j}^{2}\\ L\rho(\omega _{4}^{2}-\omega _{2}^{2})\\ L\rho(\omega _{1}^{2}-\omega _{3}^{2})\\ \sum_{j=1}^{4}(-1)^{j}\gamma \omega _{j}^{2} \end{bmatrix}=B\begin{bmatrix} \omega_{1}^{2} \\ \omega_{2}^{2}\\ \omega_{3}^{2}\\ \omega_{4}^{2} \end{bmatrix}(3)
⎣⎢⎢⎡u1u2u3u4⎦⎥⎥⎤=⎣⎢⎢⎡∑j=14ρωj2Lρ(ω42−ω22)Lρ(ω12−ω32)∑j=14(−1)jγωj2⎦⎥⎥⎤=B⎣⎢⎢⎡ω12ω22ω32ω42⎦⎥⎥⎤(3)其中
B
=
[
ρ
ρ
ρ
ρ
0
−
L
ρ
0
L
ρ
L
ρ
0
−
L
ρ
0
−
γ
γ
−
γ
γ
]
(
4
)
B = \begin{bmatrix} \rho & \rho& \rho& \rho\\ 0& -L\rho & 0& L\rho \\ L\rho & 0& -L\rho & 0\\ -\gamma& \gamma& -\gamma&\gamma \end{bmatrix}(4)
B=⎣⎢⎢⎡ρ0Lρ−γρ−Lρ0γρ0−Lρ−γρLρ0γ⎦⎥⎥⎤(4)然后两边同时乘以
B
−
1
B^{-1}
B−1,就可以得到各旋翼转速的平方,开方后得到各旋翼转速。B矩阵与四旋翼的机体坐标系方向以及控制力/力矩u的定义有关,该模块simulink模型如下:
具体代码如下
function Omegar = fcn(U1, U2, U3, U4)
%rho无人机升力系数
%L四旋翼臂长
%gama无人机阻力系数
B = [rho rho rho rho;
0 -L*rho 0 L*rho;
L*rho 0 -L*rho 0;
-gama gama -gama gama];
U = [U1 U2 U3 U4]';
BU = B\U;
Omega1 = sqrt(abs(BU(1)));
Omega2 = sqrt(abs(BU(2)));
Omega3 = sqrt(abs(BU(3)));
Omega4 = sqrt(abs(BU(4)));
Omegar = Omega1 - Omega2 + Omega3 - Omega4;
整个模型如下:
参数选择如下:
参数名称 | 参数值 |
---|---|
无人机质量m | 0.65 k g 0.65kg 0.65kg |
重力加速度g | 9.8 m / s 2 9.8m/s^{2} 9.8m/s2 |
无人机绕x轴转动惯量Ixx | 7.5 × 1 0 − 3 k g / m 2 7.5\times10^{-3}kg/m^{2} 7.5×10−3kg/m2 |
无人机绕y轴转动惯量Iyy | 7.5 × 1 0 − 3 k g / m 2 7.5\times10^{-3}kg/m^{2} 7.5×10−3kg/m2 |
无人机绕z轴转动惯量Izz | 1.3 × 1 0 − 2 k g / m 2 1.3\times10^{-2}kg/m^{2} 1.3×10−2kg/m2 |
无人机转子转动惯量Ir | 6 × 1 0 − 5 k g / m 2 6\times10^{-5}kg/m^{2} 6×10−5kg/m2 |
无人机臂长L | 0.23 m 0.23m 0.23m |
无人机升力系数rho | 3.1 × 1 0 − 5 3.1\times10^{-5} 3.1×10−5 |
无人机阻力系数gama | 7.5 × 1 0 − 7 7.5\times10^{-7} 7.5×10−7 |
三、内环控制器设计
模型搭建好了后,开始设计控制器。四旋翼是个欠驱动系统,四个输入控制六个状态,状态之间存在耦合,例如当四旋翼存在俯仰角时,四旋翼的x方向一定会出现位移。因此,常见的处理方式是将四旋翼设计为姿态与位置两个环,外环控制器的到姿态的期望,再让内环控制器完成无人机控制。先设计内环控制器(暂时先不考虑干扰与不确定性)。
以无人机横滚角
ϕ
\phi
ϕ为例,令
x
1
=
ϕ
,
x
2
=
ϕ
˙
x_{1} = \phi,x_{2} = \dot{\phi}
x1=ϕ,x2=ϕ˙,根据模型(2),横滚角的子系统可以改写如下:
{
x
1
˙
=
x
2
x
2
˙
=
f
(
θ
˙
,
ψ
˙
)
+
u
2
I
x
x
(
5
)
\left\{\begin{matrix} \dot{x_{1}}& = & x_{2}\\ \dot{x_{2}}& = &f(\dot{\theta},\dot{\psi})+\frac{u_{2}}{I_{xx}} \end{matrix}\right.(5)
{x1˙x2˙==x2f(θ˙,ψ˙)+Ixxu2(5)式中
f
(
θ
˙
,
ψ
˙
)
=
θ
˙
ψ
˙
(
I
y
y
−
I
z
z
I
x
x
)
−
I
r
I
x
x
θ
˙
ω
r
(
6
)
f(\dot{\theta},\dot{\psi}) = \dot{\theta }\dot{\psi }(\frac{I_{yy}-I_{zz}}{I_{xx}})-\frac{I_{r}}{I_{xx}}\dot{\theta}\omega_{r}(6)
f(θ˙,ψ˙)=θ˙ψ˙(IxxIyy−Izz)−IxxIrθ˙ωr(6)定义跟踪误差
e
=
x
1
−
x
d
(
7
)
e = x_{1}-x_{d}(7)
e=x1−xd(7)式中
x
d
x_{d}
xd是期望轨迹,定义简单滑模面如下
s
=
e
+
e
˙
(
8
)
s = e+\dot{e}(8)
s=e+e˙(8)对滑模面进行求导
s
˙
=
e
¨
+
e
˙
=
x
1
¨
−
x
d
¨
+
x
1
˙
−
x
d
˙
(
9
)
\dot{s}=\ddot{e}+\dot{e}=\ddot{x_{1}}-\ddot{x_{d}}+\dot{x_{1}}-\dot{x_{d}}(9)
s˙=e¨+e˙=x1¨−xd¨+x1˙−xd˙(9)由(5)得
x
1
¨
=
x
2
˙
=
f
(
θ
˙
,
ψ
˙
)
+
u
2
I
x
x
(
10
)
\ddot{x_{1}}=\dot{x_{2}}=f(\dot{\theta},\dot{\psi})+\frac{u_{2}}{I_{xx}}(10)
x1¨=x2˙=f(θ˙,ψ˙)+Ixxu2(10)将(10)带入(9)
s
˙
=
f
(
θ
˙
,
ψ
˙
)
+
u
2
I
x
x
+
x
1
˙
−
x
d
¨
−
x
d
˙
(
11
)
\dot{s}=f(\dot{\theta},\dot{\psi})+\frac{u_{2}}{I_{xx}}+\dot{x_{1}}-\ddot{x_{d}}-\dot{x_{d}}(11)
s˙=f(θ˙,ψ˙)+Ixxu2+x1˙−xd¨−xd˙(11)设计
u
2
u_{2}
u2使得
s
˙
=
\dot{s}=
s˙=趋近律,则设计
u
2
=
I
x
x
(
x
d
¨
+
x
d
˙
−
f
(
θ
˙
,
ψ
˙
)
−
x
1
˙
−
s
−
s
i
g
n
(
s
)
)
(
12
)
u_{2}=I_{xx}(\ddot{x_{d}}+\dot{x_{d}}-f(\dot{\theta},\dot{\psi})-\dot{x_{1}}-s-sign(s))(12)
u2=Ixx(xd¨+xd˙−f(θ˙,ψ˙)−x1˙−s−sign(s))(12)代入式(11),可以使得
s
s
˙
<
0
s\dot{s}<0
ss˙<0,控制器设计完成,俯仰角与偏航角设计与横滚角相同,这里不在赘述,直接给结果。
设俯仰角
θ
\theta
θ的期望跟踪信号为
θ
d
\theta_{d}
θd,则
e
=
θ
−
θ
d
e = \theta-\theta_{d}
e=θ−θd
e
˙
=
θ
˙
−
θ
d
˙
\dot{e} = \dot{\theta}-\dot{\theta_{d}}
e˙=θ˙−θd˙
s
=
e
+
e
˙
s=e+\dot{e}
s=e+e˙
f
(
ϕ
˙
,
ψ
˙
)
=
ϕ
˙
ψ
˙
(
I
z
z
−
I
x
x
I
y
y
)
−
I
r
I
y
y
ϕ
˙
ω
r
f(\dot{\phi},\dot{\psi})=\dot{\phi }\dot{\psi }(\frac{I_{zz}-I_{xx}}{I_{yy}})-\frac{I_{r}}{I_{yy}}\dot{\phi}\omega_{r}
f(ϕ˙,ψ˙)=ϕ˙ψ˙(IyyIzz−Ixx)−IyyIrϕ˙ωr
u
3
=
I
y
y
(
θ
d
¨
−
f
(
ϕ
˙
,
ψ
˙
)
−
e
˙
−
s
−
s
i
g
n
(
s
)
)
(
13
)
u_{3} = I_{yy}(\ddot{\theta_{d}}-f(\dot{\phi},\dot{\psi})-\dot{e}-s-sign(s))(13)
u3=Iyy(θd¨−f(ϕ˙,ψ˙)−e˙−s−sign(s))(13)
同理,偏航角按同样方法设计,最终控制律为
u
4
=
I
z
z
(
ψ
¨
−
f
(
ϕ
˙
,
θ
˙
)
−
e
˙
−
s
−
s
i
g
n
(
s
)
)
(
14
)
u_{4}=I_{zz}(\ddot{\psi}-f(\dot{\phi},\dot{\theta})-\dot{e}-s-sign(s))(14)
u4=Izz(ψ¨−f(ϕ˙,θ˙)−e˙−s−sign(s))(14)最终完成内环设计,横滚角控制器simulink模型如下:
matlab function中代码如下
function u2 = fcn(fand, dfand, ddfand, fan, dfan, dtheta, dpsi, Omegar, Ixx, Iyy, Izz, Ir)
e = fan -fand;
de = dfan - dfand;
s = e + de;
f = dtheta*dpsi*(Iyy-Izz)/Ixx-Ir*dtheta*Omegar/Ixx;
u2 = Ixx*(ddfand+dfand-f-dfan-s-sign(s));
假设横滚角期望轨迹为sin,跟踪效果如下:
图中黄色的为sin曲线,蓝色的为无人机
ϕ
\phi
ϕ跟踪情况(无人机俯仰与偏航角控制器可用相同方法测试),从图像可以看到内环控制器设计没有问题,接下来进行外环控制器设计。
四、外环控制器设计
外环控制器控制的为无人机位置,先来讨论比较独立z子系统。
z
¨
=
u
1
m
c
θ
c
ϕ
−
g
(
15
)
\ddot{z}=\frac{ u_{1}}{m}c\theta c\phi -g(15)
z¨=mu1cθcϕ−g(15)该子系统就是一个简单二阶系统,定义理想跟踪指令为
z
d
z_{d}
zd,跟踪误差
e
z
=
z
−
z
d
(
16
)
e_{z}= z-z_{d}(16)
ez=z−zd(16)滑模面设计为
s
z
=
e
z
˙
+
e
z
(
17
)
s_{z}=\dot{e_{z}}+e_{z}(17)
sz=ez˙+ez(17)则控制律设计如下
u
1
=
m
c
θ
c
ϕ
(
g
+
z
d
¨
−
e
z
˙
−
s
z
−
s
i
g
n
(
s
z
)
)
(
18
)
u_{1}=\frac{m}{c\theta c\phi}(g+\ddot{z_{d}}-\dot{e_{z}}-s_{z}-sign(s_{z}))(18)
u1=cθcϕm(g+zd¨−ez˙−sz−sign(sz))(18)
令z跟踪曲线为sin曲线,则在该控制器下无人机z方向跟踪情况如下
黄色为期望曲线,蓝色为跟踪曲线,z方向的控制器设计完成。
水平方向的x,y子系统与
ϕ
,
θ
\phi,\theta
ϕ,θ存在动态耦合,即x,y的变化实际由
ϕ
,
θ
\phi,\theta
ϕ,θ控制,
u
1
u_{1}
u1只是一个状态量。因此,xy方向的状态方程可以改写如下(忽略干扰):
{
x
¨
=
u
x
u
1
m
y
¨
=
u
y
u
1
m
(
19
)
\left\{\begin{matrix} \ddot{x}&= &\frac{u_{x}u_{1}}{m} \\ \ddot{y}&= &\frac{u_{y}u_{1}}{m} \end{matrix}\right.(19)
{x¨y¨==muxu1muyu1(19)
u
x
=
s
ψ
s
ϕ
+
c
ψ
c
ϕ
s
θ
(
20
)
u_{x} = s\psi s\phi +c\psi c\phi s\theta (20)
ux=sψsϕ+cψcϕsθ(20)
u
y
=
s
ψ
s
θ
c
ϕ
−
c
ψ
s
ϕ
(
21
)
u_{y}= s\psi s\theta c\phi - c\psi s\phi(21)
uy=sψsθcϕ−cψsϕ(21)按照滑模设计方法,可以设计出
u
x
,
u
y
u_{x},u_{y}
ux,uy的值
u
x
=
m
u
1
(
x
d
¨
−
e
x
−
s
x
−
s
i
g
n
(
s
x
)
)
(
22
)
u_{x}=\frac{m}{u_{1}}(\ddot{x_{d}}-e_{x}-s_{x}-sign(s_{x}))(22)
ux=u1m(xd¨−ex−sx−sign(sx))(22)其中
e
x
=
x
−
x
d
e_{x}=x-x_{d}
ex=x−xd,
s
x
=
e
x
+
e
x
˙
s_{x}=e_{x}+\dot{e_{x}}
sx=ex+ex˙,
x
d
x_{d}
xd为x期望跟踪值
u
y
=
m
u
1
(
y
d
¨
−
e
y
−
s
y
−
s
i
g
n
(
s
y
)
)
(
23
)
u_{y}=\frac{m}{u_{1}}(\ddot{y_{d}}-e_{y}-s_{y}-sign(s_{y}))(23)
uy=u1m(yd¨−ey−sy−sign(sy))(23)根据(20),(21)可以得到姿态子系统的中间指令信号如下:
{
ϕ
d
=
a
r
c
s
i
n
(
u
x
s
i
n
ψ
−
u
y
c
o
s
ψ
)
θ
d
=
a
r
c
s
i
n
(
u
x
−
s
i
n
ϕ
s
i
n
ψ
c
o
s
ϕ
c
o
s
ψ
)
(
24
)
\left\{\begin{matrix} \phi_{d}&= &arcsin(u_{x}sin\psi-u_{y}cos\psi) \\ \theta_{d}&= &arcsin(\frac{u_{x}-sin\phi sin\psi}{cos\phi cos\psi} ) \end{matrix}\right.(24)
{ϕdθd==arcsin(uxsinψ−uycosψ)arcsin(cosϕcosψux−sinϕsinψ)(24)把(22),(23)代入(24)就可以得到
ϕ
d
,
θ
d
\phi_{d},\theta_{d}
ϕd,θd
至此,外环控制器设计完成,整体simulink模型如下
仿真simulink文件链接: 四旋翼滑模控制.