1. 从“收敛速度不够快”说起:终端滑模到底做了什么
先聊个场景。你在做机械臂轨迹跟踪,用了经典的滑模控制,仿真波形也漂亮,误差曲线也确实收敛到零了。可审稿人或者老板一句话问过来:“你这个收敛速度能不能更快?能不能做到有限时间收敛?”你回头一看渐近收敛的理论保证,确实只能说“当时间趋于无穷时误差趋于零”。好,这本身没问题,工程上误差到了千分之一以下肉眼也看不出来了。但有些场合,比如高精度快速定位、飞行器姿态机动、电机伺服系统的点对点运动,收敛速度直接决定系统动态性能,这时候你就要认真考虑终端滑模了。
终端滑模,英文是 Terminal Sliding Mode,常简写为 TSM。它最核心的改动,是把传统线性滑模面里的线性误差项换成非线性项——具体地说是误差的分数幂次项。就这么一个看似不大的改动,把收敛性质从“渐近收敛”硬生生提升为“有限时间收敛”。所谓有限时间收敛,就是存在一个实实在在的时间 T,在 T 时刻之后误差精确等于零,而不是“无限逼近”。
这个区别你可以类比两种到站方式:传统滑模像一辆减速进站的高铁——理论上要无限时间才能完全停下,但实际快到站时速度已经慢到可以忽略;终端滑模像一列有精准停表的地铁——设定好时间,到点就正好停在标线位置。工程上后者在很多场景下要友好得多。
这篇文章我会从原理推导、控制器设计、奇异性问题、改进方案到工程调参,把我自己啃终端滑模过程中的理解和个人经验完整梳理一遍。适合刚接触滑模控制的研究生、做运动控制的工程师,以及准备把终端滑模写进论文或者项目里的朋友。
2. 终端滑模要解决的问题:传统滑模慢在哪
2.1 从线性滑模面说起
传统滑模控制里,最常见的滑模面是线性形式:
s = c·e + é
其中 e 是跟踪误差,é 是误差导数(速度误差),c 是正的滑模面斜率系数。当系统进入滑模面 s = 0 时,有:
é = -c·e
这是一个典型的一阶线性微分方程,解出来是:
e(t) = e(0)·e^(-c·t)
也就是说,误差按指数规律衰减。问题就在这个“指数”上:理论上 e(t) 要等到 t 趋于无穷才变成零。虽然实际工程里 e^(-5) 已经小得可怜,但从控制理论的角度,这不是严格意义上的“到达零”,而是“渐进靠近零”。
2.2 指数收敛的局限在哪里
指数收敛有没有问题?分场景。如果你的控制对象允许一定的稳态误差,或者说你最终靠的是积分项来消除残差,那渐近收敛问题不大。怕就怕两类场景:
第一类是高速高精度场合。比如半导体设备的直线电机定位,要求在几毫秒内到达目标位置并且误差保持在微米级以下。指数收敛的尾巴拉得很长,意味着“最后一点点误差”要花相对长的时间去磨掉。
第二类是对收敛时间有硬指标的场景。比如无人机在狭窄空间里的姿态翻转,你希望它“在 0.3 秒内完成”,而不是“理论上无限时间完成”。渐近收敛给不出一个确定性的收敛时间上界,这让控制系统设计师很难做预算。
终端滑模就是冲着这个痛点去的:我直接设计一种滑模面,让系统在滑模面上运动时,误差的微分方程变成能在有限时间内到达零点的形式。
2.3 终端滑模的核心思路:把滑模面改成非线性
终端滑模的做法,是把滑模面中的线性误差项 c·e 替换为非线性项 β·e^(q/p),其中 β > 0,p 和 q 通常取正奇数并且满足 p > q。
常见的终端滑模面长这样:
s = é + β·e^(q/p)
其中 q/p 在 0 到 1 之间。当系统进入滑模面 s = 0 后:
é = -β·e^(q/p)
这个微分方程的解是什么?直接积分一下。把方程写为:
de/dt = -β·e^(q/p)
分离变量:
e^(-q/p) de = -β dt
两边积分,从 e(0) 到 0,从 0 到收敛时间 t_s:
∫_{e(0)}^{0} e^(-q/p) de = -β·t_s
左边算出来是 [p/(p-q)]·e(0)^((p-q)/p),所以:
t_s = [p / (β·(p-q))]·e(0)^((p-q)/p)
这个式子说明两件事:第一,收敛时间 t_s 是一个有限值,不依赖于“趋于无穷”;第二,t_s 的大小由参数 β、p、q 共同决定,你可以通过调参主动设计收敛速度。这就是终端滑模“有限时间收敛”这个名字的来源。
我最早看到这个推导的时候觉得特别朴素——不就是把线性项改成幂次项嘛,一积分反而出来一个有限时间。但细想就知道这里的巧妙之处:当误差 e 很小的时候,e^(q/p) 反而比 e 大(因为 q/p < 1 时,小于 1 的数的分数次幂会变大),所以误差越接近零点,趋近速度反而越快,这正好抵消了指数衰减在零点附近“拖尾巴”的问题。
3. 终端滑模的数学原理和稳定性分析
3.1 标准终端滑模的控制器推导
终端滑模的控制器设计流程,和传统滑模控制是一套思路:先设计滑模面,再设计控制律使得系统能到达滑模面并在其上运动。区别只在于滑模面的形式不同,导致控制律里多了一些非线性项。
以一阶非线性系统为例:
ẋ = f(x) + g(x)·u
其中 x 是系统状态,u 是控制输入,f(x) 和 g(x) 是已知的光滑函数,g(x) 非奇异(即不为零)。假设我们想让状态 x 跟踪参考轨迹 x_d,定义误差 e = x - x_d。
选择终端滑模面:
s = é + β·e^(q/p)
对滑模面求导:
ṡ = ë + β·(q/p)·e^(q/p - 1)·é
这里要注意,e^(q/p - 1) 就是 e^((q-p)/p),因为 q/p - 1 = (q-p)/p。由于 p > q,所以 q-p < 0,这个指数是负的。这意味着当 e = 0 时,e^((q-p)/p) 会出现无穷大的奇异项——这是标准终端滑模的著名痛点,后面我会专门讲。
令 ṡ = 0 求得等效控制 u_eq:
ë = ẋ_ddot - ḟ(x) - ġ(x)·u - g(x)·ů
等等,这里我偷懒了,f(x) 的导数还得展开,实际上我们一般用另一种方式处理。让我直接把二阶情形写清楚。考虑二阶系统:
ẋ₁ = x₂ ẋ₂ = f(x) + g(x)·u
定义跟踪误差 e = x₁ - x_d,则 é = x₂ - ẋ_d,ë = ẋ₂ - ẍ_d = f + g·u - ẍ_d。
终端滑模面取:
s = é + β·e^(q/p)
对时间求导:
ṡ = ë + β·(q/p)·e^(q/p-1)·é = f + g·u - ẍ_d + β·(q/p)·e^(q/p-1)·é
令 ṡ = -η·sign(s)(等速趋近律),得到控制律:
u = g^(-1)·[ -f + ẍ_d - β·(q/p)·e^(q/p-1)·é - η·sign(s) ]
这就是标准终端滑模控制器的一个典型形式。等速趋近律 -η·sign(s) 保证系统状态能够到达滑模面,而到达之后由于滑模面的非线性设计,误差在有限时间内收敛到零。
3.2 稳定性证明:Lyapunov 视角
终端滑模的稳定性证明和传统滑模基本一致,只不过 Lyapunov 函数导数的分析里多了非线性项的影响。取 Lyapunov 函数:
V = (1/2)·s²
求导得到:
V̇ = s·ṡ = s·[ f + g·u - ẍ_d + β·(q/p)·e^(q/p-1)·é ]
代入控制律,得到:
V̇ = s·[ -η·sign(s) ] = -η·|s|
只要 η > 0,V̇ ≤ 0 就成立,而且因为 V̇ = -η·|s|,系统能在有限时间内到达滑模面。到达时间 t_r 的上界也可以估算:因为 |s| ≥ √2·V^(1/2),所以 V̇ ≤ -η·√2·V^(1/2),解这个微分方程可得:
V(t)^(1/2) ≤ V(0)^(1/2) - (η/√2)·t
令 V(t) = 0,得到 t_r ≤ √2·V(0)^(1/2) / η = √2·|s(0)| / (2η) = |s(0)| / η。
这是滑模到达阶段的时间上界。再加上滑模面上误差收敛时间 t_s,整个闭环系统从初始状态到误差精确为零的总时间有一个明确上界:
T_total = t_r + t_s
这就是终端滑模能做“收敛时间预算”的理论基础。
3.3 和线性滑模的对比:差的不只是收敛时间
终端滑模和线性滑模的对比,除了收敛时间性质不同,还有几个值得注意的差异。
第一,到达阶段的行为不同。线性滑模在趋近过程中,误差大的时候收敛快,误差小的时候收敛慢;终端滑模由于分数幂次的特性,误差大的时候收敛速度反而不如线性滑模,但误差小的时候收敛速度更快。这个特性导致终端滑模在初始误差较大的时候,整体动态响应可能不如精心调参的线性滑模。为了弥补这个缺点,后来发展出“快速终端滑模”,在滑模面里同时保留线性和非线性两项。
第二,对参数扰动的敏感程度不同。终端滑模面中的分数幂项在零点附近斜率趋于无穷(从数学上看,导数为 (q/p)·e^(q/p-1),当 e→0 时这个导数趋于无穷),这意味着误差稍微偏离零点,滑模面就会产生很大的恢复力。好处是鲁棒性强,坏处是容易激发高频抖振,对执行机构不友好。
第三,奇异性问题。标准终端滑模存在控制量奇异的风险,这个必须得处理,不处理基本没法实际用。下面我专门展开讲。
4. 终端滑模最大的坑:奇异性问题
4.1 奇异问题是怎么产生的
回头看控制器里的这一项:
β·(q/p)·e^(q/p-1)·é
其中 q/p - 1 = (q-p)/p < 0。也就是说,当跟踪误差 e 精确等于零,但误差导数 é 不为零(比如系统刚越过目标点还在继续运动)的时候,e 的负指数次幂趋近于无穷大,控制器输出的控制量 u 也趋近于无穷大。
这在物理上意味着:系统状态刚好穿过滑模面、误差为零的瞬间,如果状态变化率不为零,控制器会要求一个无穷大的输入。实际系统当然给不出无穷大的控制量,结果就是控制饱和、执行机构冲击,甚至系统失稳。
这个问题在标准终端滑模的论文里经常被一笔带过,但做仿真的时候你会直接看到控制量在零点附近冲出一个尖峰,特别吓人。
4.2 解决思路一:非奇异终端滑模
解决奇异性最经典的方案,是 2002 年前后提出的非奇异终端滑模(Nonsingular Terminal Sliding Mode, NTSM)。核心思路是把滑模面里的 e 和 é 对调一下位置,利用 p 和 q 的大小关系避开负指数。
非奇异终端滑模面常取为:
s = e + (1/β)·é^(p/q)
注意这里的指数是 p/q > 1。那么控制器中出现的项是 é^(p/q - 1) = é^((p-q)/q),因为 p > q,这个指数是正的,不存在奇异问题。
这个设计有两点非常巧妙。第一,滑模面 s = 0 对应的方程是 e + (1/β)·é^(p/q) = 0,即 é = -β^(q/p)·e^(q/p),和终端滑模在滑模面上的动态是一样的——有限时间收敛性质保留下来了。第二,控制器里不再出现负指数项,控制量有限,实际可执行。
我个人的经验是,除非论文里明确要求用标准终端滑模做理论对比,否则工程实现直接上非奇异终端滑模,省太多麻烦。
4.3 解决思路二:快速终端滑模
标准终端滑模还有一个问题:当误差远离零点的时候,收敛速度反而偏慢。快速终端滑模(Fast Terminal Sliding Mode, FTSM)的滑模面设计为:
s = é + α·e + β·e^(q/p)
它在滑模面上的动态是:
é = -α·e - β·e^(q/p)
当误差 e 很大时,第一项 α·e 起主导作用,收敛速度接近线性滑模的指数收敛;当误差 e 接近零时,第二项 β·e^(q/p) 起主导作用,保证有限时间收敛。这样既有了大误差时的快速逼近,又保留了小误差时的有限时间收敛性。
不过要注意,快速终端滑模同样存在奇异性问题。处理方法和标准终端滑模类似:要么改用非奇异形式,要么在误差接近零时切换控制律。常见的做法是把快速终端滑模的滑模面改造为:
s = e + (1/α)·é^(p₁/q₁) + (1/β)·é^(p₂/q₂)
这类双幂次滑模面的形式,具体参数选择比较灵活,适合结合被控对象的实际情况来定。
5. 从理论到仿真:一个具体例子跑通全过程
5.1 被控对象和控制器设计
理论说再多,不如跑一个仿真。我用一个简单的二阶非线性系统来演示,模型是:
ẋ₁ = x₂ ẋ₂ = -2·x₂ - 3·x₁ + sin(x₁) + u
这个系统带了一个非线性项 sin(x₁),同时状态系数也比较强,适合展示滑模控制的鲁棒性。目标:让 x₁ 从初始值 x₁(0) = 1 跟踪到零,x₂(0) = 0,要求有限时间内到达并收敛。
这里我直接用非奇异终端滑模来设计,避免奇异性问题。取滑模面:
s = e + (1/β)·é^(p/q)
其中 e = x₁ - 0 = x₁,é = x₂。参数取 β = 2,p = 5,q = 3(注意 p > q,且都是正奇数,保证 é^(p/q) 对负数也有定义)。
控制器设计,令 ṡ = -η·sign(s) 等速趋近律:
ṡ = é + (1/β)·(p/q)·é^(p/q-1)·ë = x₂ + (1/β)·(p/q)·x₂^(p/q-1)·(-2·x₂ - 3·x₁ + sin(x₁) + u)
代入 ë = -2·x₂ - 3·x₁ + sin(x₁) + u,并令 ṡ = -η·sign(s),解得:
u = 2·x₂ + 3·x₁ - sin(x₁) - β·(q/p)·x₂^(2-p/q) - η·(β·q/p)·x₂^(1-p/q)·sign(s)
看着复杂,其实就是把方程反解出来。取 η = 1.5。
5.2 Simulink 仿真搭建和参数敏感性
仿真时间设 5 秒,采样周期 1 ms。这里有几个实操细节很关键。
控制律中 x₂^(1-p/q) 在 x₂ = 0 附近会出现问题。p = 5,q = 3,则 1-p/q = 1-5/3 = -2/3,负指数。当 x₂ = 0 且 s ≠ 0 时,这一项无穷大。这其实是非奇异终端滑模在实际离散实现中常见的“伪奇异”现象。解决方法是给这项一个小的死区或者饱和处理,例如当 |x₂| < ε 时,这一项用 x₂ = ε·sign(x₂) 代替。我取 ε = 0.001,仿真结果非常平稳。
sign 函数的抖振问题也要处理。直接用 sign(s) 在仿真里就会出现控制量以很高频率在正负之间切换,虽然数值上能跑过,但如果之后要做硬件实验,这样的控制信号执行机构受不了。建议把 sign(s) 换成饱和函数 sat(s/φ),其中 φ 是边界层厚度。φ 太小则抖振没有完全消除,φ 太大则引入了稳态误差。我试过 φ 取 0.01 到 0.05 之间对结果影响不大,但要注意此时滑模的“精确”到达变成了“边界层内”到达,理论上的有限时间收敛变成了实际上的有界收敛。做理论分析写论文时,这个近似要提前跟审稿人交代清楚。
5.3 仿真结果分析和调参心得
跑完仿真,x₁ 的轨迹在大约 1.2 秒时到达零,之后一直保持在零附近(数值上在 ±0.001 以内),控制量也保持在 ±5 以内,没有出现尖峰。和线性滑模 c·e + é = 0(取 c = 4)做对比,线性滑模同样在 1 秒左右让误差落到 0.01 以下,但误差从 0.01 到 0.001 又磨了将近 1 秒;终端滑模则在零点附近明显更“利落”。
调参经验归纳一下:
- β 越大,小误差时收敛越快,但 β 太大会导致滑模面附近的高增益放大噪声,控制量毛糙。
- p/q 越接近 1,收敛时间越短,但控制量越大;p/q 越接近 0,大误差段收敛越慢。一般取 p/q 在 0.5 到 0.8 之间比较平衡。
- η(趋近律增益)决定了到达滑模面的速度,η 太小抗扰能力差,η 太大抖振严重。实用中可以先调 η 使到达阶段表现满意,再调 β 优化收敛阶段。
我踩过的一个坑是,刚开始把 β 调得很大(比如 β = 10),期望收敛更快,结果系统在零点附近出现了明显的高频振荡,控制量也一直是满幅跳变。后来把 β 降回 2 左右,加了边界层替换 sign,系统就稳定了。总结一句话:终端滑模的调参,本质是在“收敛速度”和“控制平滑度”之间做权衡,不要贪快。
6. 终端滑模的几种演变:从标准到自适应再到离散
6.1 非奇异终端滑模的进一步改进
非奇异终端滑模解决了奇异性,但引入了新问题:滑模面 s = e + (1/β)·é^(p/q) 中 é^(p/q) 要求 é 非负或者 p、q 必须取正奇数。为了避开这个限制,学者们提出了“终端滑模的终端吸引子”概念——本质上是通过设计分段函数,把滑模面定义成在不同误差范围内切换的形式。
比如一类常用形式是:
s = é + β·ψ(e)
其中 ψ(e) 在 |e| ≥ μ 时取 e^(q/p),在 |e| < μ 时取线性形式 δ₁·e + δ₂·e³,目的是让 ψ(e) 在 e = 0 附近可导且不奇异。这种分段设计的好处是理论上严谨,实际调试的时候也方便,但参数多了需要逐一调。
6.2 与干扰观测器、自适应的结合
终端滑模的鲁棒性虽然好,但它本质上是用“高增益”换“鲁棒”。如果系统有持续的扰动,控制量需要一直跟扰动对抗,抖振会更严重。一个很常见的工程化改进是“终端滑模 + 扰动观测器”。
思路是这样的:把系统中的不确定性和外部扰动合并成一个集总扰动项 d,在终端滑模控制律中显式地加入扰动估计值 d̂,控制器只需要补偿“估计误差”而不是“全部扰动”,这样可以大幅降低切换增益 η 的取值,缓解抖振。
扰动观测器可以设计成扩展状态观测器或者简单的非线性扰动观测器。以扩展状态观测器为例,把 d 作为扩展状态,构造观测器:
ż₁ = z₂ + l₁·(x₁ - z₁) ż₂ = f + g·u + z₃ + l₂·(x₁ - z₁) ż₃ = l₃·(x₁ - z₁)
其中 z₃ 就是扰动 d 的估计值。观测器带宽由增益 l₁、l₂、l₃ 决定,按带宽设计法整定即可。实测经验是,观测器带宽取控制带宽的 5 到 10 倍效果较好,太高会放大测量噪声。
自适应终端滑模则是把切换增益 η 设计成自适应参数,根据滑模面的大小动态调整。效果类似,但要注意自适应律的收敛速度和参数漂移问题。参数漂移在持续扰动下经常出现,得加 σ 修正项或死区。
6.3 离散域实现中的常见问题
论文里终端滑模大部分在连续域里分析,但真到工程实现,控制器都是数字离散化的。离散化带来的问题主要有两个。
第一个是有限时间收敛性质在离散采样下会退化。理论上误差在时刻 T 精确到零,但采样周期是有限的,实际上误差会在零附近的一个边界层内波动。波动幅度大致与采样周期呈正比关系。想减小这个波动,只能提高采样频率,实话说,终端滑模对采样率的要求比 PID 要高不少。
第二个是离散化方式的影响。简单的欧拉离散会把滑模控制的一些几何性质扭曲,尤其当采样周期比较大时,系统可能会出现隐晦的极限环振荡。我通常会先用零阶保持器精确离散化被控对象模型,再在这个离散模型上重新设计滑模面和控制律。虽然麻烦一些,但移植到实际控制器时省去很多调试时间。如果控制器的计算能力有限,也可以沿用连续域设计,但采样周期必须小于系统最小时间常数的四分之一甚至八分之一。
7. 终端滑模适合用在哪:场景和价值边界
7.1 强项场景
从我自己做过的项目来总结,终端滑模在以下几类场景里比较有优势。
一是高精度快速定位。典型代表是直线电机驱动的运动平台和工业机械臂的快速点到点运动。这类系统对“到位时间”有硬要求,终端滑模的有限时间收敛正好对路。
二是飞行器姿态控制。飞行器姿态运动的强耦合、强非线性、参数不确定性,使得滑模控制天然有一席之地。而姿态机动任务又常常有明确的时间约束,终端滑模能给出收敛时间上界,有利于任务规划。
三是电力电子变换器控制。Boost、Buck 这类变换器本质是变结构系统,滑模控制天然匹配其开关特性。终端滑模在输出电压跟踪问题上也能提供更快的动态响应。
四是执行器饱和约束下的快速响应问题。终端滑模由于能快速收敛,在控制量受限时可以更快退出饱和,整体响应比线性滑模紧凑。
7.2 不擅长的场景
终端滑模不是万能的。以下几类场景我会慎重使用。
第一,强测量噪声场景。终端滑模面的分数幂项在零点附近斜率极大,轻微测量噪声就会被放大成可观的控制波动。比如用低精度编码器做速度反馈时,速度信号噪声很大,终端滑模很容易引发高频抖振。这种场景建议搭配高带宽观测器做状态估计后再用。
第二,对控制量平滑度有苛刻要求的场景。比如某些精密加工设备,控制力矩波动直接影响表面质量。终端滑模再怎么处理,天然比 PID 或 LQR 的力矩波动大。
第三,模型严重不确定的场景。终端滑模虽然有一定鲁棒性,但滑模面的设计依赖于模型相对阶。模型结构都不对的话,滑模设计无从谈起。这种情况不如用无模型控制方法。
7.3 和现有控制方法搭配的工程建议
我的工程观点是:终端滑模不是用来替代 PID 的,而是在特定环节做增强的。
一个实用的搭配方案是“PD + 终端滑模补偿”。用 PD 控制器做基础闭环,保证系统在正常工作点附近的基本动态,同时用终端滑模设计一个补偿项,专门处理扰动和模型偏差。这样日常工况下控制量平滑,遇到大的扰动时终端滑模补偿项快速介入,兼顾了稳态平滑性和动态鲁棒性。
另一个方案是“终端滑模 + 前馈”。终端滑模负责鲁棒稳定和有限时间收敛,前馈负责主要的跟踪性能。因为前馈抵消掉了大部分已知动态,终端滑模只需要处理残余误差,切换增益可以取得很小,抖振也低。
这些搭配在工程上比“裸用”终端滑模稳得多,实话说我几乎没有在正式项目里直接裸用过一套纯终端滑模,都是做的混合控制。
8. 总结性思考:终端滑模到底值不值得学
终端滑模这个概念,说复杂也复杂,说简单也简单。核心就一句话:把滑模面上的线性误差项改成分数幂次项,让误差动态从“指数渐近收敛”变成“有限时间收敛”。就这一个改动,衍生出了非奇异终端滑模、快速终端滑模、自适应终端滑模、离散终端滑模一大堆变种,每一篇论文都像是在同一个骨架上做不同的装饰。
从我个人的实际体会来看,终端滑模最大的价值不在于它比传统滑模提升了多少性能,而在于它提供了一种“有限时间收敛”的思维方式。当你开始接触这个思路之后,再看其他控制方法,比如有限时间稳定(Finite-time Stability)理论、固定时间稳定(Fixed-time Stability)理论,会发现它们其实是同一个思想族谱上的不同分支。搞懂了终端滑模,再上手那些“更高级”的有限时间控制方法,基本就是顺水推舟的事。
最后再分享一个小技巧:如果你在写论文需要展示终端滑模的收敛时间优势,别只看误差曲线的尾巴,把收敛时间的理论值和仿真测量值放在同一个表里对比,审稿人对这种“理论可观、实测可验”的展示方式印象会特别好。我自己第一次做这个对比时发现,实测收敛时间往往比理论值略小一点,这是因为理论值的推导用了一些放缩不等式,给的是保守上界。把这个差异在正文里说明白,反而显得你对问题理解得透彻。