尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
第200篇 滑模控制——对扰动“免疫“的强鲁棒方案
上篇聊了Lyapunov稳定性分析非线性控制的基石。有了Lyapunov工具你就能设计各种非线性控制器了。今天聊的滑模控制Sliding Mode Control, SMC就是其中最暴力的一个。滑模控制的核心思想设计一个滑模面让系统状态被吸引到这个面上然后沿着面滑到平衡点。一旦到了滑模面上系统的动态就完全由滑模面决定和系统参数、外部扰动都没关系了。说白了滑模控制把系统强行拽到一条你设计好的轨迹上然后系统就只能乖乖沿着这条轨迹走。不管外面刮风下雨扰动不管系统参数怎么变只要拽的力气够大系统就跑不出你画的道。一、滑模面的设计滑模控制的第一步是设计滑模面s(x) 0。s(x)是一个标量函数对单输入系统它定义了状态空间中的一个面。你希望系统状态最终落在这个面上然后沿着面滑到原点。最简单的滑模面s c*e e_dot其中e x - x_d是跟踪误差c是正常数。s 0意味着e_dot -c*e也就是误差按指数衰减。你选了c就选了收敛速度。c越大收敛越快但对执行器的要求也越高。对高阶系统滑模面的设计更灵活。比如二阶系统s e_dot c1e c2integral(e)。加了积分项可以消除稳态误差和PID的思路类似。二、到达条件和控制律设计滑模面设计好了下一步是让系统状态到达这个面。到达条件reaching conditions * s_dot 0。这个条件的物理意义是当s 0时s_dot 0s在减小当s 0时s_dot 0s在增大。总之s一直在往零靠拢。用Lyapunov方法验证选V 0.5 * s^2V_dot s * s_dot。到达条件s * s_dot 0等价于V_dot 0系统渐近稳定。控制律设计的关键让s * s_dot 0成立。假设系统x_dot f(x) g(x)*u d(t)其中d(t)是未知扰动|d(t)| D。s_dot ... (包含f(x)、g(x)、u和d(t)的表达式)为了让s * s_dot 0控制律通常分两部分u u_eq u_sw等效控制u_eq假设没有扰动d0让s_dot 0算出来的控制量。这个控制量让系统恰好待在滑模面上。切换控制u_sw用来对抗扰动和不确定性。典型形式是u_sw -K * sign(s)其中K D扰动上界。sign(s)是符号函数s 0时输出1s 0时输出-1。把两部分加起来u u_eq - K * sign(s)。验证一下s * s_dot s * (stuff - K * sign(s)) s * stuff - K * |s|。只要K足够大大于stuff的最大值s * s_dot 0就成立。这就是滑模控制的精髓等效控制负责正常行驶切换控制负责对抗一切不确定性。三、抖振问题滑模控制的阿喀琉斯之踵理想滑模控制中sign(s)函数在s0处无限高频切换。实际系统中执行器有延迟和带宽限制这种高频切换会导致严重的抖振chattering。抖振有多严重之前做液压伺服控制的团队滑模控制器一上去液压阀在高频开合油管直接振裂了。这不是段子是真实事故。抖振的危害1执行器磨损加剧寿命缩短2激发系统未建模的高频动态可能导致不稳定3控制信号噪声大下游系统受影响。工程上抑制抖振的常用方法饱和函数替代sign函数把sign(s)换成sat(s/phi)在s接近零的一个小邻域边界层|s|phi内用线性插值代替符号函数。这样控制信号在滑模面附近是连续的不会高频切换。代价是在边界层内丧失了完全的鲁棒性只剩近似鲁棒。高阶滑模把不连续作用放到控制量的高阶导数上。比如super-twisting算法控制量u本身是连续的但u_dot包含sign函数。这样执行器看到的是连续信号没有抖振。高阶滑模是目前研究热点效果很好但设计更复杂。低通滤波在控制信号后面加一个低通滤波器把高频分量滤掉。简单粗暴但会引入相位延迟可能影响稳定性。四、Python代码滑模控制仿真import numpy as np import matplotlib.pyplot as plt # 二阶系统: x_ddot f(x) b*u d(t) # f(x) -2*x_dot - 3*x (标称动态) # b 1.5 (控制增益有不确定性) # d(t) 0.5*sin(2*t) (外部扰动) def sliding_mode_control(): dt 0.001 T np.arange(0, 5, dt) # 滑模面参数 c 5.0 # 滑模面斜率 K 3.0 # 切换增益需大于扰动上界 phi 0.1 # 边界层厚度抑制抖振 # 系统状态 x 2.0 # 初始位置 x_dot 0.0 # 初始速度 x_d 0.0 # 目标位置 x_log [] s_log [] u_log [] for t in T: e x - x_d e_dot x_dot s e_dot c * e # 滑模面 # 等效控制标称模型下让s_dot0 f_nom -2 * x_dot - 3 * x b_nom 1.5 u_eq (1/b_nom) * (-f_nom x_ddot_d - c * e_dot) # x_ddot_d 0 (目标位置恒定) # 切换控制用sat代替sign抑制抖振 if abs(s) phi: u_sw -K * np.sign(s) else: u_sw -K * s / phi # 边界层内线性插值 u u_eq u_sw # 扰动 d 0.5 * np.sin(2 * t) # 系统演化真实动态 x_ddot f_nom b_nom * u d x_dot x_ddot * dt x x_dot * dt x_log.append(x) s_log.append(s) u_log.append(u) return T, np.array(x_log), np.array(s_log), np.array(u_log) T, x, s, u sliding_mode_control() # 可以看到x在约0.5秒内收敛到0s迅速趋近于0 # 控制信号u在边界层附近平滑没有严重抖振这段代码展示了滑模控制的完整流程设计滑模面s e_dot c*e计算等效控制和切换控制用sat函数抑制抖振。仿真中系统在0.5秒内收敛到目标即使有正弦扰动也不影响。五、面试实战Q滑模控制为什么对扰动免疫A一旦系统到达滑模面s0系统动态就完全由滑模面方程决定。等效控制抵消了标称动态切换控制对抗了所有有界扰动。在滑模面上系统对参数变化和扰动不敏感——这叫不变性invariance。Q抖振怎么解决A工程上最常用的方案是边界层饱和函数。学术上最热门的是高阶滑模super-twisting等。两者可以结合使用。面试时你能讲清楚抖振的来源和至少两种解决方案就足够了。Q滑模控制和鲁棒控制有什么区别A鲁棒控制H-infinity等是线性频域的思路用传递函数分析。滑模控制是非线性时域的思路用Lyapunov方法分析。滑模的鲁棒性更强理论上完全不变但代价是控制信号不连续。Q滑模控制在机器人领域有哪些应用A机械臂轨迹跟踪对抗负载变化和摩擦不确定性、移动机器人路径跟踪对抗地面摩擦变化、四旋翼抗风控制。之前有个做水下机器人的团队用滑模控制对抗水流扰动效果比PID好很多。小结滑模控制是一种强鲁棒的非线性控制方案。核心思想设计滑模面到达条件让系统状态被拽到滑模面上然后沿面滑到平衡点。一旦在滑模面上系统对参数变化和扰动完全免疫。代价是抖振——sign函数的不连续切换会激发高频动态。工程上用边界层饱和函数或高阶滑模来抑制。滑模控制是Lyapunov方法的直接应用——选V0.5*s^2设计控制律让V_dot0。理论和实践完美结合。下篇聊阻抗控制——让机械臂温柔地与环境交互。不再是纯粹的位置/力控制而是控制机械臂的动态行为。如果这篇文章对你有帮助欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。「机器人软件开发面试·从入门到精通」连载系列上一篇第199篇 非线性控制基础——Lyapunov稳定性分析下一篇预告第201篇 阻抗控制——让机械臂温柔地与环境交互有任何问题欢迎评论区留言我会尽量回复。
RELATED

