滑模控制理论(Sliding Mode Control, SMC)是一种建立在现代控制理论基础上的控制理论,主要数学核心为李雅普诺夫函数。
滑模控制的核心思想是建立一个滑模面,将被控系统拉取到滑模面上来,使系统沿着滑模面运动。滑模控制的一个优势是无视外部扰动和不确定参数,采用一种比较“暴力”的方式达到控制的目的。
其思想和反步法有些类似,但数学实现起来更加方便而不抽象。相比反步法,滑模控制没有复杂的数学计算,也不会出现“微分爆炸”的问题。但另一方面,滑模控制所采用的控制信号大多是具有正负值反复交替的信号,对于硬件要求很高,一般硬件无法达到这种信号高频来回切换的要求,因此这是滑模控制的一个缺点。
除此之外,信号高频切换所导致的输出信号会出现振荡,系统状态在所选取的滑模面附近来回颤动,这种颤动是无法消除的。这也是滑模控制的一个痛点,目前主流的方法大多是采用滤波、模糊控制、神经网络等方法对震颤进行缓解。
这里以一个三阶系统为例。
设有一个标准三阶系统
{ x ˙ 1 = x 2 x ˙ 2 = x 3 x ˙ 3 = f ( x ) + g ( x ) u (1) \begin{cases} \dot{x}_1 = x_2 \\ \dot{x}_2 = x_3 \\ \dot{x}_3 = f(x) + g(x)u \end{cases} \tag{1} ⎩⎪⎨⎪⎧x˙1=x2x˙2=x3x˙3=f(x)+g(x)u(1)其中 g ( x ) g(x) g(x)是 u u u前面的系数公式,大多情况下是常数表达式,也存在一些 g ( x ) g(x) g(x)为 x x x的函数的情况。下文中把 f ( x ) f(x) f(x)和 g ( x ) g(x) g(x)略写为 f f f和 g g g。
假设 x 1 x_1 x1的期望值为 x 1 d x_{1d} x1d。那么可以写出各个 x i x_i xi的误差 e i e_i ei表达式:
{ e 1 = x − x 1 d = x 1 − x 1 d e 2 = e ˙ 1 = x ˙ − x ˙ 1 d = x 2 − x ˙ 1 d e 3 = e ˙ 2 = x ¨ − x ¨ 1 d = x 3 − x ¨ 1 d (2) \begin{cases} e_1 = x - x_{1d} = x_1 - x_{1d} \\ e_2 = \dot{e}_1 = \dot{x}-\dot{x}_{1d} = x_2-\dot{x}_{1d} \\ e_3 = \dot{e}_2 = \ddot{x} - \ddot{x}_{1d} = x_3-\ddot{x}_{1d} \end{cases} \tag{2} ⎩⎪⎨⎪⎧e1=x−x1d=x1−x1de2=e˙1=x˙−x˙1d=x2−x˙1de3=e˙2=x¨−x¨1d=x3−x¨1d(2)立即设计滑模面
s = c 1 e 1 + c 2 e 2 + e 3 = ∑ i = 1 3 c i e i = 0 (3) s=c_1 e_1 + c_2 e_2 + e_3 = \sum_{i=1}^3 c_ie_i = 0 \tag{3} s=c1e1+c2e2+e3=i=1∑3ciei=0(3)其中 e 3 e_3 e3前系数为1。
那么滑模面 s s s的导数为
s ˙ = c 1 e ˙ 1 + c 2 e ˙ 2 + e ˙ 3 = c 1 e 2 + c 2 e 3 + x ˙ 3 − x 1 d ( 3 ) = c 1 e 2 + c 2 e 3 + f + g u − x 1 d ( 3 ) = Γ + f + g u − x 1 d ( 3 ) (4) \begin{aligned} \dot{s} &= c_1 \dot{e}_1 + c_2 \dot{e}_2 + \dot{e}_3 \\ &= c_1 e_2 + c_2 e_3 + \dot{x}_3 - x_{1d} ^{(3)} \\ &= c_1 e_2 + c_2 e_3 + f + gu - x_{1d} ^{(3)} \\ &= \Gamma + f + gu - x_{1d} ^{(3)} \end{aligned} \tag{4} s˙=c1e˙1+c2e˙2+e˙3=c1e2+c2e3+x˙3−x1d(3)=c1e2+c2e3+f+gu−x1d(3)=Γ+f+gu−x1d(3)(4)
并设计李雅普诺夫函数
V = 1 2 s 2 (5) V = \frac{1}{2}s^2 \tag{5} V=21s2(5)并对其求导
V ˙ = s s ˙ = s ( Γ + f + g u − x 1 d ( 3 ) ) (6) \begin{aligned} \dot{V} &= s \dot{s} \\ &= s \left( \Gamma + f + gu - x_{1d} ^{(3)} \right) \end{aligned} \tag{6} V˙=ss˙=s(Γ+f+gu−x1d(3))(6)
到这一步为止好像进入了死胡同,(6)式不能再进一步化简,因此需要考虑下一步内容,即考虑(6)式中的取值范围。
另一方面,由于控制量 u u u是需要进行设计的,因此不妨先在(6)式中将 u u u单独列出
V ˙ = s ( Γ + f + g u − x 1 d ( 3 ) ) = s ( Γ + f − x 1 d ( 3 ) ) + s g u = s [ ( Γ + f − x 1 d ( 3 ) ) + g u ] = s g ( Γ + f − x 1 d ( 3 ) g + u ) (7) \begin{aligned} \dot{V} &= s \left( \Gamma + f + gu - x_{1d} ^{(3)} \right) \\ &= s \left( \Gamma + f - x_{1d} ^{(3)} \right) + sgu \\ &= s \left[ \left( \Gamma + f - x_{1d} ^{(3)} \right) + gu \right] \\ &= sg \left( \frac{ \Gamma + f - x_{1d} ^{(3)} }{g} + u \right) \end{aligned} \tag{7} V˙=s(Γ+f+gu−x1d(3))=s(Γ+f−x1d(3))+sgu=s[(Γ+f−x1d(3))+gu]=sg(gΓ+f−x1d(3)+u)(7)
可以看出,(7)式右侧第一项与控制量 u u u无关,第二项只含 u u u本身。
设计 u u u具有以下形式
u = − k ⋅ s g n ( s ) (8) u = -k \cdot sgn(s) \tag{8} u=−k⋅sgn(s)(8)那么(7)式变为
V ˙ = s g ( Γ + f − x 1 d ( 3 ) g + u ) = s g ( Γ + f − x 1 d ( 3 ) g − k ⋅ s g n ( s ) ) = s ( Γ + f − x 1 d ( 3 ) ) − k g ∣ s ∣ (9) \begin{aligned} \dot{V} &= sg \left( \frac{ \Gamma + f - x_{1d} ^{(3)} }{g} + u \right) \\ &= sg \left( \frac{ \Gamma + f - x_{1d} ^{(3)} }{g} - k \cdot sgn(s) \right) \\ &= s \left( \Gamma + f - x_{1d} ^{(3)} \right) - kg \lvert s \rvert \end{aligned} \tag{9} V˙=sg(gΓ+f−x1d(3)+u)=sg(gΓ+f−x1d(3)−k⋅sgn(s))=s(Γ+f−x1d(3))−kg∣s∣(9)到这里已经可以看出,(9)式右边第二项已经满足 ≤ 0 \leq 0 ≤0了,现在只要看第一项即可。
对于第一项有
s ( Γ + f − x 1 d ( 3 ) ) ≤ ∣ s ∣ ∣ Γ + f − x 1 d ( 3 ) ∣ s \left( \Gamma + f - x_{1d} ^{(3)} \right) \leq \lvert s \rvert \Big \lvert \Gamma + f - x_{1d} ^{(3)} \Big \rvert s(Γ+f−x1d(3))≤∣s∣∣∣∣Γ+f−x1d(3)∣∣∣因此
V ˙ = s ( Γ + f − x 1 d ( 3 ) ) − k g ∣ s ∣ ≤ ∣ s ∣ ∣ Γ + f − x 1 d ( 3 ) ∣ − k g ∣ s ∣ = ∣ s ∣ ( ∣ Γ + f − x 1 d ( 3 ) ∣ − k g ) (10) \begin{aligned} \dot{V} &= s \left( \Gamma + f - x_{1d} ^{(3)} \right) - kg \lvert s \rvert \leq \lvert s \rvert \Big \lvert \Gamma + f - x_{1d} ^{(3)} \Big \rvert - kg \lvert s \rvert \\ &= \lvert s \rvert \left( \Big \lvert \Gamma + f - x_{1d} ^{(3)} \Big \rvert - kg \right) \end{aligned} \tag{10} V˙=s(Γ+f−x1d(3))−kg∣s∣≤∣s∣∣∣∣Γ+f−x1d(3)∣∣∣−kg∣s∣=∣s∣(∣∣∣Γ+f−x1d(3)∣∣∣−kg)(10)可见,只要设计满足 ∣ Γ + f − x 1 d ( 3 ) ∣ − k g ≤ 0 \Big \lvert \Gamma + f - x_{1d} ^{(3)} \Big \rvert - kg \leq 0 ∣∣∣Γ+f−x1d(3)∣∣∣−kg≤0,那么就能有 V ˙ ≤ 0 \dot{V} \leq 0 V˙≤0。
换句话说,(8)式 u = − k ⋅ s g n ( s ) u = -k \cdot sgn(s) u=−k⋅sgn(s)中的 k k k只要满足
k ≥ ∣ Γ + f − x 1 d ( 3 ) ∣ g (11) k \geq \frac{\Big \lvert \Gamma + f - x_{1d} ^{(3)} \Big \rvert}{g} \tag{11} k≥g∣∣∣Γ+f−x1d(3)∣∣∣(11)那么所设计的控制 u u u就能使李雅普诺夫函数 V V V满足 V ˙ ≤ 0 \dot{V} \leq 0 V˙≤0,从而达到稳定。
将上述结论拓展到高维系统
{ x ˙ 1 = x 2 x ˙ 2 = x 3 ⋮ x ˙ n − 1 = x n x ˙ n = f ( x ) + g ( x ) u \begin{cases} \dot{x}_1 = x_2 \\ \dot{x}_2 = x_3 \\ \vdots \\ \dot{x}_{n-1} = x_n \\ \dot{x}_n = f(x) + g(x)u \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x˙1=x2x˙2=x3⋮x˙n−1=xnx˙n=f(x)+g(x)u写出各个 x i x_i xi的误差 e i e_i ei表达式:
{ e 1 = x − x 1 d = x 1 − x 1 d e 2 = e ˙ 1 = x ˙ − x ˙ 1 d = x 2 − x ˙ 1 d ⋮ e n − 1 = e 1 ( n − 2 ) = x ( n − 2 ) − x 1 d ( n − 2 ) = x n − 1 − x 1 d ( n − 2 ) e n = e ˙ n − 1 = x ¨ − x ¨ 1 d = x 3 − x ¨ 1 d \begin{cases} e_1 = x - x_{1d} = x_1 - x_{1d} \\ e_2 = \dot{e}_1 = \dot{x}-\dot{x}_{1d} = x_2-\dot{x}_{1d} \\ \vdots \\ e_{n-1} = e_1^{(n-2)} =x^{(n-2)}-x_{1d}^{(n-2)} = x_{n-1}-x_{1d}^{(n-2)} \\ e_n = \dot{e}_{n-1} = \ddot{x} - \ddot{x}_{1d} = x_3-\ddot{x}_{1d} \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧e1=x−x1d=x1−x1de2=e˙1=x˙−x˙1d=x2−x˙1d⋮en−1=e1(n−2)=x(n−2)−x1d(n−2)=xn−1−x1d(n−2)en=e˙n−1=x¨−x¨1d=x3−x¨1d立即设计滑模面
s = c 1 e 1 + c 2 e 2 + ⋯ + c n − 1 e n − 1 + e n = ∑ i = 1 3 c i e i = 0 s=c_1 e_1 + c_2 e_2 + \cdots + c_{n-1} e_{n-1} + e_n = \sum_{i=1}^3 c_ie_i = 0 s=c1e1+c2e2+⋯+cn−1en−1+en=i=1∑3ciei=0其中 e n e_n en前系数为1。
滑模面 s s s的导数为
s ˙ = ∑ i = 1 n − 1 c i e i + 1 + f + g u − x 1 d ( n ) = Γ ′ + f + g u − x 1 d ( n ) \begin{aligned} \dot{s} &= \sum_{i=1}^{n-1} c_i e_{i+1} + f + gu - x_{1d} ^{(n)} \\ &= \Gamma' + f + gu - x_{1d} ^{(n)} \end{aligned} s˙=i=1∑n−1ciei+1+f+gu−x1d(n)=Γ′+f+gu−x1d(n)李雅普诺夫函数不变,其导数为
V ˙ = s ( Γ ′ + f + g u − x 1 d ( n ) ) = s g ( Γ ′ + f − x 1 d ( n ) g + u ) \begin{aligned} \dot{V} &= s \left( \Gamma' + f + gu - x_{1d} ^{(n)} \right) \\ &= sg \left( \frac{ \Gamma' + f - x_{1d} ^{(n)} }{g} + u \right) \end{aligned} V˙=s(Γ′+f+gu−x1d(n))=sg(gΓ′+f−x1d(n)+u)
设计 u u u形式仍为(8)式,于是
V ˙ = s g ( Γ ′ + f − x 1 d ( n ) g + u ) = s g ( Γ ′ + f − x 1 d ( n ) g − k ⋅ s g n ( s ) ) = s ( Γ ′ + f − x 1 d ( n ) ) − k g ∣ s ∣ \begin{aligned} \dot{V} &= sg \left( \frac{ \Gamma' + f - x_{1d} ^{(n)} }{g} + u \right) \\ &= sg \left( \frac{ \Gamma' + f - x_{1d} ^{(n)} }{g} - k \cdot sgn(s) \right) \\ &= s \left( \Gamma' + f - x_{1d} ^{(n)} \right) - kg \lvert s \rvert \end{aligned} V˙=sg(gΓ′+f−x1d(n)+u)=sg(gΓ′+f−x1d(n)−k⋅sgn(s))=s(Γ′+f−x1d(n))−kg∣s∣
并且同理
V ˙ = s ( Γ ′ + f − x 1 d ( n ) ) − k g ∣ s ∣ ≤ ∣ s ∣ ∣ Γ ′ + f − x 1 d ( n ) ∣ − k g ∣ s ∣ = ∣ s ∣ ( ∣ Γ ′ + f − x 1 d ( n ) ∣ − k g ) \begin{aligned} \dot{V} &= s \left( \Gamma' + f - x_{1d} ^{(n)} \right) - kg \lvert s \rvert \leq \lvert s \rvert \Big \lvert \Gamma' + f - x_{1d} ^{(n)} \Big \rvert - kg \lvert s \rvert \\ &= \lvert s \rvert \left( \Big \lvert \Gamma' + f - x_{1d} ^{(n)} \Big \rvert - kg \right) \end{aligned} V˙=s(Γ′+f−x1d(n))−kg∣s∣≤∣s∣∣∣∣Γ′+f−x1d(n)∣∣∣−kg∣s∣=∣s∣(∣∣∣Γ′+f−x1d(n)∣∣∣−kg)同样的结论:只要设计满足 ∣ Γ ′ + f − x 1 d ( n ) ∣ − k g ≤ 0 \Big \lvert \Gamma' + f - x_{1d} ^{(n)} \Big \rvert - kg \leq 0 ∣∣∣Γ′+f−x1d(n)∣∣∣−kg≤0,那么就能有 V ˙ ≤ 0 \dot{V} \leq 0 V˙≤0。
可以看出,高维情况下的控制律(8)设计一点不会改变,改变的仅仅是 k k k的取值范围,而这部分改变也是因为 k k k表达式中 Γ ′ \Gamma' Γ′改变了形式(从三阶下的 c 1 e 2 + c 2 e 3 c_1 e_2 + c_2 e_3 c1e2+c2e3变为了 ∑ i = 1 n − 1 c i e i + 1 \sum_{i=1}^{n-1} c_i e_{i+1} ∑i=1n−1ciei+1)。
从控制律(8)式可以看出,对 u u u的限制仅仅存在于 k k k上,只要 k k k满足了条件(11),那么 u u u所在的李雅普诺夫函数就能实现稳定,进而系统的滑模面也是稳定的,系统就能被拉取到滑模面 s s s上,达到理想的控制效果。
可以看出,(8)式里并没有 f f f项,即并没有扰动项等其他不确定项,因此,滑模控制可以无视不确定项和扰动,直接用“暴力”的方式达到控制效果。
但另一方面,(8)式采用的是根据 s s s符号来输出信号的形式,当系统在滑模面附近来回摆动时, s s s的符号会不断地、高频地变化,因此 u u u的值和符号也会不断地、高频地变化,反应到实际情况下就是硬件不断高频地在正负信号之间变换,这对硬件系统是一种考验,大多数硬件系统无法承受这样的高负荷工作,这是滑模控制的一个缺点。