工程角度如何考虑ADRC控制算法在无人机的应用

摘自:https://mp.weixin.qq.com/s/06WkKwl6X3uJ7o9zDAifgw

工程角度如何考虑ADRC控制算法在无人机的应用

原创 across超越者 across说 4月29日

本文以ADRC控制算法为例,介绍一下在无人机的控制算法开发中是如何使用的。

 

现状:

目前为止,无论是开源飞控还是飞控厂商,基本上还是以PID控制算法为主,针对无人机的各个控制回路特性,在此基础上增加一下控制策略。比如GPS模式下,如何控制飞行器稳定的刹车,并停留在原点等?因此底层的核心还是PID算法。而控制器的性能,又很大程度上取决于状态估计算法的数据,而这一点恰恰是目前飞控算法的难点所在,也是主要工作。所以基本上飞控算法还是以调节状态估计算法为主。而控制算法这块,PID算法的性能已经基本满足了需求。

 

为什么要换ADRC?

不得不说,ADRC在无人机领域的热度很高,据各种小道消息,都宣称其算法性能优异,远超PID。而笔者对此也一直持保留意见,曾经也试过各种先进控制算法,如LQG、滑模等,效果也并非宣称的那样具有明显的优势,不能否认的是先进的控制算法如果根据其特点,找到合适的控制回路应用,效果还是可以的。

至此,笔者也打算尝试一下,对比一下ADRC是否真的这么神奇。正好,做一个研究的记录,从工程应用的角度,将自己的研究方法与心得与读者分享一下。这里,不做ADRC算法的理论推导与稳定性分析。至于原因?别问,问就是不会。

 

ADRC优势?

既然要换ADRC算法,那首先就得要知道这个控制算法有什么优点?能解决什么样的问题?

韩京清教授的论文首先描述了PID控制算法的缺点

总结起来就是:

  • 如果是一个阶跃响应,PID算法的误差计算会有一个很大的输出;

  • PID三项是一个线性的组合;

  • 积分虽然可以解决稳态误差,但是也会带来系统的不稳定因素。如果系统没有干扰,积分参数不合适的话,会导致超调、积分饱和等问题。而且积分的抗干扰主要体现在低频,对中高频干扰作用不大。

 

所以ADRC的解决办法就是:

  • 安排一个过渡过程,将阶跃变化变得柔和;

  • 设计非线性控制率;

  • 设计扩张状态观测器ESO,估计反馈数据和干扰;

 

ADRC原理?

作为算法应用者,对算法本身的推导不会不要紧,但是必须要定性的了解原理是什么,这样才能正确的应用以及参数的调试。

工程角度如何考虑ADRC控制算法在无人机的应用

图中标注的就是以上提到的ADRC的组成部分:

  • 跟踪微分器TD;

  • 非线性状态误差反馈控制率NLSEF;

  • 扩张状态观测器ESO;

TD主要安排一个柔和的目标值输入,这样避免了PID算法快速响应与超调的矛盾。PID中,要想响应快速,必须增大P项,而增大到一定程度,又会有超调;

NLSEF的话,主要是解决一个“小误差大增益,大增益小误差”的问题,比如开源飞控ardupilot中采用的sqrt控制器就是一个P控制的变型;

ESO的作用是:根据系统的输入和输出,重新估计出控制器的反馈,同时,增加了一个状态量,系统干扰(将系统模型内部的干扰和外界的随机干扰统一认为是一个总扰动),估计出总干扰后,在控制输入部分进行抵消,这样就相当于去掉了系统的扰动。ESO中的干扰估计是ADRC的一个关键点,有了干扰后,进行抵消,即所谓的自抗扰控制

 

ADRC公式?

前面已经讲过,本文不注重公式的推导,实际在工程应用的时候,这个也不是一个必须工作,可以参考现有的公式进行编程即可。

工程角度如何考虑ADRC控制算法在无人机的应用

工程角度如何考虑ADRC控制算法在无人机的应用

工程角度如何考虑ADRC控制算法在无人机的应用

 

如何使用?

无人机的控制器回路众多,角速度、角度、速度、位置是最基本的,另外,如果是控制欧拉角,还会区分出三个轴向,所以ADRC适合用在哪?是需要考虑的

ADRC的最主要特点就是抗扰动,那显然,对于姿态控制和高度控制回路,个人觉得是比较针对的。姿态控制是水平控制的基础,如外界的风对飞行器的干扰等,所以姿态如果抗扰动,对上层的位置回路也会有很大帮助。同理,高度回路,任务载荷的变化也是需要考虑的。