相关推荐

Cocket Nova开发板:8位MCU CH552g的嵌入式开发实践与创新应用

Cocket Nova开发板:8位MCU CH552g的嵌入式开发实践与创新应用

1. 从八位机到现代创客:Cocket Nova的定位与野心 最近在创客圈和嵌入式开发社区里,一个名为“Cocket Nova”的开发板开始引起不少讨论。这个名字本身就很有意思——“Cocket”听起来像是对经典“Rocket”(火箭)的谐音,…

📅 2026/10/7 10:47:28
基于英飞凌TLE9879的BLDC电机控制:从开发板到自主设计的全流程解析

基于英飞凌TLE9879的BLDC电机控制:从开发板到自主设计的全流程解析

1. 项目背景与TLE9879的定位 最近在做一个无刷直流电机的驱动项目,选型阶段在英飞凌的官网上看到了一个针对MOTIX™ TLE9879 MCU开发板的免费申请活动。说实话,对于做电机控制、车载小功率执行器或者嵌入式电源管理的工程师来说,这算是个挺不…

📅 2026/9/20 11:27:01
基于Arduino与TFT屏的12小时制桌面电子钟DIY全攻略

基于Arduino与TFT屏的12小时制桌面电子钟DIY全攻略

1. 项目概述:一块能“说话”的复古桌面时钟 如果你和我一样,对桌上那些千篇一律的电子时钟感到审美疲劳,总想自己动手做点有温度、有灵魂的小玩意儿,那么这个项目绝对能点燃你的创作欲。今天要聊的,就是用一块Arduino …

