基于趋近律的滑模控制器设计、仿真(S-function)

目录

  • 一、什么是滑模控制?
    • 1. 滑模面
    • 2. 控制策略
    • 3. 抗干扰和鲁棒性
    • 4. 滑模控制的应用
  • 二、什么是趋近律?
    • 1. 趋近律三大设计目标
    • 2. 常见的趋近律形式
      • 1. 等速趋近律
      • 2. 指数趋近律
      • 3. 幂次趋近律
  • 三、滑模控制器设计
  • 四、滑模仿真示例
    • 1. Simulink仿真框图
    • 2. 不同k值下的仿真结果(注意刻度变化)
    • 3. 仿真代码(S-function)

滑模控制系列传送门:

  1. 滑模面设计及其应用实例详解

  2. 滑模面、趋近律设计过程详解(滑模控制)

  3. 滑模变结构控制仿真实例(s-function代码详解)

  4. 非线性系统控制器设计详解及案例仿真(s-function函数)

  5. 观测器控制仿真案例详解(s-function函数)

  6. 基于趋近律的滑模控制器设计、仿真(S-function)

一、什么是滑模控制?

  • 滑模控制(Sliding Mode Control, SMC)是一种非线性控制方法,常用于处理具有不确定性、非线性或外部干扰的系统。其基本思想是通过设计一个滑模面,让系统状态沿着这个面滑动到达目标状态,即稳定点。
  • 滑模控制是一种鲁棒性强的非线性控制方法,通过设计滑模面让系统状态沿面滑动到目标状态。它分为趋近和滑模两个阶段,能够有效抵御不确定性和干扰,但需要处理因离散切换引发的抖振问题。

这个过程可以比喻为“驾车行驶”:滑模面是设计好的道路,系统状态是汽车的位置,滑模控制器是司机,通过不断调整方向盘,让汽车保持在这条路线上前进。即使遇到小的障碍物(干扰),也能自动调整让汽车继续沿着道路行驶。

为了更直观地理解,我们可以分步骤来讲解滑模控制的核心概念和工作原理:

1. 滑模面

  • 滑模控制的关键是“滑模面”。假设你正在引导一个小球(系统的状态)从某个地方移动到终点(目标状态),你设计了一条路径,这就是滑模面。滑模面是一个系统期望达到的状态轨迹,目的是让系统状态最终稳定在这条面上。
  • 举例来说,假设你要控制一个系统的输出 x x x 使其跟随某个参考轨迹 x r e f x_{ref} xref。可以设计一个“误差” e = x − x r e f e = x-x_{ref} e=xxref,并通过设计滑模面 s = e s=e s=e,希望误差趋向零,即系统的输出 x x x 能够跟踪目标 x r e f x_{ref} xref, 滑模面 s = 0 s = 0 s=0 就是我们希望系统最终稳定的地方。

2. 控制策略

滑模控制的目标是让系统状态从任意初始状态快速到达滑模面,并保持在该面上。这个过程可以分为两步:

  • 趋近阶段:在系统初始状态不在滑模面上时,控制策略会迫使系统状态向滑模面靠近。这个过程通过设计趋近律(Reaching Law)实现。
  • 滑模阶段:当系统状态到达滑模面之后,控制策略将保持系统状态在滑模面上滑动,直到最终到达目标状态。滑模阶段的控制目标是让系统沿着滑模面“滑动”到最终的期望状态。

3. 抗干扰和鲁棒性

滑模控制最强大的地方是它对系统模型中的不确定性和外界干扰有很好的鲁棒性。由于滑模控制仅依赖系统状态与滑模面之间的关系,而不依赖于系统的具体模型(尤其是未知部分或外界干扰),它能够很好地抵御外界干扰或模型不精确带来的影响。

例如,假设一个无人机在飞行过程中遇到突如其来的风,这时滑模控制可以通过保持状态在滑模面上的滑动来抵消风力的干扰,使无人机继续按照预定的轨迹飞行。

4. 滑模控制的应用

