基于反步法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即系统的状态变量xxx的导数(变化速率)可以用x,t,ux,t,ux,t,u的函数来描述。
比如,对于最简单的匀加速直线运动系统,设状态变量为位移x=x1x=x_1x=x1,速度v=x2v=x_2v=x2,则根据F=maF = maF=ma有
x˙1=x2x˙2=Fm\begin{aligned} \dot x_1 = x_2 \\ \dot x_2 = \frac{F}{m} \end{aligned} x˙1=x2x˙2=mF若把力FFF设为控制量uuu,那么可以将上式写成矩阵形式
[x˙1x˙2]=[0100][x1x2]+[01m]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)的形式。
反步法运算
要使用反步法有一个小小的限制:最好将变量“分组”设为状态变量,如x2=x˙1x_2=\dot x_1x2=x˙1。以下举例进行说明反步法的简单运算,以二阶系统为例。
设有二阶系统
x˙1=x2x˙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)其中函数fff为不显含x˙1,x˙2\dot x_1, \dot x_2x˙1,x˙2的函数。
设x1x_1x1的期望值为xd1x_{d1}xd1,则可以得到期望值与实际值的差,即误差
e1=xd1−x1(1)e_1 = x_{d1} - x_1 \tag{1} e1=xd1−x1(1)设李雅普诺夫函数为
V1(e1)=12e12V_1 (e_1) = \frac{1}{2} e_1^2 V1(e1)=21e12对其求导有
V˙1=e1e˙1=e1(x˙d1−x˙1)=e1(x˙d1−x2)\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=−α1e12≤0(α1>0)\dot V_1 = - \alpha_1 e_1^2 \leq 0 \quad (\alpha_1 >0)V˙1=−α1e12≤0(α1>0),也就是x˙d1−x2=−α1e1\dot x_{d1} - x_2 = - \alpha_1 e_1x˙d1−x2=−α1e1。在这个基础上可以得到x2=x˙d1+α1e1x_2 = \dot x_{d1} + \alpha_1 e_1x2=x˙d1+α1e1。但是,实际的x2x_2x2不可能等于这个值,因此这个x2x_2x2我们称之为“虚拟控制量”,用x2vx_2^vx2v表示:
x2v=x˙d1+α1e1x_2^v = \dot x_{d1} + \alpha_1 e_1 x2v=x˙d1+α1e1那么,该虚拟控制量和实际x2x_2x2之间又会存在一个误差:
e2=x2−x2v=x2−x˙d1−α1e1\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亦即
x2−x˙d1=e2+α1e1(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¨d1−α1e˙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)
现在,设新的李雅普诺夫函数
V2(e1,e2)=12e12+12e22V_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=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)\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=1g(t)[x¨d1−f(x,t)−α1(e2+α1e1)+e1−α2e2](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=−α1e12−α2e22≤0\dot V_2 = -\alpha_1 e_1^2 - \alpha_2 e_2^2 \leq 0 V˙2=−α1e12−α2e22≤0即满足李雅普诺夫稳定性,系统稳定。
可以看出,在整个过程中,通过在uuu表达式中增减相应的项,可以达到消除V˙2\dot V_2V˙2中某些项的目的,从而使得V˙2\dot V_2V˙2负定或半负定。这个过程完全通过数学运算来规避掉不确定因素,强行使得李雅普诺夫函数负定或半负定,而整个过程中需要确定的参量仅仅是α1,α2\alpha_1, \alpha_2α1,α2两个而已;而控制量uuu的运算也可以通过(5)式得到。
基于反步法的自适应
反步法是如此的优美,它仅仅通过数学运算,就规定了控制量uuu的取值方法,实际调参中仅调节α1,α2\alpha_1, \alpha_2α1,α2两个参数,就能达到不错的效果。很容易能想到,当系统中出现了无法预测、无法测量的扰动时,依然可以用相似的思想,用数学方法进行运算规避掉。下面进行简单介绍。
依然是该系统,但存在难以测量的扰动TTT:
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=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)\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_2x˙2表达式代入时,出现了TTT。
根据之前所述,TTT无法测量,因此无法得知其真实值。那么如果再按照(5)的方法设计uuu,那么uuu中势必会显含TTT:
u=1g(t)[x¨d1−f(x,t)−α1(e2+α1e1)+e1−α2e2−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)而TTT未知,从而uuu也无法计算。
那么,该如何把这个不可测量的TTT规避掉呢?
不可测量参数的规避
既然TTT的真实值无法测量,不如引入一个估计值T^\hat TT^。很明显,该估计值是怎么“估计”得到的依然是个亟待解决的问题,但这不影响我们后续的推导,且在我们后续的推导中可以看出,该估计值的具体估计表达式实际上和TTT的真实值并无关系。
设对于扰动TTT,其实际值与估计值之间的误差为
ε=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 0T˙≈0,因而
ε˙=−T^˙(9)\dot \varepsilon = - \dot {\hat T} \tag{9} ε˙=−T^˙(9)现在暂且把ε\varepsilonε放在一边,回来考虑控制量uuu的设计。既然在(7)中含有实际值TTT,无法计算uuu的准确值,那不如把(7)中的TTT替换成T^\hat TT^,这样一来,用估计值代入uuu表达式来计算uuu:
u=1g(t)[x¨d1−f(x,t)−α1(e2+α1e1)+e1−α2e2−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)中只有TTT这一项无法得知,那不如换成其估计值(因为估计值是一个已知的值),这样uuu就可以计算了。
现在看来,uuu可以利用T^\hat TT^计算了,满足(10)的uuu就可以使V2V_2V2满足李雅普诺夫稳定性。可是,真正实施起来就会如此顺利吗?
不可测量参数的估计值的计算方法
细心的读者可能发现了,我们用T^\hat TT^替换掉TTT的大前提是,我们假设T^\hat TT^是已知量,是能算出来的。可是,TTT作为一个瞬发性扰动,无法预测、无法测量、极难建模,那又该用什么样的数学公式、什么样的方法去估计TTT得到T^\hat TT^呢?连TTT的数学模型都不知道,该如何估计它?
这里,我们回头检视我们的整个运算过程,会发现中间除了e1,e2e_1, e_2e1,e2,还出现了第三个误差量ε\varepsilonε。因此,不妨再次设计新的李雅普诺夫函数,把所有误差量都考虑进去:
V3(e1,e2,ε)=12e12+12e22+12λε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=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)\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 TT^的uuu的表达式(10)代入(12)有
V˙3=−α1e12−α2e22+e2(T−T^)−1λεT^˙=−α1e12−α2e22+e2ε−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 0V˙3≤0,最好有
e2ε−1λεT^˙=0(14)e_2 \varepsilon - \frac{1}{\lambda} \varepsilon \dot {\hat T} = 0 \tag{14} e2ε−λ1εT^˙=0(14)即
T^˙=λe2(15)\dot {\hat T} = \lambda e_2 \tag{15} T^˙=λe2(15)换句话说,只要估计值T^\hat TT^满足了式(15),那么所得到的李雅普诺夫函数就是负定或者半负定的,系统就是稳定的。
而可喜的是,即使我们并不知道TTT的实际数学模型,我们也不知道根据式(15)得到的“估计值”是否接近真实值,但是该估计值确实有效,它确实可以使系统稳定。只需要改变α1,α2,λ\alpha_1, \alpha_2, \lambdaα1,α2,λ三个参数,就可以使系统稳定。
更加值得注意的是,每次迭代运算中,e2=x2−x2ve_2 = x_2 - x_2^ve2=x2−x2v的值都是改变的,因此T^˙\dot {\hat T}T^˙的值也是改变的,即每次迭代时T^˙\dot {\hat T}T^˙都可以“自适应”地去改变自身参数,以达到整体系统的稳定。我们不知道每次迭代时估计值T^\hat TT^有多接近真实值TTT,但是利用式(15)的确可以达到稳定。
因此,可以做出以下结论:
- 本质上,基于backstepping的自适应控制算法依然是利用数学技巧去进行某些项的消去操作,强行使得最后的李雅普诺夫函数负定或者半负定;
- 与backstepping不同的是,控制量uuu的表达式中需要多出一项估计值T^\hat TT^;
- 该估计值是否能够准确估计TTT不得而知,估计规律T^˙=λe2\dot {\hat T} = \lambda e_2T^˙=λe2是否正确也不得而知,但是该估计规律却可以帮助我们消项,并进一步达到李雅普诺夫函数的负定或半负定;
- 可以通过调节λ\lambdaλ参数来改变T^\hat TT^对TTT的“接近程度”,进而达到系统稳定。
- 笔者认为,该控制算法“自适应”之处在于,即使对扰动TTT无法建模,依然可以通过一些规律T^˙=λe2\dot {\hat T} = \lambda e_2T^˙=λe2来维持系统稳定,而式(15)的有效性恰恰证明了该估计规律对TTT的实际值“适应”得很好。
在后续的笔记中,我会在基于反步法的四旋翼控制基础上,引入扰动项,并利用本文所讲述的自适应方法进行控制。请拭目以待!
基于反步法backstepping的自适应控制简介相关推荐
- 自适应反步法matlab,基于反步法的交流电机控制研究
基于反步法的交流电机控制研究 交流电机是一种典型的非线性系统,对它的控制研究是当前控制领域中的热点问题,具有深刻的理论和应用意义.反步法是非线性控制发展的最新成果之一,它在设计不确定系统的鲁棒或自适应 ...
- 如何理解反步法设计控制器?
反步设计是非线性控制器设计中的一种重要方法. 1. 基本思想 将复杂的非线性系统分解成不超过系统阶数的子系统,然后为每个子系统设计满足Lyapunov定律的标量函数和中间虚拟控制量,一直后退到整个系统 ...
- 反步法控制高超声速飞行器(源代码)
仿真论文:<基于反步法的高超音速飞机纵向逆飞行控制>,控制与决策,2007,22(3) 一.高超声速数学模型 二.反步法控制器设计 (略) 三.仿真结果 QQ:2274579702
- 反步法+模糊函数逼近器控制高超声速飞行器(源代码)
一.高超声速飞行器数学模型 二.反步法控制器设计(略) 反步法可以参考:<基于反步法的高超音速飞机纵向逆飞行控制> 三.模糊函数逼近器设计(略) 模糊函数逼近器可以参考:<Fuzzy ...
- Backstepping(反步法)控制初学讲解
作者本科专业非控制方向,毕设期间做了控制相关的内容.当时学习反步法时在理解上遇到了一些困难,经过相关的学习也对其有了一定的认识.考虑到一些人可能会遇到跟我同样的困局,就将当时做的backsteppin ...
- 固定翼飞机姿态角Backstepping反步法控制
固定翼飞机姿态角Backstepping反步法控制 1. 数学建模 2. 系统解耦 3. 反步法控制律设计 4. 仿真结果 5. 仿真结果分析 6. 参考文献 在文章固定翼飞机数学建模入门(姿态角篇) ...
- 基于自适应反步法的三自由度直升机(3 DOF Helicopter)轨迹跟踪
文章目录 前言 一.3 DOF Helicopter实验装置 二.3 DOF Helicopter模型建立及简化 2.1模型建立 2.1.1 俯仰轴建模 2.1.2 横侧轴建模 2.1.3 旋转轴建模 ...
- Backstepping反步法控制四旋翼无人机(一)
目录 四旋翼基本参数 基本假设 转换矩阵 基本方程 线性化 综合 四旋翼基本参数 四旋翼作为一种可以在空间中自由飞行的无人飞行器,具有6个自由度和4个螺旋桨.其中,4个螺旋桨提供动力,作为四旋翼的动力 ...
- Backstepping反步法控制四旋翼无人机(2)
目录 跟踪误差 坐标变换 考虑以下非线性系统 {x˙1=x2+f1(x1)x˙2=u+f2(x1,x2)y=x1\begin{cases} \begin{aligned} \dot{x}_1& ...
最新文章
- Asp.NET MVC3添加域(Areas)区分Admin域和用户域
- 三丶傻妞机器人安装教程+命令+青龙面板对接傻妞
- NumPy - ndarray
- python与正则表达式(part2)--正则表达式的转义
- ds18b20c语言显示小数位,DS18B20多点测温(读序列,匹配序列,51单片机C程序,1602显示)...
- hihoCoder - 1075 开锁魔法III
- zoj[3868]gcd期望
- 《Java从入门到放弃》JavaSE入门篇:JDBC(入门版)
- python c语言实现 书_用C语言实现python的扩展模块
- AD 20中文软件安装教程
- PLC编程的要求有哪些?
- CAD导出pdf的正确方法(包括导出黑白pdf)
- 稳定的服务器主板,高稳定英特尔S2400SC2双路服务器主板
- 优秀网页设计的七条基本准则
- 【基于TCP的在线词典】
- 物联网开源平台KAA
- CAD高清全彩输出pdf文件
- Unity(Animation和Animator)
- 用户体验研究小结—以微信读书APP为例
- 图像处理职位面试题汇总(2)