news 2026/4/15 18:01:30

滑模与终端滑模(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/4/15 10:45:29

量子算法测试入门:验证薛定谔的代码稳定性

量子测试的独特挑战 量子计算正重塑软件测试领域,但量子算法测试与传统二进制软件测试存在本质差异。量子比特(Qubit)的状态叠加性(同时处于|0>和|1>态)、纠缠特性(非局域关联)和不可克隆…

作者头像 李华
网站建设 2026/4/15 17:50:00

AI模型监控与告警:AI应用架构师的技术前沿研究

AI模型监控与告警:AI应用架构师的技术前沿研究 凌晨3点,某电商AI架构师李阳的手机突然弹出红色告警: “推荐系统转化率较昨日暴跌38%,模型预测准确率下降22%——触发一级故障!” 他火速登录监控平台,发现…

作者头像 李华
网站建设 2026/3/31 8:18:35

向量RAG已凉?推理式RAG王者归来!PageIndex让AI像专家一样读文档,准确率98.7%,小白程序员也能三秒上手!

当传统的RAG还在依赖向量相似度搜索时,一种全新的基于推理的检索方式正在悄然兴起。 一、破局:传统RAG的困境与PageIndex的诞生 在处理长文档,特别是专业领域的复杂文档时,传统的基于向量数据库的RAG(检索增强生成&am…

作者头像 李华
网站建设 2026/4/15 3:26:53

Buck - Boost变换器的非线性PID控制探索

buck-boost变换器的非线性PID控制,主电路也可以换成别的电路。 在经典PID中引入了两个TD非线性跟踪微分器,构成了非线性PID控制器。 当TD的输入为方波时,TD的输出,跟踪方波信号也没有超调,仿真波形如下所示。 输入电压…

作者头像 李华