滑模控制广泛应用于机器人、自动驾驶、无人机控制、电机控制等领域,尤其在面对复杂、不确定系统时表现优异。例如,在自动驾驶汽车的轨迹跟踪中,滑模控制可以帮助汽车在不同的路面状况和外界干扰下,仍然保持在设定的轨迹上行驶。

二、什么是趋近律?

  • 在滑模控制系统中,趋近律(reaching law)是指系统状态向滑模面靠近的动态过程的控制律。滑模控制的核心思想是设计一个滑模面,使得系统的轨迹一旦到达并进入滑模面后,将沿着滑模面滑动,最终到达期望的平衡点。趋近律控制的是系统从任意初始状态如何快速、有效地到达滑模面。

  • 滑模运动包括趋近运动和滑模运动两个过程,系统从任意初始状态趋向切换面时,到达切换面的运动称为趋近运动,即 t → 0 t \rightarrow 0 t0的过程。根据滑模变结构原理,滑模可达性条件仅保证由状态空间任意位置运动点在有限时间内到到切换面的要求,而对于去趋近运动的具体轨迹未做任何限制,采用趋近律的方法可以改善趋近运动的动态品质。

1. 趋近律三大设计目标

趋近律的设计目标主要有三个:

  1. 收敛性:确保系统状态能够迅速收敛到滑模面。
  2. 鲁棒性:对外界干扰和系统不确定性的抑制能力。
  3. 避免抖振:减小滑模控制中的抖振现象,即系统在滑模面附近出现的高频震荡。

2. 常见的趋近律形式

1. 等速趋近律

s ˙ = − ε s g n ( s ) ε > 0 ( 1 ) \dot s = -\varepsilon sgn(s) \quad \varepsilon > 0 \qquad (1) s˙=εsgn(s)ε>0(1)
常数 ε \varepsilon ε表示系统的运动点趋近切换面 s = 0 s = 0 s=0的速率。 ε \varepsilon ε小,趋近速度慢,反之,运动点到达切换面时将具有较大的速度,引起抖动。

2. 指数趋近律

s ˙ = − ε s g n ( s ) − k s ε > 0 , k > 0 ( 2 ) \dot s = -\varepsilon sgn(s) - ks \quad \varepsilon > 0,k>0 \qquad (2) s˙=εsgn(s)ksε>0k>0(2)
式中, s ˙ = − k s \dot s = -ks s˙=ks是指数趋近项,其解为 s = s ( s ) e k t s = s(s)e^{kt} s=s(s)ekt。指数趋近律尤其适合解决具有大阶跃的相应控制问题。单纯的指数趋近,运动点逼近切换面是一个渐进的过程,不能保证有限时间内到达,切换面上也就不存在滑动模态,所以要增加一个等速趋近项 s ˙ = − ε s g n ( s ) \dot s = -\varepsilon sgn(s) s˙=εsgn(s),使当 s s s接近于0时,趋近速度是 ε \varepsilon ε而不是0,可以保证有限时间内到达。 在指数趋近律中,为了
保证快速趋近的同时削弱抖振,应该在增大 k k k值的同时减小 ε \varepsilon ε

3. 幂次趋近律

s ˙ = − k ∣ s ∣ α s g n ( s ) , k > 0 , 1 > α > 0 ( 3 ) \dot s = -k|s|^{\alpha} sgn(s),k>0,1>\alpha>0 \qquad (3) s˙=ksαsgn(s)k>01>α>0(3)
通过调整 α \alpha α的值,可保证当系统状态远离滑模动态(s较大)时,能以较大的速度趋近于滑模动态,反之,当系统状态趋近滑模动态(s较小)时,保证较小的控制增益,以降低抖振。

三、滑模控制器设计

考虑如下被控对象
θ ¨ ( t ) = − f ( θ , t ) + b u ( t ) ( 4 ) \ddot \theta(t) = -f(\theta,t)+bu(t) \qquad (4) θ¨(t)=f(θ,t)+bu(t)(4)
其中, f ( θ , t ) f(\theta,t) f(θ,t) b b b 已知,且 b > 0 b>0 b>0

