自动控制:滑模控制(Sliding Mode Control, SMC)

自动控制:滑模控制(Sliding Mode Control, SMC)

滑模控制(Sliding Mode Control, SMC)是一种在处理非线性系统时非常有效的控制技术。它通过驱动系统状态达到并保持在特定的滑模面附近,来实现控制目标。本文将介绍滑模控制的基本概念、系统描述与控制目标、构造滑模面、构建滑模趋近律,并提供一个简单的Python代码示例。

系统描述与控制目标

在自动控制中,滑模控制的目标是将系统状态驱动到预先设计的滑模面,并在滑模面上保持运动。滑模控制能够处理非线性、不确定性和外部扰动,使其在复杂控制环境中表现出色。

设定一个典型的非线性系统描述如下:

x ˙ ( t ) = f ( x ( t ) , u ( t ) ) + d ( t ) \dot{x}(t) = f(x(t), u(t)) + d(t) x˙(t)=f(x(t),u(t))+d(t)

其中:

  • x ( t ) x(t) x(t) 是系统状态向量
  • u ( t ) u(t) u(t) 是控制输入
    - f ( x ( t ) , u ( t ) ) f(x(t), u(t)) f(x(t),u(t)) 是已知的非线性函数
  • d ( t ) d(t) d(t)是外部扰动

控制目标是设计控制输入 u ( t ) u(t) u(t),使系统状态 x ( t ) x(t) x(t)能够跟踪期望的轨迹 x d ( t ) x_d(t) xd(t)

基本思想

滑模控制的基本思想是设计一个滑模面,使得一旦系统状态达到该滑模面,它们将保持在滑模面附近运动。滑模控制分为两个阶段:趋近阶段和滑动阶段。

  1. 趋近阶段:系统状态从任意初始状态趋近滑模面。
  2. 滑动阶段:一旦系统状态达到滑模面,它们将在滑模面上运动,对外部扰动和不确定性不敏感。

构造滑模面

滑模面的设计是滑模控制的关键步骤。滑模面 S ( x ) S(x) S(x)通常被设计为状态变量的线性组合:

S ( x ) = C x S(x) = Cx S(x)=Cx

其中 ( C ) 是设计矩阵。对于跟踪控制问题,可以定义滑模面为误差状态的函数:

S ( x ) = e ( t ) = x ( t ) − x d ( t ) S(x) = e(t) = x(t) - x_d(t) S(x)=e(t)=x(t)xd(t)

目标是使得 ( e(t) \rightarrow 0 ),即系统状态 ( x(t) ) 跟踪期望状态 ( x_d(t) )。

构建滑模趋近律

滑模趋近律的目的是设计控制输入 ( u(t) ),使得系统状态趋近滑模面并保持在滑模面上。常用的趋近律有:

  1. 恒定速率趋近律

S ˙ ( x ) = − k sign ( S ( x ) ) \dot{S}(x) = -k \text{sign}(S(x)) S˙(x)=ksign(S(x))

  1. 指数趋近律

S ˙ ( x ) = − λ S ( x ) − k sign ( S ( x ) ) \dot{S}(x) = -\lambda S(x) - k \text{sign}(S(x)) S˙(x)=λS(x)ksign(S(x))

其中 ( k ) 和 ( \lambda ) 是正的控制参数,( \text{sign}(S(x)) ) 是符号函数。

Python代码示例

下面是一个简单的滑模控制示例,假设系统为一个二阶非线性系统。

import numpy as np
import matplotlib.pyplot as plt# 定义符号函数
def sign(x):return np.where(x >= 0, 1, -1)# 定义滑模控制器
def smc_control(x, x_dot, x_d, x_dot_d, x_ddot_d, k, lambda_):# 误差e = x - x_de_dot = x_dot - x_dot_d# 滑模面s = e_dot + lambda_ * e# 控制输入u = x_ddot_d - lambda_ * e_dot - k * sign(s)return u# 初始化参数
k = 1.0
lambda_ = 1.0
dt = 0.01
t = np.arange(0, 10, dt)
n = len(t)# 初始化状态变量
x = np.zeros(n)
x_dot = np.zeros(n)
x_d = np.sin(t)
x_dot_d = np.cos(t)
x_ddot_d = -np.sin(t)# 模拟系统
for i in range(1, n):u = smc_control(x[i-1], x_dot[i-1], x_d[i-1], x_dot_d[i-1], x_ddot_d[i-1], k, lambda_)x_dot[i] = x_dot[i-1] + u * dtx[i] = x[i-1] + x_dot[i] * dt# 绘制结果
plt.figure(figsize=(10, 4))
plt.plot(t, x_d, label='Desired position')
plt.plot(t, x, label='Actual position')
plt.xlabel('Time [s]')
plt.ylabel('Position')
plt.legend()
plt.title('Sliding Mode Control')
plt.grid(True)
plt.show()

