news 2026/5/16 12:01:28

滑模与终端滑模(SMC):控制领域的奇妙之旅

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
滑模与终端滑模(SMC):控制领域的奇妙之旅

滑模 终端滑模 smc

在控制理论的广阔天地里,滑模控制(Sliding Mode Control,SMC)宛如一颗璀璨的明珠,而终端滑模则是在其基础上进一步发展的瑰宝。今天,咱们就来唠唠这滑模和终端滑模到底是啥神奇玩意儿。

滑模控制(SMC)基础

滑模控制的核心思想有点像引导一辆车沿着特定轨迹行驶。想象一下,你开车要去一个目的地,有一条理想的路线,滑模控制就是想尽办法让车始终沿着这条理想路线走,即使路上有各种干扰。

从数学和控制的角度看,我们定义一个滑动面函数 \(s(x)\),这里 \(x\) 是系统的状态变量。当系统状态在这个滑动面上运动时,系统能呈现出我们期望的性能。比如说,对于一个简单的二阶控制系统,状态变量 \(x = [x1, x2]^T\),我们可能定义滑动面 \(s = c x1 + x2\),其中 \(c\) 是一个根据系统特性精心选择的常数。

下面咱们来点简单代码示例,用Python和控制库来模拟一个简单的滑模控制系统。假设我们有一个一阶线性系统 \(\dot{x} = -x + u\),目标是让 \(x\) 跟踪参考信号 \(r\)。

import numpy as np import matplotlib.pyplot as plt # 定义系统参数 a = -1 b = 1 c = 1 # 滑动面参数 # 时间设置 t = np.linspace(0, 10, 1000) dt = t[1] - t[0] # 初始化变量 x = np.zeros(len(t)) u = np.zeros(len(t)) r = np.sin(t) # 参考信号 # 滑模控制模拟 for i in range(len(t) - 1): s = c * x[i] + (r[i + 1] - r[i]) / dt if s > 0: u[i] = -1 else: u[i] = 1 x[i + 1] = x[i] + dt * (a * x[i] + b * u[i])

在这段代码里,我们先定义了系统的参数 \(a\) 和 \(b\),还有滑动面参数 \(c\)。然后设定时间范围和初始化变量。在循环里,我们根据滑动面函数 \(s\) 的值来确定控制输入 \(u\)。如果 \(s > 0\),就给系统一个负的控制输入,反之给正的控制输入。这样系统状态 \(x\) 就会逐渐被引导到我们期望的轨迹上。

终端滑模控制(Terminal SMC)进阶

终端滑模控制是滑模控制的升级版,它能让系统在有限时间内收敛到平衡点,就好比开车不仅要沿着理想路线走,还得在规定时间内到达目的地。

滑模 终端滑模 smc

终端滑模的滑动面设计更为巧妙,例如对于二阶系统,可能会定义终端滑模面 \(s = x2 + \lambda x1^{\frac{q}{p}}\),其中 \(\lambda\) 是正常数,\(q\) 和 \(p\) 是满足一定条件的正奇数。这种设计使得系统在靠近平衡点时,收敛速度更快。

下面还是以刚才的一阶系统为例,简单改改代码来体现终端滑模的效果。这里我们为了简化,只修改滑动面函数部分,实际应用中还需要更复杂的设计和推导。

import numpy as np import matplotlib.pyplot as plt # 定义系统参数 a = -1 b = 1 lambda_ = 1 q = 3 p = 1 # 终端滑模参数 # 时间设置 t = np.linspace(0, 10, 1000) dt = t[1] - t[0] # 初始化变量 x = np.zeros(len(t)) u = np.zeros(len(t)) r = np.sin(t) # 参考信号 # 终端滑模控制模拟 for i in range(len(t) - 1): s = (r[i + 1] - r[i]) / dt + lambda_ * np.sign(x[i]) * np.abs(x[i]) ** (q / p) if s > 0: u[i] = -1 else: u[i] = 1 x[i + 1] = x[i] + dt * (a * x[i] + b * u[i])

在这段代码里,我们修改了滑动面函数 \(s\) 的计算方式,引入了终端滑模的参数 \(\lambda\)、\(q\) 和 \(p\)。这样系统在运行过程中,状态 \(x\) 会以更快的速度朝着参考信号 \(r\) 收敛,尤其是在靠近平衡点的时候,效果更为明显。

滑模控制和终端滑模控制在实际应用中非常广泛,从机器人控制到飞行器姿态调整,它们都发挥着重要作用。通过巧妙的滑动面设计和控制律推导,能让复杂系统在各种干扰下依然稳定且高效地运行。希望大家通过这篇博文,对滑模和终端滑模有了更直观的认识,有兴趣的朋友可以深入研究,说不定能在自己的项目里挖掘出它们更大的潜力呢!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 11:15:03

20250124树的直径总结

树 需要说吗? 直径 直径为树上一条边权和最长的简单路径,以下是直径的一些常用性质: 树的直径不一定唯一树的直径的端点一定是度数为1的点若直径有数条,那么所有直径交汇于至少一点树上任一点距离其最远的点一定是直径的两个端点之…

作者头像 李华
网站建设 2026/5/7 12:18:43

聊聊微网动态经济调度中场景生成与削减那些事儿

[1]关键词:场景生成;场景削减;概率分布;随机优化 [2]参考文献:《一种在微网动态经济调度中考虑风电随机性的方法》 [3]主要内容:Matlab 采用正态分布和韦布尔分布描述风电,光伏和负荷概率分布&a…

作者头像 李华
网站建设 2026/5/9 14:04:40

华为OD机考双机位C卷 - 最佳植树距离(Java Python JS C/C++ GO )

最新华为上机考试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 华为OD机考双机位C卷 - 最佳植树距离 题目描述 按照环保公司要求,小明需要在沙化严重的地区进行植树防沙工作,初步目标是种植一条直线的树带。由于有些区域目前不适合种植树木,所以只能在一…

作者头像 李华
网站建设 2026/5/3 0:14:33

华为OD机考双机位C卷 - 荒岛求生 (Java Python JS C/C++ GO )

最新华为上机考试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 华为OD机考双机位C卷 - 荒岛求生 题目描述 一个荒岛上有若干人,岛上只有一条路通往岛屿两端的港口,大家需要逃往两端的港口才可逃生。 假定每个人移动的速度一样,且只可选择向左或向右逃生…

作者头像 李华
网站建设 2026/5/10 5:25:03

PLC在电网备用电源自动投入中的奇妙应用:双电源切换组态解析

No.495 PLC 在电网备用电源自动投入中应用双电源切换组态有 带解释的梯形图接线图原理图图纸,io分配,组态画面 在电网系统中,备用电源自动投入装置对于保障供电的连续性和稳定性至关重要。今天咱们就唠唠PLC(可编程逻辑控制器&am…

作者头像 李华
网站建设 2026/5/13 0:06:18

自动驾驶规划与控制算法:经验与理论的交融

规划及控制算法理论分析, 涵盖详细的自动驾驶规划及控制模块的算法理论(规划大约有18页,控制大约有17页)。 其中规划模块主要围绕Apollo6.0实现的EMplanner展开,控制算法详细叙述了常用控制算法包括PID、模糊控制、LQR…

作者头像 李华