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

news2024/11/21 0:29:24

自动控制:滑模控制(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.coloradmin.cn/o/1821252.html

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

相关文章

MES系统助力制造业数字化转型

一、MES系统的定义和功能 MES(Manufacturing Execution System)即制造执行系统,是一种可层级化管理生产活动的软件系统。它可以实现对生产过程全面的监控、调度、控制和优化,提高生产的效率、质量和安全性。MES系统具有以下几个主…

工作手机安全管理平台建设方案

第一章 项目背景 移动互联网的时代,各个行业在在推进移动办公和掌上办公,通过智能手机、平板电脑等进行线上办公,这样能提高了企业人员的办公效率,从而为客户提供更及时的服务。 在移动办公提高了工作人员办公效率的同时&#xf…

这三款使用的视频、图片设计工具,提供工作效率

Videograp Videograp是一款专注于视频生成的工具,特别适合需要快速剪辑和编辑视频的用户。Videograp具备以下特点: 影音比例转换:Videograp支持调整视频的分辨率和比例,使其更适合不同的播放环境和设备。 AI快剪:该工…

牛客链表刷题(一)

目录 题目一:反转链表 代码: 题目二:链表内指定区间反转 代码: 题目一:反转链表 代码: import java.util.*;/** public class ListNode {* int val;* ListNode next null;* public ListNode(int …

Java多线程编程与并发处理

引言 在现代编程中,多线程和并发处理是提高程序运行效率和资源利用率的重要方法。Java提供了丰富的多线程编程支持,包括线程的创建与生命周期管理、线程同步与锁机制、并发库和高级并发工具等。本文将详细介绍这些内容,并通过表格进行总结和…

深度学习常见概念解释(三)——激活函数定义,作用与种类(附公式,求导,图像和代码)

激活函数 前言作用激活函数种类1. ReLU (Rectified Linear Unit)2. Leaky ReLU3. ELU (Exponential Linear Unit)4. Sigmoid5. Tanh6. Swish 结论 前言 在深度学习中,激活函数是神经网络中的一个关键组件,起着引入非线性因素的作用,从而增加…

HTML+CSS 动态卡片

效果演示 实现了一个带有动态背景和图片放大效果的卡片展示。卡片的背景是由两种颜色交替组成的斜线条纹&#xff0c;同时背景会以一定速度循环滚动。当鼠标悬停在卡片上时&#xff0c;卡片的图片会放大&#xff0c;并且卡片的背景会变为彩色。 Code HTML <!DOCTYPE html&…

Windows defender bypass | 免杀

官方文档 在制作免杀的过程中,翻找 Windows 官方对 Windows Defender 的介绍,发现有这样一个目录:Configure Microsoft Defender Antivirus exclusions on Windows Server(在 Windows server 中配置defender排除项)。 https://docs.microsoft.com/en-us/microsoft-365/se…

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】线性分类模型损失函数对比

本节均以二分类问题为例进行展开&#xff0c;统一定义类别标签 y ∈ { 1 , − 1 } y\in\{1,-1\} y∈{1,−1}&#xff0c;则分类正确时 y f ( x ; w ) > 0 yf(x;w)>0 yf(x;w)>0&#xff0c;且值越大越正确&#xff1b;错误时 y f ( x ; w ) < 0 yf(x;w)<0 yf(x;…

大数计算器(加减乘除)

#define _CRT_SECURE_NO_DEPRECATE 1#include<stdio.h> #include<string.h> #define N 200 #define jc_MAX 4000//输入 void input_digit(char s1[], char s2[]) {printf("请输入第一个数&#xff1a;");scanf("%s", s1);printf("请输入第…

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

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

基于机器学习和深度学习的轴承故障诊断方法(Python)

在工业早期&#xff0c;设备故障诊断通常由专家通过观察设备运行中的变量参数并结合自身知识进行诊断。但相比传统的机理分析方法&#xff0c;数据驱动的智能设备故障诊断更能充分提取数据中隐含的故障征兆、因果逻辑等关系。智能设备故障诊断的优势表现在其对海量、多源、高维…

【Python】已完美解决:ERROR: Could not find a version that satisfies the requirement re

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例&#xff08;结合实战场景&#xff09;五、注意事项 已解决&#xff1a;“ERROR: Could not find a version that satisfies the requirement re”的问题 一、问题背景 在使用Python的pip包管理器安…

codegeex2-6b-int4 部署

codegeex2-6b-int4 模型文件 CodeGeeX2 仓库文件地址 CodeGeeX2 推理教程 conda create -n codegeex2 python3.10 -y conda activate codegeex2 pip install -r requirements.txt -i https://pypi.mirrors.u…

2024中国翻译行业发展报告

来源&#xff1a;中国翻译协会 近期历史回顾&#xff1a; 2024国内工商业储能市场研究报告.pdf 2023幸福企业白皮书.pdf 2024年欧亚地区移动经济报告.pdf 内容供应链变革 2023人工智能与首席营销官&#xff08;CMO&#xff09; AI科技对PC产业的影响.pdf 金融业数据应用发展报…

成都晨持绪:抖音电商新手怎么做可信

在如今这个信息爆炸的时代&#xff0c;抖音作为新兴的电商平台&#xff0c;为许多创业者和商家提供了展示和销售产品的新渠道。然而&#xff0c;对于刚入行的新手来说&#xff0c;如何在抖音上建立起一个可信的电商身份&#xff0c;却是一个值得深思的问题。 要确保所售卖的产品…

短剧分销市场动态:机遇挑战双重解读

一、引言 近年来&#xff0c;随着互联网的快速发展和智能手机的普及&#xff0c;短视频和短剧逐渐成为人们日常娱乐的重要组成部分。短剧以其短小精悍、情节紧凑的特点&#xff0c;吸引了大量观众的关注和喜爱。而短剧分销市场则应运而生&#xff0c;为内容创作者和平台方提供了…

[数据集][目标检测]减速带检测数据集VOC+YOLO格式5400张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;5400 标注数量(xml文件个数)&#xff1a;5400 标注数量(txt文件个数)&#xff1a;5400 标注…

Linux 中 “ 磁盘、进程和内存 ” 的管理

在linux虚拟机中也有磁盘、进程、内存的存在。第一步了解一下磁盘 一、磁盘管理 &#xff08;1.1&#xff09;磁盘了解 track&#xff08; 磁道 &#xff09; &#xff1a;就是磁盘上的同心圆&#xff0c;从外向里&#xff0c;依次排序1号&#xff0c;2号磁盘........等等。…

ZnO电阻片在低电场区域的泄漏电流及其电阻的负温度系数

在低电场区域,流过ZnO非线性电阻的泄漏电流小于1mA.泄漏电流不仅与施加的电压幅值有关,而且与温度高低有关。图2.6表示温度对泄漏电流的影响,温度越高,电子在电场作用下定向的运动就越激烈,导致泄漏电流增大。因此温度升高将导致电阳值下降,即ZnO 电阻呈现负温度特性。 一般以…