关于ADRC算法以及参数整定(调参)的一些心得体会

ADRC,全称叫做Active Disturbance Rejection Control,中文名是自抗扰控制技术。这项控制算法是由中科院的韩京清教授提出的。韩教授继承了经典PID控制器的精华,对被控对象的数学模型几乎没有任何要求,又在其基础上引入了基于现代控制理论的状态观测器技术,将抗干扰技术融入到了传统PID控制当中去,最终设计出了适合在工程实践中广泛应用的全新控制器。

1. ADRC介绍

一般来说,ADRC控制器包括三个组件:跟踪微分器,非线性状态反馈(非线性组合),扩张观测器。ADRC的框图如下(盗图自《从PID技术到“自抗扰控制”技术》):

简单的介绍下ADRC的结构:

安排过渡过程就是跟踪微分器,主要目的就是为了输入量不要有跳变,便于实际系统实时跟踪。

非线性反馈实际上就是PD控制的进阶版本,PD控制计算控制律的方法是线性加权的,而非线性反馈则先用了非线性函数对误差和误差的微分进行处理,之后再进行加权。

扩张观测器(ESO)是一个状态观测器,一般观测器仅观测系统的状态,只有输出和输出的导数(速度)。但是这里对输出的导数的导数(加速度)也进行了观测,这里也就是所谓的扰动,对扰动进行了观测。观测器的状态量也由此扩张了一维,因此叫做扩张观测器。(目前对观测器的认识还非常粗浅,欢迎大家批评指正。)

扰动补偿部分,也就是框图中间的红框部分。这里是整个ADRC的核心部分,说成是ADRC的灵魂也不为过。扰动补偿的核心思想就是要把原系统通过控制律设计改造成积分器级联的二阶系统,这样即使是最普通的PD控制器也可以对其进行控制。在这个改造过程中,补偿量u综合考虑了系统内部扰动、外部扰动、模型不确定性等等。这个补偿的原理也可以详细阅读韩老师的《从PID技术到“自抗扰控制”技术》,非常简单,但是非常高明。

2. 线性ADRC的参数整定

注意,这里介绍的是线性ADRC的参数整定方式。ADRC分为三部分,跟踪微分器的参数整定比较容易,很多地方都有介绍,这里就不再细说了。这里主要介绍其余参数的整定方法。首先线性ADRC的公式罗列如下:

e = z 1 ( k ) − y ( k ) z 1 ( k + 1 ) = z 1 ( k ) + h ⋅ ( z 2 ( k ) − β 01 e ) z 2 ( k + 1 ) = z 2 ( k ) + h ⋅ ( z 3 ( k ) − β 02 e + b u ( k ) ) z 3 ( k + 1 ) = z 3 ( k ) − h ⋅ β 03 e e 1 = v 1 ( k ) − z 1 ( k ) ,   e 2 = v 2 ( k ) − z 2 ( k ) u 0 = k p e 1 + k d e 2 u ( k ) = u 0 − z 3 ( k ) / b \begin{array}{lcl} e=z_1(k)-y(k) \\ z_1(k+1)=z_1(k)+h\cdot(z_2(k)-\beta_{01}e) \\ z_2(k+1)=z_2(k)+h\cdot(z_3(k)-\beta_{02}e+bu(k)) \\ z_3(k+1)=z_3(k)-h\cdot\beta_{03}e \\ e_1=v_1(k)-z_1(k),\ e_2=v_2(k)-z_2(k)\\ u_0=k_pe_1+k_de_2\\ u(k)=u_0-z_3(k)/b \end{array}e=z1​(k)−y(k)z1​(k+1)=z1​(k)+h⋅(z2​(k)−β01​e)z2​(k+1)=z2​(k)+h⋅(z3​(k)−β02​e+bu(k))z3​(k+1)=z3​(k)−h⋅β03​ee1​=v1​(k)−z1​(k),e2​=v2​(k)−z2​(k)u0​=kp​e1​+kd​e2​u(k)=u0​−z3​(k)/b​

其中,重要的参数包括六个:

β 01 ,   β 02 ,   β 03 ,   k p ,   k d , b \beta_{01},\ \beta_{02},\ \beta_{03},\ k_p,\ k_d, bβ01​,β02​,β03​,kp​,kd​,b

β 01 ,   β 02 ,   β 03 \beta_{01},\ \beta_{02},\ \beta_{03}β01​,β02​,β03​ 是观测器的参数,根据高志强老师的研究结论(参考论文《Scaling and bandwidth-parameterization based controller tuning》),可以依据观测器带宽的概念来设计参数,即β 01 = 3 ω o ,   β 02 = 3 ω o 2 ,   β 03 = ω o 3 \beta_{01}=3\omega_o,\ \beta_{02}=3\omega_o^2,\ \beta_{03}=\omega_o^3β01​=3ωo​,β02​=3ωo2​,β03​=ωo3​。其中,ω o \omega_oωo​是观测器带宽。

