大家好,又见面了,我是你们的朋友全栈君。
添加链接描述源码1.最速跟踪微分器TD
它的离散表达式为:
参数中:V(t)是目标值h、h0为积分步长,一般来说h可以等于h0,但是为了减少超调和减少震荡,才把他们分开,一般h0比h大,比如大20倍。当h0较大时,能够明显减少震荡,所以也叫滤波因子。减小h可以抑制噪声放大作用。r为速度因子,值越大,逼近速度越快,但是最好根据实际被控对象的可承受能力而定。
表达式中:其中fhan函数第一种表达式为:
fhan函数第二种表达式为:
其中fsg函数表达式为:
两种fhan函数是等价的。最速跟踪微分器的作用是起到一个缓冲作用,比如输入一个阶跃信号,它会让信号有一定斜率,让执行机构不会一启动就进入最大马力,从而导致第一次及后面几次逼近设定值时出现超调。它的可调参数与实际系统
2.扩张状态观测器
其中函数fal的表达式为:
它的另一种表达式为
3.状态误差反馈律
3.1线性反馈率
其中e1=x1-z1,e2=x2-z2,e0为e1的积分。
3.2非线性反馈率
然而这种线性组合不一定最好。大量仿真研究表明, 采用 e 0,e 1,e 2 的适当非线性组合效果更好, 我们通常采用的非
线性组合有如下两种形式:
完成的二阶自抗扰控制器算法如下
这里 r0,β01,β02,β03,r,c,h1,b0 是控制器的参数, 其中 r0是根据过渡 过 程 快 慢 的 需 要 和 系 统 的 承 受 能 力 来 决 定的 ; 参 数 β01,β02,β03 是 由 系 统 所 用 采 样 步 长 来 决定 的 ( 不 管 什 么 样 的 对 象 , 采 样 步 长 一 样 , 都 可 以 用相 同 的 β01, β02, β03) 。 这 样 , 系 统 中 真 正 需 要 调 整的参数为控制量增益 r、阻尼系数 c、精度因子 h1 和补偿 因 子 b0 四 个 了 。 在 一 般 情 况 下 , 控 制 量 增 益 r 是 大到 一 定 程 度 就 可 以 , 再 大 也 几 乎 没 有 影 响 。 因 此 只 需三 个 参 数 c,h1,b0 需 要 进 行 调 整 , 这 与 PID 的 三 个 增 益差不多: l/h1 相当于 PID 的比例增益; 阻尼因子 c 相当于 PID 的微分增益; 补偿因子 b0 有 点 像 PID 的 积 分 增益, 但也不很像。这里三个参数与 PID 的三个参数有很 多 相 似 之 处 , 但 也 有 很 大 的 差 别 。(韩老师原话)
其框图为:
//分割线/
以上均为理论的上的学习,在其他博客都能找到相似的东西,但是很少能够看到仿真的实例,因此在学习的自抗扰技术后,立马做了一个仿真。ADRC作为改造的PID,其吸收其根据误差存在进行调整的思想,同时也不依赖具体的控制对象模型,通过将干扰扩张成为系统的状态变量,进行干扰补偿,进而降低干扰的影响,另外通过添加微分跟踪器,使输入端不连续的信号,变成连续的变化的信号,避免了控制系统的超调,如此看来ADRC确实NB。
实验步骤:
(1)以二阶控制对象为例,阶跃信号作为输入信号,其输出信号与输入信号如下图:
从仿真的结果可以看出无超调,而传统的PID调节的图像为下图:(采用统一控制对象)
貌似没有什么对比性,可能是我参数调的不好(假装是这个原因)。
(2)添加干扰信号,测试ADRC抗干扰能力,每隔10个信号发送一个干扰信号,得到仿真的图像为:
图像上方的红点为原始信号叠加了一个干扰信号,从仿真的图像上可以看出输出信号几乎不受干扰的信号的影响,可能是我的参数调的太好(假装是这个原因)。
总结来说,ADRC相比于传统的PID调整有着它无可比拟的有点,在抵抗干扰方面更为出色。最后附上仿真的代码,各位大佬可以调调参数。
仿真源码
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144649.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...