代码解释

该代码实现了一个简单的滑模控制器,用于控制一个二阶非线性系统。代码分为以下几个部分:

1. 符号函数定义
def sign(x):return np.where(x >= 0, 1, -1)

该函数返回输入 x x x的符号。对于正数,返回 1;对于负数,返回 -1。符号函数在滑模控制中用于趋近律的设计。

2. 滑模控制器定义
def smc_control(x, x_dot, x_d, x_dot_d, x_ddot_d, k, lambda_):# 误差e = x - x_de_dot = x_dot - x_dot_d# 滑模面s = e_dot + lambda_ * e# 控制输入u = x_ddot_d - lambda_ * e_dot - k * sign(s)return u

这个函数实现了滑模控制器的逻辑:

  • 计算误差 e = x − x d e = x - x_d e=xxd和误差导数 e _ d o t = x _ d o t − x _ d o t d e\_dot = x\_dot - x\_dot_d e_dot=x_dotx_dotd
  • 计算滑模面 s = e _ d o t + l a m b d a _ ∗ e s = e\_dot + lambda\_ * e s=e_dot+lambda_e
  • 根据滑模趋近律计算控制输入 u u u
3. 参数初始化
k = 1.0
lambda_ = 1.0
dt = 0.01
t = np.arange(0, 10, dt)
n = len(t)

初始化控制参数 k k k λ \lambda λ,仿真时间步长 d t dt dt,仿真时间数组 t t t 及其长度 n n n

4. 状态变量初始化
x = np.zeros(n)
x_dot = np.zeros(n)
x_d = np.sin(t)
x_dot_d = np.cos(t)
x_ddot_d = -np.sin(t)

初始化状态变量 x x x、状态导数 x _ d o t x\_dot x_dot和期望轨迹(期望状态 x d x_d xd、期望状态导数 x _ d o t d x\_dot_d x_dotd、期望状态二阶导数 x _ d d o t d x\_ddot_d x_ddotd

5. 系统仿真
for i in range(1, n):u = smc_control(x[i-1], x_dot[i-1], x_d[i-1], x_dot_d[i-1], x_ddot_d[i-1], k, lambda_)x_dot[i] = x_dot[i-1] + u * dtx[i] = x[i-1] + x_dot[i] * dt

在每个时间步长 d t dt dt 内:

  • 调用 smc_control 计算控制输入 u u u
  • 更新状态导数 x _ d o t x\_dot x_dot 和状态 x x x
6. 绘制结果
plt.figure(figsize=(10, 4))
plt.plot(t, x_d, label='Desired position')
plt.plot(t, x, label='Actual position')
plt.xlabel('Time [s]')
plt.ylabel('Position')
plt.legend()
plt.title('Sliding Mode Control')
plt.grid(True)
plt.show()

绘制系统状态 x x x和期望状态 x d x_d xd随时间的变化图。图中展示了实际系统状态如何跟踪期望轨迹。
在这里插入图片描述

结论

滑模控制是一种有效的非线性控制方法,特别适用于处理模型不确定性和外部扰动。通过设计合适的滑模面和趋近律,滑模控制可以使系统状态快速趋近并保持在期望轨迹上。本文介绍了滑模控制的基本概念、系统描述与控制目标、滑模面构造以及滑模趋近律,并提供了一个简单的Python代码示例,展示了滑模控制在二阶系统中的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1451021.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

潞晨训推一体机,画出大模型到企业的一条龙路线图

最近跟一位企业的CIO交流,对方关于大模型的认知让我惊呆了,他说,“听说做私域大模型要两千万的软件投入和两千万的算力投入,我们公司没有这个预算”。 于是我问道:“那如果按照你们公司的数据基础和业务场景&#xff0…

功能测试 之 单模块测试----轮播图、登录、注册

单功能怎么测? 需求分析 拆解测试点 编写用例 1.轮播图 (1)需求分析 位置:后台--页面--广告管理---广告列表(搜索index页面增加广告位2) 操作完成后需要点击admin---更新缓存,前台页面刷新生效 (2)拆解…

感受光子芯片中试线,如何点亮未来计算与通信的革命之路(2024青岛智能装备与通信技术展)

光子芯片中试线:点亮未来计算与通信的革命之路 在新一代信息技术的浪潮中,光子芯片以其低能耗、高速度的特点备受瞩目。首条光子芯片中试线的建立,标志着我国在光电子领域的重大突破,同时也为即将到来的量子计算时代奠定了坚实基…

Fantasy Icons Megapack(梦幻盔甲宝石图标魔法道具图标集)

所有图标都具备高质量,并以专业水平实施。任何幻想风格游戏的上佳选择。 - 可更新的超级资源包; - 每个图标的大小均为 256x256 像素 (PNG); - 总计 2672 个独一无二的图标; - 所有图标均具有透明背景。 超级资源包内置&#xff1…

Linux常⽤服务器构建-samba

目录 1. 介绍 2. 安装 3. 配置 3.1 创建存放共享⽂件的路径 3.2 创建samba账户 4 重启samba 5. 访问共享⽂件 5.1 mac下访问⽅式 5.2 windows下访问⽅式 1. 介绍 Samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的⼀个免费软件,能够完成在 windows 、 mac 操作系统…

卡塔尔.巴林:海外媒体投放-宣发.发稿效果显著提高

引言 卡塔尔和巴林两国积极采取措施,通过海外媒体投放和宣发,将本国的商业新闻和相关信息传达给更广泛的受众。在这一过程中,卡塔尔新闻网、巴林商业新闻和摩纳哥新闻网等媒体起到了关键作用。通过投放新闻稿,这些国际化的媒体平…

力扣148. 排序链表

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5] 示例 3&…

