chap1_1 绪论
plant.m是被控对象的设置,应当先从plant看起。
要求电机转动一度时系统的响应,data分别为理想转角、实际转角以及角速度
k=10
k=0
k 是 控 制 律 中 的 s 的 系 数 , 代 表 的 是 李 雅 普 诺 夫 能 量 导 数 V ˙ ≤ − k s 2 , 即 要 求 能 量 下 降 速 度 要 足 够 大 。 k是控制律中的s的系数,代表的是李雅普诺夫能量导数\dot{V}≤-ks^2,即要求能量\\下降速度要足够大。 k是控制律中的s的系数,代表的是李雅普诺夫能量导数V˙≤−ks2,即要求能量下降速度要足够大。
尝试跟随一个正弦信号sin(t/2),得到上的结果,可以看到有一定跟随时间,而且加速度(data(3))存在明显不平滑的现象,应该就是书中说的滑膜控制在滑模面附近的振动问题。
噢当我没说,我加了个d(t)=sint的干扰信号…把干扰信号去掉之后就好多了。
控制律引入符号函数的原因:保证对应李雅普诺夫函数中 V ˙ \dot{V} V˙始终存在一项 s ∗ s g n ( s ) = − η ∣ s ∣ ≤ 0 s*sgn(s)=-η|s|≤0 s∗sgn(s)=−η∣s∣≤0
chap2_1
不太理解那个Hurwitz条件…
%% 控制对象初始化函数
function [sys,x0,str,ts]=mdlInitializeSizes % 初始化
sizes = simsizes; % 建立一个类
sizes.NumContStates = 2; % 模型有两个连续状态量dot{θ}和ddot{θ}
sizes.NumDiscStates = 0; % 没有离散量
sizes.NumOutputs = 2; % 两个输出θ和dot{θ}
sizes.NumInputs = 1; % 一个输入u
sizes.DirFeedthrough = 0; % 输入信号没有直接在输出端出现
sizes.NumSampleTimes = 1; % =1时需要设置采样时间和偏移量ts
sys = simsizes(sizes); % =0就写ts = [ ] 就行
x0 = [0,0]; % 系统初始状态
str = [];
ts = [0 0]; % 采样时间
chap2_2 基于趋近率的滑模控制
使用指数趋近律 s ˙ = − ε s g n s − k s \dot{s}=-εsgns-ks s˙=−εsgns−ks,其中-ks为指数趋近项,调整不同的k值可以得到不同的趋近速率。
以上是系统的相轨迹图,可以看到增大K能明显加快e的衰减速率,代价是鲁棒性变差,当e大于一定值后de>0,系统发散。
chap2_3 基于趋近率的鲁棒滑模控制
和上一个相比考虑多了个干扰d,被控对象变为
θ ( t ) ¨ = − f ( θ , t ) + b u ( t ) + d ( t ) f ( θ , t ) = 25 θ ˙ . \ddot{θ(t)}=-f(θ,t)+bu(t)+d(t)\\f(θ,t)=25\dot{θ}. θ(t)¨=−f(θ,t)+bu(t)+d(t)f(θ,t)=25θ˙. 个人理解为阻尼量,干扰量 d ( t ) d(t) d(t)无法确定,用干扰的上下界来设计控制律。(其实还是在控电机)
控制量u随时间的变化,可以看到存在明显不连续性,因为用了符号函数sgn,在s符号改变时干扰界的选择也发生了改变,不过对于电机而言力是可以瞬间改变的,不平滑好像也没什么问题。
注意到一个问题,系统的相轨迹图中显示,在误差e很小的时候会出现部分de>0的区域,说明实际上系统存在一个收敛的最小误差值,或许会影响精度。造成的原因应该就是上面提到的干扰的上下界的问题。
尝试将干扰量调到很大,可以明显看到系统的精度明显下降,同时速度的跟随也出现了很多毛刺,说明干扰量对系统的影响。
chap2_4 基于上界的滑模控制
系统改为非线性系统(倒立摆),将符号函数sgn(s)替换为饱和函数sat(s),书中提到的M指的是控制其的标识符,M=1代表用符号函数控制,M=2用饱和函数,其中sat(s)满足
s a t ( s ) = { 1 , s > Δ k s , ∣ s ∣ ≤ Δ − 1 , s < Δ sat(s)=\left\{\begin{matrix} 1,s>Δ\\ ks,|s|≤Δ\\ -1,s<Δ \end{matrix}\right. sat(s)=⎩⎨⎧1,s>Δks,∣s∣≤Δ−1,s<Δ
符号函数控制下的输入
饱和函数控制下的输入
可以看到对比还是很明显的,饱和函数的加入明显减少了抖振的问题。
加入干扰项dt=0.2*sin(t)后的系统响应以及控制量的变化,效果还行,就是系统存在周期性变化的误差…
把干扰量加到一定值后系统就控制不住了,再往后加就发散了。
chap2_5 基于准滑动模态的滑模控制
准滑动模态:系统的运动轨迹被限制在理想滑动模态的某一Δ邻域内的模态,称Δ邻域为滑动模态切换面的边界层。在边界层内(即s∈Δ时)不要求满足滑动模态的存在条件。
实际上就是用饱和函数替代了符号函数,在边界层外采用的是切换控制(1或-1),在边界层内采用线性化反馈控制。
其实跟上一节差不多,程序就不看了。
tanh_test
- 控制律引入符号函数的原因:保证对应李雅普诺夫函数中 V ˙ \dot{V} V˙始终存在一项 s ∗ s g n ( s ) = − η ∣ s ∣ ≤ 0 s*sgn(s)=-η|s|≤0 s∗sgn(s)=−η∣s∣≤0
- 改为饱和函数的原因:可以有效克服滑膜抖
- 改为双曲正弦函数的原因:连续光滑,可以求导
尝试了一下双曲正切函数
t a n h ( x ε ) = e x ε − e − x ε e x ε + e − x ε tanh(\frac{x}{ε})=\frac{e^{\frac{x}{ε}}-e^{-\frac{x}{ε}}}{e^{\frac{x}{ε}}+e^{-\frac{x}{ε}}} tanh(εx)=eεx+e−εxeεx−e−εx
调整ε的值可以得到不同的函数
ε=0.5
ε=10
chap2_6 基于双曲正切函数的滑模控制
双曲正切函数的两个引理还蛮重要的,在证明李雅普诺夫能量收敛中有用,就记一下
-
任意给定的x,存在ε>0,存在不等式
x t a n h ( x ε ) = ∣ x t a n h ( x ε ) ∣ = ∣ x ∣ ∣ t a n h ( x ε ) ∣ ≥ 0 xtanh(\frac{x}{ε})=|xtanh(\frac{x}{ε})|=|x||tanh(\frac{x}{ε})|≥0 xtanh(εx)=∣xtanh(εx)∣=∣x∣∣tanh(εx)∣≥0
-
取ε>0,对于任意χ∈R,存在常数ε>0,如下不等式成立
0 ≤ ∣ χ ∣ − χ t a n h ( χ ε ) ≤ μ ε , μ = 0.2785 0≤|χ|-χtanh(\frac{χ}{ε})≤με,μ=0.2785 0≤∣χ∣−χtanh(εχ)≤με,μ=0.2785
chap2_7 等效滑膜控制
在这里贴一个知乎回答,解释为什么叫等效滑模控制
设计针对以下系统
s ˙ = f ( s , t ) + u ( s ) \dot{s}=f(s,t)+u(s) s˙=f(s,t)+u(s)
在设计控制器时,先令 s ˙ = 0 \dot{s}=0 s˙=0,得到等效控制器 u e q u_{eq} ueq,再将 u = u e q + u s w u=u_{eq}+u_{sw} u=ueq+usw带入,使 s s ˙ ≤ − η ∣ s ∣ s\dot{s}≤-η|s| ss˙≤−η∣s∣成立,可以得到切换鲁棒项 u s w u_{sw} usw
chap2_8 滑模控制的数字化仿真
没什么特别的,无非是用了差分法用ode45求解了方程,其他大同小异。