k p ,   k d k_p,\ k_dkp​,kd​相当于PD控制器的增益参数。

b bb是补偿系数,和被控对象模型有一定关系。

根据高老师的结果,那么我们的线性ADRC需要整定的参数就只剩下四个了:

ω o ,   k p ,   k d , b \omega_o, \ k_p,\ k_d, bωo​,kp​,kd​,b

2.1 关于这四个参数有什么整定规律呢?

关于带宽ω o \omega_oωo​

当扰动频率低时,用太大的带宽,会让z 3 z_3z3​的抖震很大,自然输出抖震也很大。但是随着扰动频率增加,用大的带宽就没有问题,也不会有抖震。

当带宽增加时,z 3 z_3z3​的估计值明显变大了,也就是扰动的补偿量会变大。也就是说,当扰动频率增加时,用大一点的带宽可以更好的抑制扰动。

关于补偿系数b bb

加大b bb能减少ω o \omega_oωo​变大带来的抖震,但是加大b就会让扰动的补偿量变小,抑制扰动的效果可能会有折扣。

关于k p ,   k d k_p,\ k_dkp​,kd​

固定ω o \omega_oωo​和b bb的情况下,增加k p k_pkp​对扰动补偿的幅值没有任何影响,即与扰动的补偿无关。但是k p k_pkp​增加到一定程度以后,也会引发抖震现象。这个时候增加ω o \omega_oωo​,又可以减少抖震。另外,大带宽和大k p k_pkp​带来的控制效果会更好。同样,这个时候增加b bb也可以减少抖震,但是控制效果会变差。

当k d k_dkd​过大的时候,也会引起抖震。当k d k_dkd​比较大的时候,带宽就不能设置得太大了。k d k_dkd​过大引发的抖震绝对不可以用提高带宽来解决,必须通过加大b bb来解决,但是一般而言,加大b bb都会使得控制效果大打折扣。可以通过减小k p k_pkp​来克服,这样控制效果不会有太大的损失。

当被控对象发生抖震时,可能的解决方法有:

抖震发生时,减小带宽、增大b、减小k d k_dkd​、或者增大k p k_pkp​(大带宽对应大k p k_pkp​)、减小k p k_pkp​(k p k_pkp​太大引发抖震)都有可能可以解决问题。

2.2 参数整定策略

1、固定一个b bb,设定较小的k p k_pkp​和k d k_dkd​,之后尽可能选用大的带宽。

带宽多大合适?

一是,看扰动补偿的输出大小和实际系统可接受的输入范围是否匹配;

二是看是否已经发生了抖震现象。

2、选定好带宽以后,逐步调高k p k_pkp​和k d k_dkd​。

3、在ω o ,   k p ,   k d \omega_o, \ k_p, \ k_dωo​,kp​,kd​三个参数都调好了,但是控制效果依然不满意,可以尝试调整b bb,之后再进行一次上述过程。

另外,如果对应最开始选定的b bb,找不到稳定的ω o ,   k p ,   k d \omega_o, \ k_p, \ k_dωo​,kp​,kd​,那么就加大b bb,直到可以找到稳定的ω o ,   k p ,   k d \omega_o, \ k_p, \ k_dωo​,kp​,kd​。

2.3 前面一切都是浮云,这才是重点!!!

最后,我想说,前面的这些都是我的经验之谈,没有经过任何的理论分析,未必适合你的应用。尽管我花了很长时间,希望找到一份资料,给出关于ADRC参数整定的权威的理论,但是最后也是徒劳无功。所以,我要给出最重要的一个方法论了。 如果你只想把ADRC在你的实验平台上用一用的话,你完全可以按照我提供的路数来行事!

首先,在Simulink里搭建被控对象的仿真模型;其次,固定三个参数,单纯改变一个参数,观察每个状态量的变化趋势;再次,总结每个参数对系统的影响;最终,你就能找到对于你的系统的参数整定方法啦!

你要相信,虽然我说的是最基本的控制变量法>_

3. 最后的最后,关于实际控制的一点小贴士

如果你是控制电机的话,除了电机本身,电机驱动板的选择对于你的控制精度也是非常非常非常重要的。

在仿真里做得很好,但是实际系统里是有限幅的,这是导致系统非线性的一个重要原因。

传感器的采样频率也是影响控制效果的重要因素,尤其是控制频率比较高时。

仿真还是很有必要的!