设计滑模函数为(滑模面设计详解)
s ( t ) = c e ( t ) + e ˙ ( t ) s(t)= ce(t)+\dot e(t) s(t)=ce(t)+e˙(t)
其中, c > 0 c>0 c>0,满足 Hurwitz 条件。

跟踪误差为
e ( t ) = θ d ( t ) − θ ( t ) , e ˙ ( t ) = θ ˙ d ( t ) − θ ˙ ( t ) ( 5 ) e( t) = \theta_d(t)-\theta(t) ,\dot e(t) = \dot \theta_d(t)-\dot \theta(t) \qquad (5) e(t)=θd(t)θ(t)e˙(t)=θ˙d(t)θ˙(t)(5)

其中, θ d ( t ) 为目标位置。 \theta_d(t)为目标位置。 θd(t)为目标位置。


s ˙ ( t ) = c e ˙ ( t ) + e ¨ ( t ) = c ( θ ˙ d ( t ) − θ ˙ ( t ) ) + ( θ ¨ d ( t ) − θ ¨ ( t ) ) ) = c ( θ ˙ d ( t ) − θ ˙ ( t ) ) + ( θ ¨ d ( t ) + f ( θ , t ) − b u ( t ) ) \dot s(t) = c\dot e(t)+\ddot e(t) \\ =c(\dot \theta_d(t)-\dot\theta(t))+(\ddot \theta_d(t)-\ddot\theta(t)))\\ =c(\dot\theta_d(t)-\dot \theta(t))+(\ddot \theta_d(t)+f(\theta,t)-bu(t)) s˙(t)=ce˙(t)+e¨(t)=c(θ˙d(t)θ˙(t))+(θ¨d(t)θ¨(t)))=c(θ˙d(t)θ˙(t))+(θ¨d(t)+f(θ,t)bu(t))
采用指数趋近律
s ˙ = − ε s g n ( s ) − k s ε > 0 , k > 0 ( 6 ) \dot s = -\varepsilon sgn(s)-ks\quad \varepsilon > 0,k>0 \qquad (6) s˙=εsgn(s)ksε>0k>0(6)
结合上式,得
c ( θ ˙ d ( t ) − θ ˙ ( t ) ) + ( θ ¨ d ( t ) + f ( θ , t ) − b u ( t ) ) = − ε s g n ( s ) − k s c(\dot \theta_d(t)-\dot \theta(t))+(\ddot \theta_d(t)+f(\theta,t)-bu(t))=-\varepsilon sgn(s) -ks c(θ˙d(t)θ˙(t))+(θ¨d(t)+f(θ,t)bu(t))=εsgn(s)ks
基于指数趋近律的滑模控制器为
u ( t ) = 1 b ( ε s g n ( s ) + k s + c ( θ ˙ d − θ ˙ ) + θ ¨ d + f ( θ , t ) ) ( 7 ) u(t) = \frac{1}{b}(\varepsilon sgn(s)+ks+c(\dot \theta_d-\dot \theta)+\ddot \theta_d+f(\theta,t)) \qquad (7) u(t)=b1(εsgn(s)+ks+c(θ˙dθ˙)+θ¨d+f(θ,t))(7)

四、滑模仿真示例

考虑如下被控对象
θ ¨ ( t ) = − f ( θ , t ) + b u ( t ) ( 8 ) \ddot \theta(t) = -f(\theta,t)+bu(t) \qquad (8) θ¨(t)=f(θ,t)+bu(t)(8)
其中, f ( θ , t ) = 25 θ ˙ f(\theta,t) = 25\dot \theta f(θ,t)=25θ˙ b = 133 b = 133 b=133

