基于趋近律的滑模控制器设计、仿真(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仿真》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵汪wow

您的支持是我更新创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值