adrc算法思想C语言编,关于ADRC算法以及参数整定(调参)的一些心得体会相关推荐

  1. DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文)、CNN优化技术、调参学习实践、CNN经典结构及其演化、案例应用之详细攻略

    DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文).CNN优化技术.调参学习实践.CNN经典结构.案例应用之详细攻略 目录 卷积神经网络算法的简介 0.Biologically Ins ...

  2. adrc过渡过程 c语言,初步认识ADRC与应用

    初步认识ADRC与应用 初步认识ADRC与应用 这是一个目录ADRC的基本原理一.参考资料推荐 二.为什么PID好,以及,为什么PID不够好1.为什么PID好--基于模型的现代控制理论不实用 2.为什 ...

  3. c语言算法6,c语言6函数和算法.ppt

    c语言6函数和算法创新 近半个月目标 学会使用函数进行模块化程序设计 学会调试由多个函数(包含库函数)组成的程序 主要内容 模块化程序设计思想 函数定义和函数调用.函数原型(函数声明) 函数的参数和返 ...

  4. c语言程序设计的常用算法,《C语言程序设计的常用算法.doc

    <C语言程序设计的常用算法 C语言程序设计的常用算法 算法(Algorithm):计算机解题的基本思想方法和步骤.算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要 ...

  5. c语言银行家算法模拟程序,C语言实现 操作系统 银行家算法

    /**************************************************** 银行家算法 算法思想: 1. 在多个进程中,挑选资源需求最小的进程Pmin, 可能存在多类资 ...

  6. 【算法思想:回溯法】回溯算法入门级详解

    回溯法是一种非常重要的算法思想,在大厂面试中频繁出现,所以做了一个笔记,记录了一下. 回溯算法与深度优先遍历 以下是维基百科中「回溯算法」和「深度优先遍历」的定义. 回溯法 采用试错的思想,它尝试分步 ...

  7. c语言写pid算法,用c语言实现的pid算法

    pid算法应该算是所以算法中最稳定最可靠最简单的算法,在库函数中添加这种算法对实际控制的时延有非常大的帮助. 全部资料51hei下载地址:   C语言PID算法.doc PID算法(c语言)(来自老外 ...

  8. c语言程序设计选修让我学到的东西,电子课程设计心得体会

    电子课程设计心得体会 电子课程设计心得体会(一) 本学期实时测量技术实验以电子设计大赛的形式,老师命题,学生可以选择老师的题目也可以自己命题,并且组队操作其他的事情(包括设计总体方案.硬件电路.软件设 ...

  9. c语言成绩存储的算法思想,C语言算法总结,非常精辟

    <C语言算法总结,非常精辟>由会员分享,可在线阅读,更多相关<C语言算法总结,非常精辟(9页珍藏版)>请在人人文库网上搜索. 1.c语言算法摘要2 .牛顿迭代a的平方根[思想摘 ...

最新文章

  1. matlab中ismember_相当于Matlab“ismember”in numpy(Python)?
  2. solaris 10 安装Apache Mysql PHP
  3. bagging算法_集成算法——三个“臭皮匠”级算法优于一个“诸葛亮”级算法
  4. 对归并排序进行c语言编程实现,归并排序及C语言实现
  5. java sendmessage函数_vc中SendMessage自定义消息函数用法实例
  6. Sublime text 2下alignment插件无效的解决办法
  7. matlab中统计工具箱函数名大全
  8. 55个应用html5网站的最好例子
  9. 2.6配置自定义PropertyEditors
  10. 杭电计算机接口实验报告,杭电新闻
  11. html5查看xps文件,c# – 在文档查看器中显示XPS文档
  12. 在做开关电路时,三极管限流电阻该如何选择?
  13. 在R和Python中求峰度和偏度
  14. zz 主要分类方法介绍
  15. 非常详细的范式讲解(1NF/2NF/3NF/BCNF)
  16. 泡泡龙游戏开发系列教程(四)
  17. dell进入u盘启动模式_戴尔Dell笔记本电脑的BIOS怎么设置从U盘启动
  18. 什么是CCNA?(及相关概念)
  19. No.002 关于Python函数返回值的三种情况
  20. 华硕B250主板组装机安装win7及office2010

热门文章

  1. 0521 web开发
  2. JavaScript d3使用指南
  3. CPVC电力管的耐水性怎么样
  4. 第一次有人把5G讲的这么简单明了
  5. 杉岩:小天才手表背后的故事,超融合数据库最佳实践
  6. java中级面试题及答案,java链表面试题
  7. 【愚公系列】2021年12月 Java教学课程 31-继承详解
  8. 数据湖概念辨析以及常见技术通览
  9. 某程序员哀叹:连帮三任女友进大厂,却惨遭分手
  10. 成年人的世界都不容易-看看做到年薪50万的程序员,到底有多累?