当前位置: 首页 > article >正文

探索滑模控制的多元世界

滑模控制SMC滑模抖振削弱模糊滑模动态滑模高阶滑模反馈线性化滑模滑模控制器参数寻优。在控制领域滑模控制SMC就像一颗璀璨的明珠以其独特的魅力吸引着众多研究者与工程师。今天咱们就来深入探讨一番滑模控制及其相关的各种进阶玩法。滑模控制基础滑模控制的核心思想简单来说就是通过设计一个切换面让系统状态在这个切换面上滑动从而实现特定的控制目标。在这个过程中系统对参数变化和外部干扰具有很强的鲁棒性。以一个简单的一阶系统为例假设系统方程为$\dot{x}ax bu$其中$x$是系统状态$a$、$b$是系统参数$u$是控制输入。我们设计滑模面为$s cx \int e dt$$c$为常数$e$为误差。import numpy as np import matplotlib.pyplot as plt # 定义系统参数 a -1 b 1 c 1 # 离散化参数 dt 0.01 T 10 time np.arange(0, T, dt) # 初始化状态和控制输入 x np.zeros(len(time)) u np.zeros(len(time)) e np.zeros(len(time)) s np.zeros(len(time)) # 设定目标值 r 1 for i in range(1, len(time)): e[i] r - x[i - 1] s[i] c * x[i - 1] s[i - 1] e[i] * dt if s[i] 0: u[i] -1 else: u[i] 1 x[i] x[i - 1] (a * x[i - 1] b * u[i]) * dt plt.plot(time, x, labelSystem State) plt.plot(time, np.ones(len(time)) * r, labelReference) plt.xlabel(Time (s)) plt.ylabel(State) plt.legend() plt.show()这段代码模拟了简单一阶系统的滑模控制过程。通过不断判断滑模面$s$的值来决定控制输入$u$使得系统状态$x$朝着目标值$r$靠近。从代码运行结果图中可以直观看到系统状态逐渐稳定在目标值附近。滑模抖振削弱然而滑模控制有个小“毛病”就是抖振问题。抖振不仅影响系统性能还可能造成执行机构的磨损。为了削弱抖振研究者们想出了各种办法。一种常见的方式是边界层法在滑模面附近设置一个边界层$\Phi$当系统状态进入这个边界层时采用连续控制律而不是传统的开关控制律。# 边界层法削弱抖振 phi 0.1 u_damp np.zeros(len(time)) for i in range(1, len(time)): e[i] r - x[i - 1] s[i] c * x[i - 1] s[i - 1] e[i] * dt if abs(s[i]) phi: if s[i] 0: u_damp[i] -1 else: u_damp[i] 1 else: u_damp[i] -s[i] / phi x[i] x[i - 1] (a * x[i - 1] b * u_damp[i]) * dt plt.plot(time, x, labelSystem State with Damp) plt.plot(time, np.ones(len(time)) * r, labelReference) plt.xlabel(Time (s)) plt.ylabel(State) plt.legend() plt.show()通过上述代码可以看到在边界层内控制输入$u$不再是简单的开关切换而是与滑模面$s$成比例这样就有效削弱了抖振。对比之前没有抖振削弱的结果可以发现系统状态变化更加平滑。模糊滑模模糊滑模控制结合了模糊逻辑与滑模控制的优点。模糊逻辑能够处理不确定和不精确的信息它根据系统的状态和误差等信息通过模糊规则来调整滑模控制的参数。滑模控制SMC滑模抖振削弱模糊滑模动态滑模高阶滑模反馈线性化滑模滑模控制器参数寻优。比如我们可以定义模糊输入变量为误差$e$和误差变化率$\dot{e}$模糊输出变量为滑模控制的增益$k$。模糊规则可以像这样如果$e$是正大且$\dot{e}$是正大那么$k$是正大如果$e$是零且$\dot{e}$是零那么$k$是零。from skfuzzy import control as ctrl # 定义模糊变量 e_fuzzy ctrl.Antecedent(np.arange(-1, 1, 0.01), e) de_fuzzy ctrl.Antecedent(np.arange(-1, 1, 0.01), de) k_fuzzy ctrl.Consequent(np.arange(0, 5, 0.01), k) # 定义模糊隶属度函数 e_fuzzy[NB] ctrl.trimf(e_fuzzy.universe, [-1, -1, -0.5]) e_fuzzy[NS] ctrl.trimf(e_fuzzy.universe, [-1, -0.5, 0]) e_fuzzy[ZE] ctrl.trimf(e_fuzzy.universe, [-0.5, 0, 0.5]) e_fuzzy[PS] ctrl.trimf(e_fuzzy.universe, [0, 0.5, 1]) e_fuzzy[PB] ctrl.trimf(e_fuzzy.universe, [0.5, 1, 1]) de_fuzzy[NB] ctrl.trimf(de_fuzzy.universe, [-1, -1, -0.5]) de_fuzzy[NS] ctrl.trimf(de_fuzzy.universe, [-1, -0.5, 0]) de_fuzzy[ZE] ctrl.trimf(de_fuzzy.universe, [-0.5, 0, 0.5]) de_fuzzy[PS] ctrl.trimf(de_fuzzy.universe, [0, 0.5, 1]) de_fuzzy[PB] ctrl.trimf(de_fuzzy.universe, [0.5, 1, 1]) k_fuzzy[NB] ctrl.trimf(k_fuzzy.universe, [0, 0, 1]) k_fuzzy[NS] ctrl.trimf(k_fuzzy.universe, [0, 1, 2]) k_fuzzy[ZE] ctrl.trimf(k_fuzzy.universe, [1, 2, 3]) k_fuzzy[PS] ctrl.trimf(k_fuzzy.universe, [2, 3, 4]) k_fuzzy[PB] ctrl.trimf(k_fuzzy.universe, [3, 4, 5]) # 定义模糊规则 rule1 ctrl.Rule(e_fuzzy[NB] de_fuzzy[NB], k_fuzzy[PB]) rule2 ctrl.Rule(e_fuzzy[NB] de_fuzzy[NS], k_fuzzy[PS]) rule3 ctrl.Rule(e_fuzzy[NB] de_fuzzy[ZE], k_fuzzy[ZE]) rule4 ctrl.Rule(e_fuzzy[NB] de_fuzzy[PS], k_fuzzy[NS]) rule5 ctrl.Rule(e_fuzzy[NB] de_fuzzy[PB], k_fuzzy[NB]) # 更多规则... # 创建模糊控制系统 k_ctrl ctrl.ControlSystem([rule1, rule2, rule3, rule4, rule5]) k_simulation ctrl.ControlSystemSimulation(k_ctrl) # 在滑模控制中应用模糊调整的增益 x_fuzzy np.zeros(len(time)) u_fuzzy np.zeros(len(time)) for i in range(1, len(time)): e[i] r - x_fuzzy[i - 1] de (e[i] - e[i - 1]) / dt k_simulation.input[e] e[i] k_simulation.input[de] de k_simulation.compute() k k_simulation.output[k] s[i] c * x_fuzzy[i - 1] s[i - 1] e[i] * dt if s[i] 0: u_fuzzy[i] -k else: u_fuzzy[i] k x_fuzzy[i] x_fuzzy[i - 1] (a * x_fuzzy[i - 1] b * u_fuzzy[i]) * dt plt.plot(time, x_fuzzy, labelSystem State with Fuzzy SMC) plt.plot(time, np.ones(len(time)) * r, labelReference) plt.xlabel(Time (s)) plt.ylabel(State) plt.legend() plt.show()上述代码构建了一个简单的模糊滑模控制系统。通过模糊规则动态调整滑模控制的增益$k$使得系统在不同状态下能够自适应地调整控制策略进一步提升了系统性能。动态滑模、高阶滑模与反馈线性化滑模动态滑模在传统滑模基础上将滑模面设计为动态变化的这样可以更好地跟踪复杂的参考信号。高阶滑模则是通过对滑模面的高阶导数进行设计来进一步削弱抖振并提高系统精度。反馈线性化滑模是先对非线性系统进行反馈线性化处理将其转化为线性系统然后再应用滑模控制。以一个非线性系统$\ddot{x}f(x,\dot{x})g(x,\dot{x})u$为例通过合适的坐标变换和反馈控制可以将其转化为线性系统形式再设计滑模控制器。# 简单示意反馈线性化滑模 def f(x, dx): return x ** 2 dx def g(x, dx): return 1 # 反馈线性化处理 def feedback_linearization(x, dx, r, dr, ddr): u (ddr - f(x, dx) 2 * (dr - dx) (r - x)) / g(x, dx) return u x_feedback np.zeros(len(time)) dx_feedback np.zeros(len(time)) u_feedback np.zeros(len(time)) for i in range(1, len(time)): u_feedback[i] feedback_linearization(x_feedback[i - 1], dx_feedback[i - 1], r, 0, 0) dx_feedback[i] dx_feedback[i - 1] (f(x_feedback[i - 1], dx_feedback[i - 1]) g(x_feedback[i - 1], dx_feedback[i - 1]) * u_feedback[i]) * dt x_feedback[i] x_feedback[i - 1] dx_feedback[i] * dt plt.plot(time, x_feedback, labelSystem State with Feedback Linearization SMC) plt.plot(time, np.ones(len(time)) * r, labelReference) plt.xlabel(Time (s)) plt.ylabel(State) plt.legend() plt.show()这段代码简单演示了反馈线性化滑模的过程。先对非线性函数$f$和$g$进行定义然后通过反馈线性化计算控制输入$u$使系统状态跟踪目标值$r$。从结果图可以看到系统状态较好地趋近目标值。滑模控制器参数寻优滑模控制器的参数对系统性能影响很大。比如滑模面的系数、控制增益等参数需要进行寻优。常用的寻优方法有遗传算法、粒子群算法等。以粒子群算法为例我们可以将滑模控制器的参数作为粒子的位置以系统性能指标如误差积分、超调量等作为适应度函数。粒子在搜索空间中不断调整自己的位置寻找最优的参数组合。import numpy as np # 粒子群算法参数 n_particles 20 n_iterations 100 c1 1.5 c2 1.5 w 0.7 # 定义适应度函数简单以误差平方和为例 def fitness_function(params): c, k params x_opt np.zeros(len(time)) u_opt np.zeros(len(time)) s_opt np.zeros(len(time)) e_opt np.zeros(len(time)) for i in range(1, len(time)): e_opt[i] r - x_opt[i - 1] s_opt[i] c * x_opt[i - 1] s_opt[i - 1] e_opt[i] * dt if s_opt[i] 0: u_opt[i] -k else: u_opt[i] k x_opt[i] x_opt[i - 1] (a * x_opt[i - 1] b * u_opt[i]) * dt return np.sum((r - x_opt) ** 2) # 初始化粒子位置和速度 particles np.random.rand(n_particles, 2) velocities np.random.rand(n_particles, 2) # 记录个体最优和全局最优 pbest particles.copy() pbest_fitness np.array([fitness_function(p) for p in particles]) gbest_index np.argmin(pbest_fitness) gbest pbest[gbest_index] gbest_fitness pbest_fitness[gbest_index] for _ in range(n_iterations): r1 np.random.rand(n_particles, 2) r2 np.random.rand(n_particles, 2) velocities w * velocities c1 * r1 * (pbest - particles) c2 * r2 * (gbest - particles) particles particles velocities fitness_values np.array([fitness_function(p) for p in particles]) improved_indices fitness_values pbest_fitness pbest[improved_indices] particles[improved_indices] pbest_fitness[improved_indices] fitness_values[improved_indices] current_best_index np.argmin(pbest_fitness) if pbest_fitness[current_best_index] gbest_fitness: gbest pbest[current_best_index] gbest_fitness pbest_fitness[current_best_index] print(最优参数 c, k:, gbest)上述代码使用粒子群算法对滑模控制器的参数$c$和$k$进行寻优。通过不断迭代粒子群逐渐找到使适应度函数最小的参数组合也就是能让系统性能最优的滑模控制器参数。滑模控制及其各种衍生方法为控制领域提供了丰富的解决方案每一种方法都有其独特的优势和适用场景在实际应用中可以根据具体需求灵活选择与组合。希望这篇博文能让大家对滑模控制的多元世界有更深入的了解。