取目标位置为 θ d ( t ) = s i n ( t ) \theta_d(t) = sin(t) θd(t)=sin(t),被控对象初始状态为[-0.15 \quad -0.15 ],采用
(7)式控制器,取 c = 15 , ε = 5 c = 15, \varepsilon = 5 c=15,ε=5,分别取 k = 0 , k = 10 , k = 20 , k = 30 k = 0, k = 10, k = 20, k = 30 k=0,k=10,k=20,k=30

1. Simulink仿真框图

在这里插入图片描述

2. 不同k值下的仿真结果(注意刻度变化)

  • k = 0
    在这里插入图片描述
  • k = 10
    在这里插入图片描述
  • k =20
    在这里插入图片描述
  • k = 30
    在这里插入图片描述

3. 仿真代码(S-function)

  • chap2_2testctrl.m
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes

sizes = simsizes;

sizes.NumContStates  = 0;%%是否是连续
sizes.NumDiscStates  = 0;%%是否是离散
sizes.NumOutputs     = 4;%%几个输出
sizes.NumInputs      = 3;%%几个输入
sizes.DirFeedthrough = 1;%%输入输出是否有直接关系
sizes.NumSampleTimes = 0;% at least one sample time is needed 采样时间有几个
sys = simsizes(sizes);
x0  = [];
str = [];
ts  = [];%%采样时刻 采样时间偏移量
simStateCompliance = 'UnknownSimState';

function sys=mdlOutputs(t,x,u)
thd = u(1);
dthd = cos(t);
ddthd = -sin(t);
th = u(2);
dth = u(3);

b = 133;
f = 25*dth;
c = 15;
epc = 5;
%在此处更改K值大小
S = 1;
if S == 1
    k = 0;
elseif S == 2
    k = 10;
elseif S == 3
    k = 20;
elseif S == 4
    k = 30;
end
e = thd - th;
de = dthd - dth;
s = c*e+de;
ut = 1/b*(epc*sign(s)+k*s+c*de+ddthd+f);
sys = [ut,e,de,k];
  • chap2_2testplant.m
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 2;%%是否是连续
sizes.NumDiscStates  = 0;%%是否是离散
sizes.NumOutputs     = 2;%%几个输出
sizes.NumInputs      = 1;%%几个输入
sizes.DirFeedthrough = 0;%%输入输出是否有直接关系
sizes.NumSampleTimes = 0;% at least one sample time is needed 采样时间有几个
sys = simsizes(sizes);
x0  = [-0.15,-0.15];
str = [];
ts  = [];%%采样时刻 采样时间偏移量
simStateCompliance = 'UnknownSimState';

function sys=mdlDerivatives(t,x,u)
b = 133;
th = x(1);
dth = x(2);
ut = u(1);
f = 25*dth;
ddth = -f + b * ut;
sys=[dth, ddth];

function sys=mdlOutputs(t,x,u)
th = x(1);
dth = x(2);
sys = [th,dth];%th,dth
  • chap2_2test_plot.m
close all;
%% 提取timeseries对象中的数据
t = out.tout;               % 时间数据

e = out.y2.Data(:,1);             % e的值
de = out.y2.Data(:,2);           % de的值
k = out.y1.Data(:,3);            % k的值
thd = out.y1.Data(:,1);          %thd的值
u = out.y1.Data(:,2);            % ut的值
th = out.y1.Data(:,3);           %th的值
dth = out.y1.Data(:,4);          %dth的值
dthd = out.y1.Data(:,5);         %dthd的值

%% 绘制 误差e,de 的曲线
figure;
subplot(3,2,1);
plot(t,e,'r',t,de,'b', 'linewidth', 2);
xlabel('Time (s)');
ylabel('Angle tracking');
legend('Ideal position signal','Position tracking');
title('误差曲线');
grid;
%% 绘制 位置跟踪 的曲线
subplot(3,2,2);
plot(t, th, 'r',t,thd,'b', 'linewidth', 2);
xlabel('Time (s)');
ylabel('Angle tracking');
title('位置跟踪');
legend('Ideal position signal','Position tracking');
grid;

