Backstepping(反步控制)是一种设计非线性系统控制器的方法。它通过对子系统的递归方便地求得能使系统稳定的输入。但大多数相关文献中并未考虑系统本身的可控性,因此首先我们假设需要控制的系统是可控的。
基本思想
Backstepping针对的是能写成如下形式的系统:
可以发现该形式的系统有如下特征:状态$x_1$只由$x_1,x_2$决定;状态$x_2$由$x_1,x_2,x_3$决定…以此类推,状态$x_i$由$x_1,x_2…x_{i+1}$决定;而状态$x_n$则由系统的所有状态来决定。
这对我们就有了一定的启发。对于状态$x_1$来说,它只由本身与$x_2$决定,因此我们可以把它看作整个非线性系统的一个子系统。在这个系统中只需要控制$x_2$便可以使得$x_1$渐近稳定。再对于状态$x_2$来说,它由$x_1,x_2,x_3$决定,我们再将方程组的前两个方程看作一个子系统。此时$x_1$已经渐近稳定,因此我们只需要控制$x_3$便可以使得$x_2$渐近稳定。以此类推,最终我们就可以得到一个输入$u$,使得之前所有的状态$x_1,x_2…x_n$都渐近稳定,那么整个系统就稳定了。
为了使各个子系统都稳定,我们需要为每个系统设置一个虚拟的控制量,并以此定义一个Lyapunov函数,使得所有子系统的Lyapunov函数都满足渐近稳定条件。
概括来说,Backstepping的基本思想就是:将复杂的非线性系统分解成不超过系统阶数的子系统,然后为每个子系统设计部分Lyapunov函数和中间虚拟控制量,一直“后退”到整个系统,将它们集成起来完成整个控制律的设计。
基于Backstepping控制器设计
在这里我们不直接给出控制器设计的公式,而是希望以探索的方式来得到并理解它。
对于任意一个子系统$\dot{x}_i=x_{i+1}+f_i(x_1,x_2,…,x_i)$来说,我们把$x_{i+1}$看作是这个系统的输入量,也就是模拟的控制量(实际上它只是整个系统的一个状态而已),再通过确定适当的虚拟反馈$\alpha_i(i=1,2,…,n-1)$来控制$x_{i+1}$,使得这个子系统达到渐近稳定。而正由于系统是渐近稳定,因此状态与反馈之间会存在着误差。在这里我们引入误差变量$z$,期望通过控制的作用,使得$x_{i+1}$与虚拟反馈$a_i$之间具有某种渐进特性,从而实现整个系统的渐近稳定。
误差变量$z$的设定如下:
其中$\alpha_i$为虚拟反馈量,也是我们要求解的待定量。对于每一个子系统,我们都会构造一个Lyapunov函数,使得每一个状态分量具有适当的渐近稳定特性。在此我们注意到:对于任意一个误差变量$z_i=x_i-\alpha_{i-1}(x_1,x_2,…,x_{i-1})$,$x_i$与$z_i$的渐近稳定特性是相同的(因为我们在设定这个子系统前已经通过前边的子系统将$x_1$到$x_{i-1}$都控制为渐近稳定了)。因此为了渐近稳定原系统,我们只需要将误差变量$z$渐近稳定即可。而$x_1$由于是第一个子系统的状态量,并没有反馈,因此我们直接将其设为$z_1$。至此,我们设计目标就由$x$的渐近稳定转变为$z$的渐近稳定了。
分部推导
首先看第一个子系统,将其以$z$为状态表示,得到:
定义该系统的Lyapunov方程:
$V_1$可以算是最简单直接,也是最常见的Lyapunov方程了,我们能够轻易看出它是正定的。但为了使该系统稳定,我们还需要使它的导数为一个负定的函数。将$V_1$求导:
为了使$\dot{V}_1$负定,我们取:
由于$z_1=x_1$,因此虚拟反馈$\alpha_1(x_1)$可以使用$z_1$的函数$\tilde{\alpha}_1(z_1)$表示:
此时:
将式(7)带入式(5)得到$\dot{V}_1$:
可以发现,$\dot{V}_1$在$z_2=0$,即$x_2=a_1(z_1)$的条件下为负定,此时该子系统渐近稳定。但一般情况下$z_2\not=0$,因此我们需要对下一个子系统进行设计,使得$z_2$具有期望的渐近特性。
因此将第二个子系统以$z$为状态表示,由式(2)与式(1)得到:
由于:
因此$\alpha_2(x_1,x_2)$与$f_2(x_1,x_2)$可以完全用z1、z2表示。设:
带入式(10)得到:
和第一个子系统一样,我们需要设置它的Lyapunov方程。该是子系统基于第一个子系统的,它包含了$z_1,z_2$两个状态,因此我们将该系统Lyapunov方程设为:
同样它也是一个正定函数。对其求导得到:
在这个子系统中我们使用$z_3$来控制$z_1,z_2$,因此需要将$z_1z_2$这项消去,并且增加一项$-z_2^2$。取:
此时:
带入式(17)得到$\dot{V}_2$:
同样,它在$z_3=0$,即$x_3=\tilde{\alpha}_2(z_1,z_2)$的条件下为负定,此时该子系统渐近稳定。但一般情况下$z_3\not=0$,因此我们需要对下一个子系统进行设计,使得$z_3$具有期望的渐近特性。如此下去我们便得可以得到Backstepping控制器设计的一般公式。
一般形式
对于第$i$个子系统,我们可以将它表示为:
此时我们只需要控制$z_{i+1}$渐进稳定于0就可以了。
一直重复这个过程,直到最终我们将系统“后退”到整个系统时:
系统的Lyapunov方程为:
$V_{n-1}$为正定函数,因此$V_n$也为正定。将其求导得:
选取整个系统的输入为:
则由上述关系式(22)、(24)及(25)得:
可以得到$\dot{V}_n$在$u=-z_{n-1}-z_n-\tilde{f}_n(z_1,z_2,…z_n)$的条件下是负定的,因此误差变量$z$是渐进稳定的,从而得出整个系统是渐近稳定的。至此我们就成功地使用Backstepping设计了一个非线性系统的控制器!
小结
- Backstepping用来控制结构为(1)的非线性系统。
- Backstepping是一种由前往后递推的设计方法,通过设置虚拟反馈控制子系统,并且前边的子系统必须通过后边子系统的虚拟控制才能达到稳定,以此层层递推。
- Backstepping使得控制器的设计过程系统化、结构化。