相关文章:

探索滑模控制的多元世界

滑模控制,SMC,滑模抖振削弱,模糊滑模,动态滑模,高阶滑模,反馈线性化滑模,滑模控制器参数寻优。在控制领域,滑模控制(SMC)就像一颗璀璨的明珠,以其…...

关于网络故障排查

ping和traceroute命令都是常用的工具ping命令主要用于检测网络联通性。通过发送ICMP(Internet Control Message Protocol)回显请求(echo request)报文并等待目标主机回应,可以确定目标主机是否在线以及网络传输的延迟和…...

2026 全球 AI 大模型实力榜:国产崛起与国际争锋的全新格局

2026 年,全球 AI 大模型行业迈入技术深水区与产业落地期双轨并行的新阶段,国际头部模型在超大参数、全模态能力上持续突破,国产模型则凭借本土化适配、垂直领域深耕、算力自主化实现弯道超车,不仅在核心性能上与国际顶尖模型差距持…...

WrenAI 深度解析:算法视角:wren-ai-service 如何利用 RAG 与 Metadata 提升 SQL 准确率?

在 Text-to-SQL 领域,尽管 GPT-4 等大语言模型(LLM)已经展现了惊人的代码生成能力,但在面对复杂的企业级数据库时,直接生成 SQL 的准确率往往不尽如人意。核心难点不在于 SQL 语法,而在于**“语义鸿沟”**&…...