人工气候老化曝露暴晒风电叶片用涂层涂料的老化耐候性能研究

关键词:太阳光模拟器、紫外光模拟器、高低温试验箱、太阳辐射光照测试系统 通过研究风电叶片用​ 氟碳涂料老化性能评价方法,对制定适合我国国情的风电叶片涂料检测方法和技术评价指标具有重要意义。 1 实验部分 1.1 试验材料 收集国内外三家知名风电…

谷粒商城实战(036 k8s集群学习2-集群的安装)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第343p-第p345的内容 k8s 集群安装 kubectl --》命令行操作 要进入服务器 而且对一些不懂代码的产品经理和运维人员不太友好 所以我们使用可视化…

(三十九)Vue之集中式的状态管理机制Vuex

目录 概念vuex的核心概念State(状态)Getters(获取器)Mutations(突变)Actions(动作) 搭建vuex环境基本使用getters的使用 上一篇:(三十八)Vue之插槽…

记Windows环境下JDK安装配置

写在文章开头 这是笔者非常早期接触Java时写的文章,为方便每次系统重装时能够快速完成JDK解压版安装配置遂用此文记录了一下整个过程。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 &#x…

docker拉取镜像失败超时的解决方法,docker配置国内镜像源

更换国内源 创建或修改 /etc/docker/daemon.json 文件 安装docker后一般只有 /etc/docker 这个目录 下面并没有 daemon.json 文件 我们直接创建 : vim /etc/docker/daemon.json {"registry-mirrors" : ["https://registry.docker-cn.com"…

基于springboot实现入校申报审批系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现入校申报审批系统演示 摘要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装入校申报审批系统软…

如何通过“小猪APP分发”轻松实现应用分发

你是否也在为应用分发发愁? 还记得那些日子吗?你花费了大量的时间和精力开发了一款出色的应用,但却在分发和推广环节遇到了瓶颈。是的,无论你的应用多么优秀,如果不能顺利分发给用户,那一切都是徒劳的。别…

Unity Protobuf+RPC+UniTask

远程过程调用(RPC)协议详解 什么是RPC协议RPC的基本原理RPC的关键组件RPC的优缺点Protobuf函数绑定CallEncodeRecvDecodeSocket.Send和Recv项目地址 什么是RPC协议 远程过程调用(Remote Procedure Call,简称RPC)是一种…

自动化测试 —— ReadyAPI赋能API性能测试,助力应对高峰期流量挑战!

在当今数字驱动的市场中,API的完美性能对于企业在高峰期提升营业收入至关重要。随着消费者越来越依赖于在线购物和移动App购物,任何与API相关的故障或减速都可能导致顾客体验变差和交易流失,从而造成销售损失。因此,企业需要优先考…

EasyExcel文件导出,出现有文件但没有数据的问题

一开始由于JDK版本过高,我用的17,一直excel没有数据,表头也没有,后来摸索了好久,找了资料也没有,后来改了代码后报了一个错误(com.alibaba.excel.exception.ExcelGenerateException: java.lang.…

计算机网络 —— 应用层(应用层概述及服务方式)

计算机网络 —— 应用层(应用层概述及服务方式) 应用层服务方式C/S(客户端-服务器(C/S)模型)基本概念特点B/S(Browser/Server)基本概念特点应用场景 p2p (对等网络&#…

定时清理rocketmq日志--crontab

1、背景 之前在部署rocketmq的时候未修改日志路径,导致在用户目录下有日志数据写入。因不方便修改或空间足够可正常写入,但日志量过大需清理,现添加定时任务执行。 2、规划: 目前测试阶段,所以时间是可变的&#xf…

数据预处理之基于聚类的TOD异常值检测#matlab

1.基于聚类的异常值检测方法 物以类聚——相似的对象聚合在一起,基于聚类的异常点检测方法有两个共同特点: (1)先采用特殊的聚类算法处理输入数据而得到聚类,再在聚类的基础上来检测异常。 (2)只需要扫描数据集若干次,效率较高…