反步法基础
反步法(Backstepping)是一种基于李雅普诺夫稳定性理论的现代控制方法,通过对控制量的数学处理达到稳定性控制的效果,其数学处理过程十分巧妙。
更加详细的反步法基础可以阅读笔者的Backstepping反步法控制四旋翼无人机(2)文章进行了解,本文在这里简单引入反步法的一些基本思想,为基于Backstepping的自适应控制打下基础。
系统描述
一般地,任意系统,不论是线性的还是非线性的,都可以写为以下形式:
x
˙
=
f
(
x
,
t
)
+
g
(
t
)
u
\dot x = f(x, t) + g(t)u
x˙=f(x,t)+g(t)u即系统的状态变量
x
x
x的导数(变化速率)可以用
x
,
t
,
u
x,t,u
x,t,u的函数来描述。
比如,对于最简单的匀加速直线运动系统,设状态变量为位移
x
=
x
1
x=x_1
x=x1,速度
v
=
x
2
v=x_2
v=x2,则根据
F
=
m
a
F = ma
F=ma有
x
˙
1
=
x
2
x
˙
2
=
F
m
\begin{aligned} \dot x_1 = x_2 \\ \dot x_2 = \frac{F}{m} \end{aligned}
x˙1=x2x˙2=mF若把力
F
F
F设为控制量
u
u
u,那么可以将上式写成矩阵形式
[
x
˙
1
x
˙
2
]
=
[
0
1
0
0
]
[
x
1
x
2
]
+
[
0
1
m
]
F
\left[ \begin{matrix} \dot x_1 \\ \dot x_2 \end{matrix} \right] = \left[ \begin{matrix} 0&1 \\ 0&0 \end{matrix} \right] \left[ \begin{matrix} x_1 \\ x_2 \end{matrix} \right] + \left[ \begin{matrix} 0 \\ \frac{1}{m} \end{matrix} \right] F
[x˙1x˙2]=[0010][x1x2]+[0m1]F
该例子为线性的例子,但非线性例子同样可以写为
x
˙
=
f
(
x
,
t
,
u
)
\dot x = f(x, t, u)
x˙=f(x,t,u)的形式。
反步法运算
要使用反步法有一个小小的限制:最好将变量“分组”设为状态变量,如 x 2 = x ˙ 1 x_2=\dot x_1 x2=x˙1。以下举例进行说明反步法的简单运算,以二阶系统为例。
设有二阶系统
x
˙
1
=
x
2
x
˙
2
=
f
(
x
,
t
,
u
)
\begin{aligned} \dot x_1 &= x_2 \\ \dot x_2 &= f(x,t,u) \end{aligned}
x˙1x˙2=x2=f(x,t,u)其中函数
f
f
f为不显含
x
˙
1
,
x
˙
2
\dot x_1, \dot x_2
x˙1,x˙2的函数。
设
x
1
x_1
x1的期望值为
x
d
1
x_{d1}
xd1,则可以得到期望值与实际值的差,即误差
e
1
=
x
d
1
−
x
1
(1)
e_1 = x_{d1} - x_1 \tag{1}
e1=xd1−x1(1)设李雅普诺夫函数为
V
1
(
e
1
)
=
1
2
e
1
2
V_1 (e_1) = \frac{1}{2} e_1^2
V1(e1)=21e12对其求导有
V
˙
1
=
e
1
e
˙
1
=
e
1
(
x
˙
d
1
−
x
˙
1
)
=
e
1
(
x
˙
d
1
−
x
2
)
\begin{aligned} \dot V_1 &= e_1 \dot e_1 \\ &= e_1 \left( \dot x_{d1} - \dot x_1 \right) \\ &= e_1 \left( \dot x_{d1} - x_2 \right) \end{aligned}
V˙1=e1e˙1=e1(x˙d1−x˙1)=e1(x˙d1−x2)为了满足李雅普诺夫稳定性理论,最好有
V
˙
1
=
−
α
1
e
1
2
≤
0
(
α
1
>
0
)
\dot V_1 = - \alpha_1 e_1^2 \leq 0 \quad (\alpha_1 >0)
V˙1=−α1e12≤0(α1>0),也就是
x
˙
d
1
−
x
2
=
−
α
1
e
1
\dot x_{d1} - x_2 = - \alpha_1 e_1
x˙d1−x2=−α1e1。在这个基础上可以得到
x
2
=
x
˙
d
1
+
α
1
e
1
x_2 = \dot x_{d1} + \alpha_1 e_1
x2=x˙d1+α1e1。但是,实际的
x
2
x_2
x2不可能等于这个值,因此这个
x
2
x_2
x2我们称之为“虚拟控制量”,用
x
2
v
x_2^v
x2v表示:
x
2
v
=
x
˙
d
1
+
α
1
e
1
x_2^v = \dot x_{d1} + \alpha_1 e_1
x2v=x˙d1+α1e1那么,该虚拟控制量和实际
x
2
x_2
x2之间又会存在一个误差:
e
2
=
x
2
−
x
2
v
=
x
2
−
x
˙
d
1
−
α
1
e
1
\begin{aligned} e_2 &= x_2 - x_2^v \\ &= x_2 - \dot x_{d1} - \alpha_1 e_1 \end{aligned}
e2=x2−x2v=x2−x˙d1−α1e1亦即
x
2
−
x
˙
d
1
=
e
2
+
α
1
e
1
(2)
x_2 - \dot x_{d1} = e_2 + \alpha_1 e_1 \tag{2}
x2−x˙d1=e2+α1e1(2)同时还能得到
e
˙
2
=
x
˙
2
−
x
¨
d
1
−
α
1
e
˙
1
(3)
\dot e_2 = \dot x_2 - \ddot x_{d1} - \alpha_1 \dot e_1 \tag{3}
e˙2=x˙2−x¨d1−α1e˙1(3)
现在,设新的李雅普诺夫函数
V
2
(
e
1
,
e
2
)
=
1
2
e
1
2
+
1
2
e
2
2
V_2 (e_1, e_2) = \frac{1}{2} e_1^2 + \frac{1}{2} e_2^2
V2(e1,e2)=21e12+21e22并对其求导(其中考虑到(2)(3)式)
V
˙
2
=
e
1
e
˙
1
+
e
2
e
˙
2
=
e
1
(
x
˙
d
1
−
x
2
)
+
e
2
(
x
˙
2
−
x
¨
d
1
−
α
1
e
˙
1
)
=
e
1
(
−
e
2
−
α
1
e
1
)
+
e
2
[
x
˙
2
−
x
¨
d
1
−
α
1
(
−
e
2
−
α
1
e
1
)
]
=
−
e
1
e
2
−
α
1
e
1
2
+
e
2
[
f
(
x
,
t
)
+
g
(
t
)
u
−
x
¨
d
1
+
α
1
(
e
2
+
α
1
e
1
)
]
(4)
\begin{aligned} \dot V_2 &= e_1 \dot e_1 + e_2 \dot e_2 \\ &= e_1 \left( \dot x_{d1} - x_2 \right) + e_2 \left( \dot x_2 - \ddot x_{d1} - \alpha_1 \dot e_1 \right) \\ &= e_1 \left( -e_2 - \alpha_1 e_1 \right) + e_2 \left[ \dot x_2 - \ddot x_{d1} - \alpha_1 \left( -e_2 - \alpha_1 e_1 \right) \right] \\ &= -e_1 e_2 - \alpha_1 e_1^2 + e_2 \left[ f(x,t) +g(t) u - \ddot x_{d1} + \alpha_1 \left( e_2 + \alpha_1 e_1 \right) \right] \tag{4} \end{aligned}
V˙2=e1e˙1+e2e˙2=e1(x˙d1−x2)+e2(x˙2−x¨d1−α1e˙1)=e1(−e2−α1e1)+e2[x˙2−x¨d1−α1(−e2−α1e1)]=−e1e2−α1e12+e2[f(x,t)+g(t)u−x¨d1+α1(e2+α1e1)](4)稍加考虑即可发现,若令
u
=
1
g
(
t
)
[
x
¨
d
1
−
f
(
x
,
t
)
−
α
1
(
e
2
+
α
1
e
1
)
+
e
1
−
α
2
e
2
]
(5)
u = \frac{1}{g(t)} \left[ \ddot x_{d1} -f(x,t) - \alpha_1 \left( e_2 + \alpha_1 e_1 \right) + e_1 - \alpha_2 e_2 \right] \tag{5}
u=g(t)1[x¨d1−f(x,t)−α1(e2+α1e1)+e1−α2e2](5)那么将(5)代入(4)即有
V
˙
2
=
−
α
1
e
1
2
−
α
2
e
2
2
≤
0
\dot V_2 = -\alpha_1 e_1^2 - \alpha_2 e_2^2 \leq 0
V˙2=−α1e12−α2e22≤0即满足李雅普诺夫稳定性,系统稳定。
可以看出,在整个过程中,通过在 u u u表达式中增减相应的项,可以达到消除 V ˙ 2 \dot V_2 V˙2中某些项的目的,从而使得 V ˙ 2 \dot V_2 V˙2负定或半负定。这个过程完全通过数学运算来规避掉不确定因素,强行使得李雅普诺夫函数负定或半负定,而整个过程中需要确定的参量仅仅是 α 1 , α 2 \alpha_1, \alpha_2 α1,α2两个而已;而控制量 u u u的运算也可以通过(5)式得到。
基于反步法的自适应
反步法是如此的优美,它仅仅通过数学运算,就规定了控制量 u u u的取值方法,实际调参中仅调节 α 1 , α 2 \alpha_1, \alpha_2 α1,α2两个参数,就能达到不错的效果。很容易能想到,当系统中出现了无法预测、无法测量的扰动时,依然可以用相似的思想,用数学方法进行运算规避掉。下面进行简单介绍。
依然是该系统,但存在难以测量的扰动
T
T
T:
x
˙
=
f
(
x
,
t
)
+
g
(
t
)
u
+
T
\dot x = f(x, t) + g(t)u + T
x˙=f(x,t)+g(t)u+T相应地应当有
V
˙
2
=
e
1
e
˙
1
+
e
2
e
˙
2
=
e
1
(
x
˙
d
1
−
x
2
)
+
e
2
(
x
˙
2
−
x
¨
d
1
−
α
1
e
˙
1
)
=
e
1
(
−
e
2
−
α
1
e
1
)
+
e
2
[
x
˙
2
−
x
¨
d
1
−
α
1
(
−
e
2
−
α
1
e
1
)
]
=
−
e
1
e
2
−
α
1
e
1
2
+
e
2
[
f
(
x
,
t
)
+
g
(
t
)
u
+
T
−
x
¨
d
1
+
α
1
(
e
2
+
α
1
e
1
)
]
(6)
\begin{aligned} \dot V_2 &= e_1 \dot e_1 + e_2 \dot e_2 \\ &= e_1 \left( \dot x_{d1} - x_2 \right) + e_2 \left( \dot x_2 - \ddot x_{d1} - \alpha_1 \dot e_1 \right) \\ &= e_1 \left( -e_2 - \alpha_1 e_1 \right) + e_2 \left[ \dot x_2 - \ddot x_{d1} - \alpha_1 \left( -e_2 - \alpha_1 e_1 \right) \right] \\ &= -e_1 e_2 - \alpha_1 e_1^2 + e_2 \left[ f(x,t) +g(t) u + T - \ddot x_{d1} + \alpha_1 \left( e_2 + \alpha_1 e_1 \right) \right] \tag{6} \end{aligned}
V˙2=e1e˙1+e2e˙2=e1(x˙d1−x2)+e2(x˙2−x¨d1−α1e˙1)=e1(−e2−α1e1)+e2[x˙2−x¨d1−α1(−e2−α1e1)]=−e1e2−α1e12+e2[f(x,t)+g(t)u+T−x¨d1+α1(e2+α1e1)](6)应当注意,在(6)式中将
x
˙
2
\dot x_2
x˙2表达式代入时,出现了
T
T
T。
根据之前所述,
T
T
T无法测量,因此无法得知其真实值。那么如果再按照(5)的方法设计
u
u
u,那么
u
u
u中势必会显含
T
T
T:
u
=
1
g
(
t
)
[
x
¨
d
1
−
f
(
x
,
t
)
−
α
1
(
e
2
+
α
1
e
1
)
+
e
1
−
α
2
e
2
−
T
]
(7)
u = \frac{1}{g(t)} \left[ \ddot x_{d1} -f(x,t) - \alpha_1 \left( e_2 + \alpha_1 e_1 \right) + e_1 - \alpha_2 e_2 - T\right] \tag{7}
u=g(t)1[x¨d1−f(x,t)−α1(e2+α1e1)+e1−α2e2−T](7)而
T
T
T未知,从而
u
u
u也无法计算。
那么,该如何把这个不可测量的
T
T
T规避掉呢?
不可测量参数的规避
既然 T T T的真实值无法测量,不如引入一个估计值 T ^ \hat T T^。很明显,该估计值是怎么“估计”得到的依然是个亟待解决的问题,但这不影响我们后续的推导,且在我们后续的推导中可以看出,该估计值的具体估计表达式实际上和 T T T的真实值并无关系。
设对于扰动
T
T
T,其实际值与估计值之间的误差为
ε
=
T
−
T
^
(8)
\varepsilon = T - \hat T \tag{8}
ε=T−T^(8)且有
ε
˙
=
T
˙
−
T
^
˙
\dot \varepsilon = \dot T - \dot {\hat T}
ε˙=T˙−T^˙一般地,若将扰动视为瞬时的、脉冲性的,则在极短时间
Δ
t
\Delta t
Δt内可以有
T
˙
≈
0
\dot T \approx 0
T˙≈0,因而
ε
˙
=
−
T
^
˙
(9)
\dot \varepsilon = - \dot {\hat T} \tag{9}
ε˙=−T^˙(9)现在暂且把
ε
\varepsilon
ε放在一边,回来考虑控制量
u
u
u的设计。既然在(7)中含有实际值
T
T
T,无法计算
u
u
u的准确值,那不如把(7)中的
T
T
T替换成
T
^
\hat T
T^,这样一来,用估计值代入
u
u
u表达式来计算
u
u
u:
u
=
1
g
(
t
)
[
x
¨
d
1
−
f
(
x
,
t
)
−
α
1
(
e
2
+
α
1
e
1
)
+
e
1
−
α
2
e
2
−
T
^
]
(10)
u = \frac{1}{g(t)} \left[ \ddot x_{d1} -f(x,t) - \alpha_1 \left( e_2 + \alpha_1 e_1 \right) + e_1 - \alpha_2 e_2 - \hat T\right] \tag{10}
u=g(t)1[x¨d1−f(x,t)−α1(e2+α1e1)+e1−α2e2−T^](10)换句话说就是,(7)中只有
T
T
T这一项无法得知,那不如换成其估计值(因为估计值是一个已知的值),这样
u
u
u就可以计算了。
现在看来, u u u可以利用 T ^ \hat T T^计算了,满足(10)的 u u u就可以使 V 2 V_2 V2满足李雅普诺夫稳定性。可是,真正实施起来就会如此顺利吗?
不可测量参数的估计值的计算方法
细心的读者可能发现了,我们用 T ^ \hat T T^替换掉 T T T的大前提是,我们假设 T ^ \hat T T^是已知量,是能算出来的。可是, T T T作为一个瞬发性扰动,无法预测、无法测量、极难建模,那又该用什么样的数学公式、什么样的方法去估计 T T T得到 T ^ \hat T T^呢?连 T T T的数学模型都不知道,该如何估计它?
这里,我们回头检视我们的整个运算过程,会发现中间除了
e
1
,
e
2
e_1, e_2
e1,e2,还出现了第三个误差量
ε
\varepsilon
ε。因此,不妨再次设计新的李雅普诺夫函数,把所有误差量都考虑进去:
V
3
(
e
1
,
e
2
,
ε
)
=
1
2
e
1
2
+
1
2
e
2
2
+
1
2
λ
ε
2
(11)
V_3(e_1, e_2, \varepsilon) = \frac{1}{2} e_1^2 + \frac{1}{2} e_2^2 + \frac{1}{2 \lambda} \varepsilon^2 \tag{11}
V3(e1,e2,ε)=21e12+21e22+2λ1ε2(11)对其求导(代入(9))
V
˙
3
=
e
1
e
˙
1
+
e
2
e
˙
2
+
ε
ε
˙
=
e
1
(
x
˙
d
1
−
x
2
)
+
e
2
(
x
˙
2
−
x
¨
d
1
−
α
1
e
˙
1
)
+
1
λ
ε
(
−
T
^
˙
)
=
e
1
(
−
e
2
−
α
1
e
1
)
+
e
2
[
x
˙
2
−
x
¨
d
1
−
α
1
(
−
e
2
−
α
1
e
1
)
]
−
1
λ
ε
T
^
˙
=
−
e
1
e
2
−
α
1
e
1
2
+
e
2
[
f
(
x
,
t
)
+
g
(
t
)
u
+
T
−
x
¨
d
1
+
α
1
(
e
2
+
α
1
e
1
)
]
−
1
λ
ε
T
^
˙
(12)
\begin{aligned} \dot V_3 &= e_1 \dot e_1 + e_2 \dot e_2 + \varepsilon \dot \varepsilon \\ &= e_1 \left( \dot x_{d1} - x_2 \right) + e_2 \left( \dot x_2 - \ddot x_{d1} - \alpha_1 \dot e_1 \right) + \frac{1}{\lambda} \varepsilon \left( - \dot {\hat T} \right) \\ &= e_1 \left( -e_2 - \alpha_1 e_1 \right) + e_2 \left[ \dot x_2 - \ddot x_{d1} - \alpha_1 \left( -e_2 - \alpha_1 e_1 \right) \right] - \frac{1}{\lambda} \varepsilon \dot {\hat T} \\ &= -e_1 e_2 - \alpha_1 e_1^2 + e_2 \left[ f(x,t) +g(t) u + T - \ddot x_{d1} + \alpha_1 \left( e_2 + \alpha_1 e_1 \right) \right] - \frac{1}{\lambda} \varepsilon \dot {\hat T} \tag{12} \end{aligned}
V˙3=e1e˙1+e2e˙2+εε˙=e1(x˙d1−x2)+e2(x˙2−x¨d1−α1e˙1)+λ1ε(−T^˙)=e1(−e2−α1e1)+e2[x˙2−x¨d1−α1(−e2−α1e1)]−λ1εT^˙=−e1e2−α1e12+e2[f(x,t)+g(t)u+T−x¨d1+α1(e2+α1e1)]−λ1εT^˙(12)把显含
T
^
\hat T
T^的
u
u
u的表达式(10)代入(12)有
V
˙
3
=
−
α
1
e
1
2
−
α
2
e
2
2
+
e
2
(
T
−
T
^
)
−
1
λ
ε
T
^
˙
=
−
α
1
e
1
2
−
α
2
e
2
2
+
e
2
ε
−
1
λ
ε
T
^
˙
(13)
\begin{aligned} \dot V_3 &= - \alpha_1 e_1^2 - \alpha_2 e_2^2 + e_2 \left( T - \hat T \right) - \frac{1}{\lambda} \varepsilon \dot {\hat T} \\ &= - \alpha_1 e_1^2 - \alpha_2 e_2^2 + e_2 \varepsilon - \frac{1}{\lambda} \varepsilon \dot {\hat T} \tag{13} \end{aligned}
V˙3=−α1e12−α2e22+e2(T−T^)−λ1εT^˙=−α1e12−α2e22+e2ε−λ1εT^˙(13)显然,为了使
V
˙
3
≤
0
\dot V_3 \leq 0
V˙3≤0,最好有
e
2
ε
−
1
λ
ε
T
^
˙
=
0
(14)
e_2 \varepsilon - \frac{1}{\lambda} \varepsilon \dot {\hat T} = 0 \tag{14}
e2ε−λ1εT^˙=0(14)即
T
^
˙
=
λ
e
2
(15)
\dot {\hat T} = \lambda e_2 \tag{15}
T^˙=λe2(15)换句话说,只要估计值
T
^
\hat T
T^满足了式(15),那么所得到的李雅普诺夫函数就是负定或者半负定的,系统就是稳定的。
而可喜的是,即使我们并不知道
T
T
T的实际数学模型,我们也不知道根据式(15)得到的“估计值”是否接近真实值,但是该估计值确实有效,它确实可以使系统稳定。只需要改变
α
1
,
α
2
,
λ
\alpha_1, \alpha_2, \lambda
α1,α2,λ三个参数,就可以使系统稳定。
更加值得注意的是,每次迭代运算中, e 2 = x 2 − x 2 v e_2 = x_2 - x_2^v e2=x2−x2v的值都是改变的,因此 T ^ ˙ \dot {\hat T} T^˙的值也是改变的,即每次迭代时 T ^ ˙ \dot {\hat T} T^˙都可以“自适应”地去改变自身参数,以达到整体系统的稳定。我们不知道每次迭代时估计值 T ^ \hat T T^有多接近真实值 T T T,但是利用式(15)的确可以达到稳定。
因此,可以做出以下结论:
- 本质上,基于backstepping的自适应控制算法依然是利用数学技巧去进行某些项的消去操作,强行使得最后的李雅普诺夫函数负定或者半负定;
- 与backstepping不同的是,控制量 u u u的表达式中需要多出一项估计值 T ^ \hat T T^;
- 该估计值是否能够准确估计 T T T不得而知,估计规律 T ^ ˙ = λ e 2 \dot {\hat T} = \lambda e_2 T^˙=λe2是否正确也不得而知,但是该估计规律却可以帮助我们消项,并进一步达到李雅普诺夫函数的负定或半负定;
- 可以通过调节 λ \lambda λ参数来改变 T ^ \hat T T^对 T T T的“接近程度”,进而达到系统稳定。
- 笔者认为,该控制算法“自适应”之处在于,即使对扰动 T T T无法建模,依然可以通过一些规律 T ^ ˙ = λ e 2 \dot {\hat T} = \lambda e_2 T^˙=λe2来维持系统稳定,而式(15)的有效性恰恰证明了该估计规律对 T T T的实际值“适应”得很好。
在后续的笔记中,我会在基于反步法的四旋翼控制基础上,引入扰动项,并利用本文所讲述的自适应方法进行控制。请拭目以待!