基于反步法backstepping的自适应控制简介

基于反步法backstepping的自适应控制简介

  • 反步法基础
    • 系统描述
    • 反步法运算
  • 基于反步法的自适应
    • 不可测量参数的规避
    • 不可测量参数的估计值的计算方法

反步法基础

反步法(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=xd1x1(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˙d1x˙1)=e1(x˙d1x2)为了满足李雅普诺夫稳定性理论,最好有 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=α1e120(α1>0),也就是 x ˙ d 1 − x 2 = − α 1 e 1 \dot x_{d1} - x_2 = - \alpha_1 e_1 x˙d1x2=α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=x2x2v=x2x˙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} x2x˙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˙2x¨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˙d1x2)+e2(x˙2x¨d1α1e˙1)=e1(e2α1e1)+e2[x˙2x¨d1α1(e2α1e1)]=e1e2α1e12+e2[f(x,t)+g(t)ux¨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¨d1f(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α2e220即满足李雅普诺夫稳定性,系统稳定。

可以看出,在整个过程中,通过在 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˙d1x2)+e2(x˙2x¨d1α1e˙1)=e1(e2α1e1)+e2[x˙2x¨d1α1(e2α1e1)]=e1e2α1e12+e2[f(x,t)+g(t)u+Tx¨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¨d1f(x,t)α1(e2+α1e1)+e1α2e2T](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} ε=TT^(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¨d1f(x,t)α1(e2+α1e1)+e1α2e2T^](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˙d1x2)+e2(x˙2x¨d1α1e˙1)+λ1ε(T^˙)=e1(e2α1e1)+e2[x˙2x¨d1α1(e2α1e1)]λ1εT^˙=e1e2α1e12+e2[f(x,t)+g(t)u+Tx¨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(TT^)λ1εT^˙=α1e12α2e22+e2ελ1εT^˙(13)显然,为了使 V ˙ 3 ≤ 0 \dot V_3 \leq 0 V˙30,最好有
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=x2x2v的值都是改变的,因此 T ^ ˙ \dot {\hat T} T^˙的值也是改变的,即每次迭代时 T ^ ˙ \dot {\hat T} T^˙都可以“自适应”地去改变自身参数,以达到整体系统的稳定。我们不知道每次迭代时估计值 T ^ \hat T T^有多接近真实值 T T T,但是利用式(15)的确可以达到稳定。

因此,可以做出以下结论:

  1. 本质上,基于backstepping的自适应控制算法依然是利用数学技巧去进行某些项的消去操作强行使得最后的李雅普诺夫函数负定或者半负定;
  2. 与backstepping不同的是,控制量 u u u的表达式中需要多出一项估计值 T ^ \hat T T^
  3. 该估计值是否能够准确估计 T T T不得而知,估计规律 T ^ ˙ = λ e 2 \dot {\hat T} = \lambda e_2 T^˙=λe2是否正确也不得而知,但是该估计规律却可以帮助我们消项,并进一步达到李雅普诺夫函数的负定或半负定;
  4. 可以通过调节 λ \lambda λ参数来改变 T ^ \hat T T^ T T T的“接近程度”,进而达到系统稳定。
  5. 笔者认为,该控制算法“自适应”之处在于,即使对扰动 T T T无法建模,依然可以通过一些规律 T ^ ˙ = λ e 2 \dot {\hat T} = \lambda e_2 T^˙=λe2来维持系统稳定,而式(15)的有效性恰恰证明了该估计规律对 T T T的实际值“适应”得很好。

在后续的笔记中,我会在基于反步法的四旋翼控制基础上,引入扰动项,并利用本文所讲述的自适应方法进行控制。请拭目以待!

你可能感兴趣的:(控制理论,算法,算法,抽象代数,线性代数)