大家好,又见面了,我是你们的朋友全栈君。
学习ADRC先从提出这个算法的论文《从 PID 技术到“自抗扰控制”技术》开始。
https://download.csdn.net/download/qq_34445388/10309935
调试四轮智能车,板球控制系统,两轮直立车,舵机控制,这些控制系统用的都是PID控制,虽然我已经有很多种改进方法,但是还是很难突破传统PID的限制,调节速度和超调一定同时存在,想要得到较好的控制效果,用现代控制理论解决,要知道精确的系统模型。从网上看到有ADRC这种综合了PID和现代模型的优势的控制算法,想要学习一下。
一、先回味一下传统的PID控制技术
PID控制技术相对于是非常简单的,很容易就理解了,基于误差进行控制,只要有误差,就会往无限逼近误差为零的方向调节。
PID的优点很明显,简单,就是简单,就这么一个公式什么都能进行控制。
但是在使用过程中还是有些技巧的!
1、I 这个量虽然能提高控制的精度,但是他的存在很容易造成超调和滞后,对于响应速度较高(比较接近系统的开环响应频率)的系统,基本上都要选用PD控制,如果是想要再提高响应而不顾超调的话,可以通过对I做限幅,不完全积分等方法加入控制中,明显能够提高系统的响应,但是超调量会急剧增加。
2、P的控制是系统综合能力的体现,P小的时候系统相对稳定,但是跟踪能力差,P大的时候系统总是存在震荡现象。如果你在调试一个系统的时候,他经常会让你抓狂,大也不是,小也不是。这时候就可以使用一些变P的手段,提高P的阶数,增加系统的响应,同时在小误差时能够兼顾稳定性 P= a * Error * Error + b。用一个标准二阶函数就能显著的提高控制系统的品质。
3、D 这个量,确实对于控制的预判有着非常明显的作用,尤其是大滞后的系统,加D之后,能够明显提高响应和抑制积分控制造成的后遗症。但是经过我多次调试发现,微分变量对系统的改善的上限到达比较快,基本上都是PI调节完成之后,D再能对系统品质提高10%——20%,之后就会没什么作用,或者引起震荡。
所以我以前的调试总是绞尽脑汁的想办法,变P变I变D,可是总是很难兼顾系统在不同状态的运行。尤其是增加了很多的调试参数,最后自己都是一团乱,还不能说出一个所以然。看完这一篇感觉恍然大悟,直击内心深处。
PID 的缺点:
①误差的取法;
②由误差 e 提取de/dt 的办法;
③“加权和”策略不一定最好 ;
④积分反馈有许多副作用
我上面说的问题确实很多都与总结的四点有关,下面我们就看看解决办法。
这里的 ‘tao’(那个字符不会显示)在我的理解里就是采样间隔时间,有时候确实是这样的,采样周期越短,噪声被放大越大,引起系统的震荡。比如说直立车速度调节,因为直立,速度和转向都是调节轮子的转速,所以测量的速度噪声特别大,提高采样周期之后才能明显降低噪声的影响。
跟踪微分器TD
看了论文和各种资料,下面我介绍一下我认识的ADRC的TD,至于具体推导原理,是在是不懂。
https://download.csdn.net/download/qq_34445388/10318629
这是韩京清先生研究ADRC几乎所有的论文集链接。
这是跟踪微分控制器的离散方程,看方程其实就很直接。
h:为时间尺度 MATLAB的仿真步长为0.001所以 h = 0.001
Simulink 模型里的TD 有一个输入状态,经过TD安排过渡时间,计算fst(快速控制最优综合函数)后,会得到两个输出v1 目标状态,v2系统的微分。
这是TD的内部结构,和公式里面的一样,就是跟踪微分的阶跃响应公式。fst 输入的第一个参数为
v1(t) – v0(t).在结构图里,就是v1-v,之后的结构对照公式即可看明白。
这里看一下对TD的仿真波形图。
基本上很好的跟踪上了正弦波。
这里提示一下TD模型里的参数修改的地方。在这个模型里只有两个参数r,h.
双击1,再选择2的地方就可以了。然后设置3处的两个参数。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/124605.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...