2.斐波那契数列的题解

##题目的分析首先他是关于一个数列,第一项为1,第二项为1,从第三项起为前两项的和1.输入#测试数据的组数n#输入n组测试数据(每组数据代表数列的第几项)2.输出#对应第n项的数字(这个数字是前两项数字的和&…...

基于NI Linux RT和Veristand的实时仿真探索

基于Ni linux RT和veristand的实时仿真在工程与科研领域,实时仿真扮演着至关重要的角色,它能帮助我们在实际系统搭建之前,对各种设计进行验证和优化。今天咱们就来聊聊基于NI Linux RT和Veristand的实时仿真。 NI Linux RT简介 NI Linux RT是…...

字节面试官怒怼:RAG只会检索?大模型意图识别实战(非常详细),从入门到精通,收藏这一篇就够了!

直到上周一个学员面试的经历让我觉得必须补上这篇了:Query 理解与路由。 面试官问他:“用户在你们系统里输入’帮我算一下 A 款保险的理赔金额’,你的系统怎么处理的?” 他说:“先做 Embedding,然后去向量…...

【基于GasTurb的不同构型发动机性能对比】 GasTurb软件 1、涡桨、涡扇发动机等构型

【基于GasTurb的不同构型发动机性能对比】 GasTurb软件 1、涡桨、涡扇发动机等构型 2、在一样的推力需求下对比NOx排放差异 3、在不同的delta_T和高度下对比性能差异在航空发动机设计领域,GasTurb软件就像机械工程师的瑞士军刀。今天咱们拿它来折腾点有意思的——把…...

