自动控制:滑模控制(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_d
    e_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 * dt
    x[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_d
    e_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 * dt
    x[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.mfbz.cn/a/707469.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

四川赤橙宏海商务信息咨询有限公司靠谱吗?

在数字化浪潮席卷而来的今天,电商行业正经历着前所未有的变革。四川赤橙宏海商务信息咨询有限公司,凭借其深厚的行业经验和敏锐的市场洞察力,专注于抖音电商服务领域,致力于为广大商家提供全方位、高效益的电商解决方案。 赤橙宏…

OpenGL3.3_C++_Windows(3)

GLSL Shader基础 Shader(把输入转化为输出,运行在GPU上):首先要声明版本,有各自的入口点main()顶点数据上限:16个包含4分量:16 * 4 64个分量向量:容器vec。使用.x、.y、.z和.w&am…

算法day27

第一题 515. 在每个树行中找最大值 首先是遍历每层的节点,将每一层最大值的节点的值保留下来,最后将所有层的最大值的表返回;具体的遍历每层节点的过程如上一篇故事; 综上所述,代码如下: /*** Definition …

HTML静态网页成品作业(HTML+CSS)—— 零食商城网页(1个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…

同三维T80005EH4 H.265 4路高清HDMI编码器

同三维T80005EH4 H.265 4路高清HDMI编码器 4路HDMI输入2路3.5音频输入,第1路和第2路HDMI可支持4K30,其它支持高清1080P60 产品简介: 同三维T80005EH4 4路HDMI高清H.265编码器采用最新高效H.265高清数字视频压缩技术,具备稳定…

SQL Server 2022 RTM 最新累积更新:Cumulative Update #13 for SQL Server 2022 RTM

SQL Server 2022 RTM (最新累积更新) - 基于 Azure 的持续性能和安全创新 Cumulative Update #13 for SQL Server 2022 RTM 请访问原文链接:https://sysin.org/blog/sql-server-2022/,查看最新版。原创作品,转载请保留出处。 作者主页&…

C++笔记:模板

模板 为什么要学习模板编程 在学习模板之前,一定要有算法及数据结构的基础,以及重载,封装,多态,继承的基础知识,不然会出现看不懂,或者学会了没办法使用。 为什么C会有模板,来看下面…

听说前端都是切图仔,所以学了PS

PS 从零开始-基础篇 什么话都不想说了,前端以死后端已死,毁灭即是新生,我要开始追梦了, 从小就希望,制作一款自己的游戏🎮去学了编程,了解了:Java、C#、前端... 不小心入了web领域…

idea 配置文件中文乱码

再进行springboot项目开发时发现新建的配置文件中文注释乱码,如下: 处理办法: 1、打开idea,在 File 中找到 Settings,如下图 2、搜索 encodings 找到 File Encodings,如下图 3、将上图中圈上的地方全部改为 UTF-8 编码最后点击 Apply 应用即…

10 SpringBoot 静态资源访问

我们在开发Web项目的时候,往往会有很多静态资源,如html、图片、css等。那如何向前端返回静态资源呢? 以前做过web开发的同学应该知道,我们以前创建的web工程下面会有一个webapp的目录,我们只要把静态资源放在该目录下…

后端跨域问题的处理

问题描述 在做前后端分离的项目时,很有可能会遇到这样一种情况: 就是在游览器中请求后端的接口,出现了 CORS error 错误 报错信息如下: Access to XMLHttpRequest at http://localhost:8860/user/auth/login from origin http:…

MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)

目录 前言1. 授予权限2. 撤销权限3. 查询权限4. Demo 前言 公司内部的数据库权限一般针对不同人员有不同的权限分配,而不都统一给一个root权限 1. 授予权限 授予用户权限的基本命令是GRANT 可以授予的权限种类很多,涵盖从数据库和表级别到列和存储过…

郑州申请大气污染防治乙级资质,这些材料必不可少

在郑州申请大气污染防治乙级资质时,以下材料是必不可少的: 一、企业基础资料: 企业法人营业执照副本:需清晰,且在有效期内[1][2]。企业章程:提交企业章程的扫描件或复印件,以展示企业的组织结构…

183.二叉树:二叉搜索树中的众数(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

农资投入品系统架构:数字化农业的技术支撑与创新

在当今数字化时代,农业领域也在迅速迈向数字化和智能化的新阶段。农资投入品系统作为农业生产的重要支撑,其系统架构的设计与创新对于提高农业生产效率、保障粮食安全具有重要意义。本文将探讨农资投入品系统架构的设计原则、核心模块以及未来发展趋势。…

实例化游戏物体的实例(生成游戏物体)

一、实例1:实例化 1、准备工作:制备预制体,命名。如Circle 2、Create Empty,名字自取。如:CirclePrefab 3、给CirclePrefab添加Test.cs public GameObject CirclePrefab; // 预制体变量,用于存储Circle预…

湖南安全技术职业学院校长邓德艾一行到我中心考察交流

6月4日上午,湖南安全技术职业学院校长邓德艾一行莅临方班网安人才教育服务中心交流研讨,一方面是访企拓岗,另一方面是针对产教融合、政校企合作人才培养展开深入研讨。为将本次研讨进行得更深入全面,方班网安人才教育服务中心邀请…

C++17并行算法与HIPSTDPAR

C17 parallel algorithms and HIPSTDPAR — ROCm Blogs (amd.com) C17标准在原有的C标准库中引入了并行算法的概念。像std::transform这样的并行版本算法保持了与常规串行版本相同的签名,只是增加了一个额外的参数来指定使用的执行策略。这种灵活性使得已经使用C标准…

AI数字人的开源解决方案

目前,国内外已经涌现出一些优秀的数字人开源解决方案,这些解决方案为开发者提供了构建数字人应用的工具和基础设施。以下是一些比较知名的数字人开源解决方案。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1…

Sklearn中逻辑回归建模

分类模型的评估 回归模型的评估方法,主要有均方误差MSE,R方得分等指标,在分类模型中,我们主要应用的是准确率这个评估指标,除此之外,常用的二分类模型的模型评估指标还有召回率(Recall&#xff…