另外,以上的公式是针对一个二阶系统,而姿态控制中的角速度回路,可以看做是一个二阶系统。综上考虑,我们首先在角速度回路进行ADRC的测试。

 

 

仿真调试

相信以上的公式已经可以让一部分人绝望了,ADRC的参数太多,而且互相之间影响较大,这个即使在飞控中写好了代码,实际又该如何调试?

答案就是仿真

作为算法工程师,仿真是必备步骤,尤其是一个新的算法开发过程。

仿真的好处就是,可以帮我们验证编写的算法是否有bug,同时,能协助我们确定参数的量级以及大概范围,至于参数的准确程度取决于模型的准确度。实际一般会有所差别,因此我们不追求绝对的最优参数,最优的参数可以在真机上调试。

工程角度如何考虑ADRC控制算法在无人机的应用

图中所示就是搭建的角速度环的ADRC控制仿真,图中给了一个1.5rad/s的角速度目标,结果表明基本参数都在合理范围。

 

调参的时候,可以分开考虑,比如这里ADRC有3个部分,所以我们可以单独分别进行参数的调试。

比如单独测试TD:

工程角度如何考虑ADRC控制算法在无人机的应用

比如这里,我将目标的输入经过TD后,需要约0.8s的跟踪,具体可以调节TD的参数,TD调好以后,就不再考虑这个参数,而专心调节后续模块的参数,以上只是一个分开调试的举例说明。

 

调参方法

其实任何算法,只要有了仿真,参数的调试就可以很方便了。比如这里,首先你要原理上大概知道每个参数是干嘛的,大概调节参数会有什么样的反应;

如果理论知识不够,也没关系,可以在仿真里不断的进行试验,总结规律。比如在调节ESO的时候,带宽的大小对结果有什么影响呢?只需要其他参数固定,通过调节带宽,看下最终结果的变化,就能总结出规律。

 

笔者这里给出大概的经验:

TD的参数比较好判断,这里不叙述了。而ESO的beta0、beta1、beta2参数与观测器的带宽有关,所以只需调节带宽,还有一个就是补偿系数b,这两个参数比较重要

当你发现观测的结果,比如角速度与实际传感器测量的角速度相比,噪声很大,则说明观测器的带宽设置的太大了,而如果数据有一些超调,则说明设置的太小了;

补偿系数b的话,直接感受是控制的响应,因为b越大,则控制量就小了,系统响应就会变慢,相反,如果想提高响应,就需要减小b。

所以,经过调试,你会发现其实只需改变极少参数即可。

 

 

飞行测试

在飞行测试前,还需进行嵌入式代码的编写,当然,这部分工作目前也可以由matlab自动生成。不过,笔者作为一个老派选手,还是习惯了自己编写。

编程完成后,就需要进行一些调试检查。比如看一下控制器的输出是否在合理范围内等等

 

结论

算法能正常运行后,就需要通过实际的飞行数据和飞行现象来判定是否具有优势,也就是完成了这么多工作以后,总要得出自己的实验结论。

得到结论的方法:

比如ADRC,可以看一下角度的跟踪响应,与PID进行对比,尤其注意的是用性能调好的PID对比,即相同的响应下,哪个更稳定,没有超调。很多人的对比没有注意同等条件,用一个调的不好的PID对比,自然结论也是不科学的。

还可以测试一下抗干扰的能力,比如突然动一下飞机,或是带个重量变化的载荷等。

这里笔者不叙述自己的结论了,读者可以自己试验。重点还是一句话,绝知此事要躬行,对网上的各种结论性说法都不要抱着深信不疑的态度,有条件的话,还是自己测试,自己得出结果。包括笔者的文章,成文较早的初期也有很多理解不到位的地方,其实是有问题的。

 

以上就是有关ADRC的应用全过程,从提出问题,到选用控制算法,到如何应用以及参数调试等。本文可能并没给出一些结论性说明,主要是有关ADRC的相关文章也是比较多,读者可以自行查阅资料,另外本人比较倾向于提供方法论,直接给结论其实对每个人的成长帮助不大,很多人因为有参考,就没有深入思考,在繁杂的资料面前,往往忽略了最应该掌握的核心问题,在算法的调参上也是不得法门,浪费了精力。今年工作室计划会开设一个控制算法专题课程,还是教授如何从工程角度应用控制理论,包括控制理论的基础知识,LQG、MPC、ADRC等控制算法,届时会详细的叙述整个开发过程,开放相关的源码。

 


across说:一个有趣有用的公众号,分享笔者在无人机、无人驾驶、机器人等领域的技术开发心得与见解。扫描下方二维码,即可关注本公众号。

工程角度如何考虑ADRC控制算法在无人机的应用