%% 绘制 速度跟踪 的曲线
subplot(3,2,3);
plot(t,dthd,'r',t,dth,'b','linewidth', 2);
xlabel('Time (s)');
ylabel('Speed tracking');
title('速度跟踪');
legend('Ideal speed signal','Speed tracking');
grid;

%% 绘制控制输入的曲线
subplot(3,2,4);
plot(t,u,'b','linewidth',2);
xlabel('Time(s)');
ylabel('Control input');
legend('控制输入ut');
grid;

c = 15;
%% 根轨迹
subplot(3,2,5);
plot(e,de,'b',e,-c'.*e,'k','linewidth',2);
xlabel('Time (s)');
ylabel('e value');
title('不同k值下指数趋近律相轨迹趋近过程');

如有不足之处,请广大网友指正。

参考资料:《滑模变结构控制Matlab仿真》

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

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

相关文章

MAC如何获取文件数字签名和进程名称

1、安装需要查看数字签名和进程名称的软件包 2、打开终端命令行(Terminal) 3、查找数字签名 在终端命令行中输入: codesign -dvv 安装的软件路径 2>&1 | grep "Authority" | head -n 1 | cut -d -f2”回显即为进程的数…

kafka发送消费核心参数与设计原理详解

核心参数详解: 发送端参数: 发送方式:默认值一般都是1: 重试参数 : 批量参数: 消费端参数: 自动提交参数: 如果是false,就是说消费完后不提交位移。也就是说比如之前消费的1-5.第N次还是消费到1-5.如果是false。那么第一次消费1-3,第二次消费4-5:默认是true:我们…

HCIP和HCIE有什么区别呢?

HCIP和HCIE有什么区别呢?今天给大家介绍下两者的不同 ‌认证层次‌:HCIE屹立于华为认证体系的顶端,定位为专家级认证;而HCIP则位于中坚位置,属于中级认证。 难度与专业要求‌:通往HCIE之路布满挑战&…

机器学习实战26-一种基于LightGBM的股市涨跌预测系统与代码实现过程

大家好,我是微学AI,今天给大家介绍一下机器学习实战26-一种基于LightGBM的股市涨跌预测系统与代码实现过程。文章首先阐述了项目背景,随后详细解释了LightGBM模型的原理及其在股市预测中的应用。通过选取具有代表性的样例股票数据集&#xff…

深入浅出MongoDB(三)

深入浅出MongoDB(三) 文章目录 深入浅出MongoDB(三)复制副本集设置分片分片实例备份与恢复监控ObjectId 复制 复制时将数据同步在多个服务器的过程,提供了数据的冗余备份,在多个服务器上存储数据副本&#…

视频压缩怎么压缩更小?分享释放视频占用空间的小技巧

想问问同样在做视频自媒体博主的你,都是怎么解决占满内存的视频素材的? 是有听说有一部分博主会把录制好的,还未使用的视频素材,用工具压缩他们的体积,以减少占用内存空间。 小编也有试过,发现视频的体积是…

oracle解决关联查询报invalid number问题

出现问题的原因和背景 oracle进行关联查询的时候因为字段存在多个用逗号切割的id,导致查询的过程中报无效数字或非法数字 问题复现 新建表A CREATE TABLE "A" (id NUMBER NOT NULL,name VARCHAR2(255 BYTE) )INSERT INTO "A" VALUES (1, 上海…

【Spring】lombok、dbUtil插件应用

一、lombok插件 1. 功能:对实体类自动,动态生成get、set方法,无参、有参构造..... 2. 步骤: (1)idea安装插件(只做一次) (2)添加坐标 (3)编写注解 NoArgsCo…

Codeforces Round 975 (Div. 2) A-C 题解

这次看到 C 题分数 1750 就开始害怕了,用小号打的比赛,一直觉得做不出来,最后才想到 A. Max Plus Size 题意 给你一些整数,选择一些涂成红色,两两不能相邻,你的得分为: [ 红色元素的个数 ] …

Tableau数据可视化入门

目录 一、实验名称 二、实验目的 三、实验原理 四、实验环境 五、实验步骤 1、Tableau界面引导 2、数据来源 3、数据预处理操作 4、制作中国各个地区的利润图表 4.1条形图 4.2气泡图 5、制作填充地球图 一、实验名称: 实验一:Tableau数据可视…

PyCharm 的安装和配置

环境要求: OS:Windows / macOS / Linux (此处使用 Windows 10 进行演示)Python:包括但不限于 Anaconda,miniconda,Python。在 Windows 下只要能找到 python.exe 即可 Download 进入 PyCharm 官网,选择对…

gitlab修改访问端口

目录 1.找到gitlab.rb文件,一般在/etc/gitlab/路径下 2.打开配置文件,加上代码 3.重新配置 4.重启gitlab 1.找到gitlab.rb文件,一般在/etc/gitlab/路径下 2.打开配置文件,加上代码 打开文件 sudo vi gitlab.rb 加上默认端口配…

上交所服务器崩溃:金融交易背后的技术隐患暴露杭州BGP高防服务器43.228.71.X

一、上交所宕机事件始末 2024 年 9 月 27 日,上交所交易系统突发崩溃,这一事件犹如一颗巨石投入平静的湖面,引起了轩然大波。当天上午,众多投资者反馈券商交易出现延迟问题,随后上交所发布了《关于股票竞价交易出现异常…

OJ在线评测系统 前端创建题目(增) 更新题目(改) 题目列表(查) 以及做题页面的开发 基于VUECLI脚手架画界面

目录 前端创建页面的开发一 创建一个路由 用acro design写 前端创建页面的开发二 题目管理页面 搜索 最終效果 题目更新页面的开发 携带参数的那种 修改路由 页码更新细节 我们先处理菜单项的权限控制和权限隐藏 在这里改 属性绑定一个函数 可以参考聚合搜索项目…

某客户Oracle RAC无法启动故障快速解决

某日,9:50左右接到好友协助需求,某个客户Oracle RAC无法启动,并发过来一个报错截图,如下: 和客户维护人员对接后,远程登录服务端进行故障分析。 查看hosts信息,首先进行心跳测试,测…

RK3568的型号区分

RK3568是瑞芯微公司设计开发和生产的MPU芯片产品。RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,集成4核ARM架构A55处理器和Mali G52 2EE图形处理器,支持4K解码和1080P编码。内置独立的NPU,0.8Tops算力,可…

【tower-boot 系列】开源RocketMQ和阿里云rockerMq 4.x和5.x集成 (一)

RocketMQ 简单介绍 阿里云rockerMq 4.x和5.x集成 一、云平台创建实例 参考文档: 阿里云api 阿里云 创建实例 二、skd集成思路 公司用的RocketMQ一般是自建开源apache的RocketMQ和上阿里云的RocketMQ,目前阿里云支持4.x和5.x版本 项目集成思路&…

巨控协议转换网关GRM321GRM322GRM323应用场景

巨控工业协议网关GRM321,GRM322,GRM323是网口型网关,支持各种PLC的TCP协议,具备多路RS485,RS232和三个TCP网口。能实现RS485,RS232和TCP的工业协议的零代码无缝转换,能极大节约工程师编程时间,保障数据采集的可靠性。 …

无人机侦测:频谱无线电侦测设备技术详解

无人机侦测中的频谱无线电侦测设备技术是一项复杂而关键的技术,它主要通过分析无线电频谱中的信号来探测和识别无人机。以下是该技术的详细解析: 一、技术原理 频谱探测技术:该技术通过分析信号在频域上的分布和特性,来识别、测…

[大语言模型-论文精读] ACL2024-长尾知识在检索增强型大型语言模型中的作用

ACL2024-长尾知识在检索增强型大型语言模型中的作用 On the Role of Long-tail Knowledge in Retrieval Augmented Large Language Models Authors: Dongyang Li, Junbing Yan, Taolin Zhang, Chengyu Wang, Xiaofeng He, Longtao Huang, Hui Xue, Jun Huang 1.概览 问题解决&…