📅 2026/9/20 1:12:14
MORE NEWS

更多资讯

📰

螺栓销钉缺失检测:1209张VOC数据集与YOLOv8训练实践

简介:输电线路螺栓销钉缺失检测图像数据集专注电力设施智能巡检场景,面向计算机视觉研究者与电力运维开发人员,旨在解决销钉缺失这一高危隐患的自动识别问题。数据集共2000个文件、约89.52MB,包含791张高清JPEG巡检图像及1209个PA…

📰

AI知识简记(持续更新):用TaoToken统一Key打通VS Code与Cursor的大模型调用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

信用风险预测模型实战:从标签定义、WOE特征工程到评分卡转换

简介:这份PDF是一篇基于机器学习算法的商业银行信用风险预测模型研究论文,适合金融科技、风控建模方向的从业者、研究生及竞赛选手参考。文章从信用风险研究的现实背景切入,系统梳理了多元判别分析、Logistic回归等传统统计方法,以…

📰

强激光大气热晕效应相位屏建模与MATLAB仿真实现

简介:基于MATLAB的热晕相位屏仿真程序包,面向光学系统与大气传输研究场景,帮助科研人员和工程师模拟高能激光、望远镜等系统中由大气温度不均匀引发的波前畸变。压缩包共13个文件,包括7个.m脚本、4个.bmp图像、1个.asv临时备份和1…

📰

航拍滑坡数据集4315张VOC+YOLO双格式

简介:本资源为面向遥感图像目标检测任务的航拍滑坡检测专用数据集,适用于计算机视觉方向的研究者、地质灾害智能识别初学者及深度学习模型训练实践者。数据集共4315张512512分辨率航拍图像,全部标注单类别“landslide”,含对应VOC…

📰

程序员数学知识地图:概率统计线代离散图论速查与Python验证

简介:《程序员的数学系列》PPT 面向程序员及需要应用数学知识的技术工作者,系统梳理编程中高频使用的数学基础,帮助读者在算法设计、数据处理与问题建模时补齐理论短板。内容覆盖概率论、统计学、线性代数、离散数学与图论五大板块&#xff0…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