玩转T-Mats库:航空发动机气路故障仿真那些事儿

T-Mats库 涡扇发动机气路故障 数据 仿真模型】 1、包含部件流量、效率及压比故障在内的13类故障植入,故障程序和组合可自定义;航空发动机,典型气路故障仿真; 2、基于软阈值去噪处理后的信号序列提取了真实的运行扰动; 3、输出数据符合CMAPASS的排列要求。…...

电导增量法INC仿真模型,作为目前实际光伏发电系统中最常用的mppt算法,可以用于学习研究

电导增量法INC仿真模型,作为目前实际光伏发电系统中最常用的mppt算法,可以用于学习研究,才用了输出参考电压的方式来进行pwm调制。电导增量法的仿真模型在光伏圈子里都快被玩出花了,但说实话这算法确实稳得一批。今天咱们直接撸代…...

基于企鹅优化算法的机器人轨迹规划(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

手把手玩转变压器辐射传热仿真】今天带大家用COMSOL做个会“发热发光“的变压器模型,全程保姆级操作演示,连参数设置时容易手滑的地方都标出来了

有限元仿真模型二:视频教程仿真模型-基于comsol有限元的变压器辐射传热数值分析 1、分析变压器内外辐射传热机理,利用传热方程建立辐射传热数值计算模型 2、提供详细的讲解指导,带你实现从零到有,超级适合新手小白学习&#xff01…...

2026年春日活动海报复盘:如何快速敲定桃树主题视觉方案

作为一名社群运营,我经常需要为各种小型活动快速制作宣传物料。上周三,我接到了一个紧急任务:为周末的“社区踏春赏桃”活动设计一张宣传海报,要求周四上午就要发到业主群和朋友圈里预热。时间紧,任务急,而…...

Java 编程中的运算符探寻

Java 编程中的运算符探寻 🚀 Java 运算符是表达式计算的核心,掌握它们能让你写出高效、清晰的代码,避免优先级陷阱。本文从基础到进阶,带你全面探寻 Java 运算符(基于 Java 21/23 最新特性,2026 年仍适用&…...

带你了解Java中的Mono接口

带你了解 Java 中的 Mono 接口 🚀 在 Java 响应式编程(Reactive Programming)中,Mono 是 Project Reactor 库的核心类型之一。它不是 Java 标准库(JDK)中的接口,而是 Reactor Core 提供的响应式…...

西门子s71200 总线控制V90伺服程序模板 ,包含plc程序,西门子触摸屏程序

西门子s71200 总线控制V90伺服程序模板 ,包含plc程序,西门子触摸屏程序,eplan电气图纸一份 有两种控制模式 1.基于111报文自己编写的PN通讯控制V90伺服程序。 2.基于工艺对象轴程序PROFIdrive配置的PN通讯控制V90伺服程序 程序可以直接复制使…...

单北斗GNSS形变监测是什么?主要有如何应用于大坝监测?

单北斗GNSS形变监测是一种利用卫星技术进行位移监测的高精度系统,广泛应用于大坝、桥梁等基础设施的安全监测。该系统通过接收GPS信号,能够实时获取目标点的三维位置变化,提供可靠的数据支持。在应用过程中,用户可以根据具体监测需…...

东华Oj101-103

101. 找出质数 作者: SunCiHai 时间限制: 10s 章节: 字符串 问题描述 明明学习数学已经有一段时间了。一次老师在课上讲了什么叫质数。质数就是大于等于2且只能被1和其本身整除的整数。明明觉得这很简单,以为这很容易掌握,于是就不多做练习。明的爸…...

2. LangGraph 安装指南

Langgraph 系统教程(基于 1.1.X 版本) LangGraph 综述 LangGraph 安装指南 LangGraph 快速入门 用 LangGraph 的思维构建智能体 LangGraph 工作流与智能体详解...

学Simulink——基于Simulink的通信延迟下多机轨迹一致性分析

目录 手把手教你学Simulink ——基于Simulink的通信延迟下多机轨迹一致性分析 一、问题背景 二、多智能体系统建模 1. 单智能体动力学(简化为一阶积分器) 2. 分布式一致性协议(无延迟) 3. 引入通信延迟 三、稳定性分析理论基础 四、Simulink 建模仿真步骤 第一步:…...

Qwen3-ASR-1.7B语音转写教程:音频切片策略+长语音分段识别最佳实践

Qwen3-ASR-1.7B语音转写教程:音频切片策略长语音分段识别最佳实践 你是不是也遇到过这种情况:一段长达一小时的会议录音,上传到语音识别工具后,要么识别速度慢得让人抓狂,要么中间卡住直接报错,最后只能得…...

3D Face HRN保姆级教程:如何用Pillow预处理图像提升人脸检测成功率

3D Face HRN保姆级教程:如何用Pillow预处理图像提升人脸检测成功率 1. 为什么图像预处理如此重要 当你使用3D Face HRN人脸重建模型时,可能会遇到这样的问题:上传了一张看起来不错的人脸照片,系统却提示"未检测到人脸"…...

YOLO12模型安全攻防:对抗样本鲁棒性测试与防御加固部署

YOLO12模型安全攻防:对抗样本鲁棒性测试与防御加固部署 1. 为什么需要关注YOLO12的安全问题 在实际应用中,目标检测模型面临着各种安全威胁。想象一下,如果自动驾驶系统中的YOLO12模型被恶意攻击,错误识别交通标志或行人&#x…...

Nunchaku FLUX.1 CustomV3体验报告:单卡RTX4090下的生成速度与画质实测

Nunchaku FLUX.1 CustomV3体验报告:单卡RTX4090下的生成速度与画质实测 最近在折腾各种文生图模型,总在速度和画质之间纠结。要么生成一张高清图要等好几分钟,要么速度上来了,但细节和光影又差点意思。直到我试用了CSDN星图镜像广…...

基于STM32的远程幅频特性测试系统设计

1. 项目概述远程幅频特性测试装置是面向高频模拟电路性能评估的专用测量系统,其核心目标是在1MHz–40MHz频段内,对被测放大器的增益-频率响应关系进行高精度、可复现、可远程呈现的量化表征。本项目严格遵循2017年全国大学生电子设计竞赛H题技术规范&…...

雪女-斗罗大陆-造相Z-Turbo与数据库课程设计结合:构建AI作品管理系统

雪女-斗罗大陆-造相Z-Turbo与数据库课程设计结合:构建AI作品管理系统 1. 引言:当AI创作遇上数据库设计 如果你是计算机专业的学生,是不是觉得数据库课程设计有点枯燥?无非就是设计几个表,写写增删改查的SQL语句&…...

Qwen3.5-35B-AWQ-4bit入门实战:30分钟搭建个人图文AI助手(含截图操作指引)

Qwen3.5-35B-AWQ-4bit入门实战:30分钟搭建个人图文AI助手(含截图操作指引) 1. 快速了解Qwen3.5-35B-AWQ-4bit Qwen3.5-35B-AWQ-4bit是一款专为视觉多模态理解设计的量化模型,特别适合需要图片分析和图文对话的应用场景。这个模型…...

造相-Z-Image-Turbo亚洲美女LoRA效果实测:LoRA启用前后对比惊艳

造相-Z-Image-Turbo亚洲美女LoRA效果实测:LoRA启用前后对比惊艳 1. 引言:当AI绘画遇上亚洲美学 如果你玩过AI绘画,肯定有过这样的体验:想生成一张符合亚洲审美的女性肖像,结果出来的要么是欧美面孔,要么是…...

Qwen3.5-35B-A3B-AWQ-4bit图文理解性能报告:双卡24GB下QPS达3.2,P99延迟<8.5s

Qwen3.5-35B-A3B-AWQ-4bit图文理解性能报告&#xff1a;双卡24GB下QPS达3.2&#xff0c;P99延迟<8.5s 1. 模型概述 Qwen3.5-35B-A3B-AWQ-4bit是一款面向视觉多模态理解的量化模型&#xff0c;专为图片分析、图文问答和视觉描述等场景优化。该模型在双卡24GB显存环境下表现…...

AudioSeal Pixel Studio入门必看:PyTorch CUDA Graphs在检测推理中的加速实践

AudioSeal Pixel Studio入门必看&#xff1a;PyTorch CUDA Graphs在检测推理中的加速实践 如果你正在使用AudioSeal Pixel Studio进行音频水印检测&#xff0c;可能会发现处理长音频文件时速度不够理想。今天&#xff0c;我要分享一个实用的性能优化技巧——利用PyTorch的CUDA…...