知行合一ArduPilot | ArduPilot控制器框架简述与PID参数整定

Posted 阿木实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了知行合一ArduPilot | ArduPilot控制器框架简述与PID参数整定相关的知识,希望对你有一定的参考价值。

本文篇幅较长,建议阅读时间:10分钟

本文建议阅读人群:

(1)对于自动控制原理知之甚少;

(2)有一些自动控制原理的理论知识,但是还没有自己设计过控制器并真正应用于工程项目中;

(3)能设计出一些简单的控制器,但是对于类似无人机这种复杂的控制系统没有什么概念;

(4)对ArduPliot飞控有一些了解,但是不知道如何调整合适的PID参数。

概述:

(1)什么是PID控制器;

(2)ArduPilot控制器框架及其关键组件;

(3)如何给多旋翼无人机(ArduPilot)调整PID参数(方法论)以及需要注意的关键点。

PID控制器

不管是否学过自动控制原理,提起控制,很多人的脑海中可能都会闪现出“PID”。但PID控制器只是诸多控制器中的一种,还有其他非常多的控制器,比如:滑模控制、L1自适应控制、模型预测控制(MPC)、LQR控制、ADRC控制、神经网络控制等。

在这里我们首先抛出两个问题:

第一:为什么PID控制器这么深入人心?

笔者认为最重要的原因在于:

①PID控制器实现起来简单且有效(尽管这不是最优控制),以至于在民用或工业控制领域,PID控制器及其变种可以满足大多数应用场景,这是PID控制器普及程度如此广泛的一个重要因素之一。

② PID控制器的可塑性很强,结合其他先进的控制算法,也可设计出效果优于传统PID控制算法的控制器。从近些年来大火的无人机、移动机器人、机械臂、四足机器人等领域开源的比较知名的项目,比如:ArduPilot、PX4、Cheetah等,控制器都是基于PID控制器框架进行设计的,这些都是经过长期的工程检验的项目。

第二:自适应控制算法会比PID控制器的控制效果好吗?

答案是否定的。从现有的控制框架来看,智能、先进的控制算法,很多都需要获取被控对象的系统模型,在工程应用中,这需要花费非常大的代价,并且最终的效果也不一定令人满意。

接下来咱们进入正题。

1、什么是PID控制器?

https://zh.wikipedia.org/wiki/PID%E6%8E%A7%E5%88%B6%E5%99%A8

注意:访问wiki链接需要科学上网)

1.1、 PID控制器简述

PID控制器(比例-积分-微分控制器),由比例单元(Proportional)、积分单元(Integral)和微分单元(Derivative)组成。可以通过调整这三个单元的增益Kp、Ki、Kd来调定其特性。

若定义为控制输出,PID算法可以用下式表示:

其中

Kp:比例增益,是调适参数

Ki :积分增益,是调适参数

Kd:微分增益,也是调适参数

e :误差=设定值(SP)-测量值(PV)(注:以ArduPilot自稳模式-Stabilize为例,在我们控制俯仰角度时,遥控器的俯仰通道会映射为无人机的目标角度,这个目标角度就是设定值,而通过状态估计器EKF得到的俯仰角度就是测量值。)

t :当前时间

:积分变数,数值从0到当前时间t

PID控制器的方块图如下图所示:

用更专业的话来讲,PID控制器可以视为是频域系统的滤波器。在计算控制器最终是否会达到稳定结果时,此性质很有用。如果数值挑选不当,控制系统的输入值会反复振荡,这将导致系统可能永远无法达到预设值。

PID控制器的一般转移函数是:

其中,是一个取决于系统带宽的常数。

1.2、比例控件(P)

比例控制考虑当前误差,误差值和一个正值的常数Kp(表示比例)相乘。Kp只是在控制器的输出和系统的误差成比例的时候成立。

若比例增益大,在相同误差量下,会有较大的输出;但若比例增益太大,会使系统不稳定。相反,若比例增益小,在相同误差量下,其输出较小,因此控制器会比较不敏感;若比例增益太小,当有干扰出现时,其控制信号可能不够大,无法修正干扰的影响。

说明:比例控制(P)是PID控制器中最重要的控制项。我们在实际应用中可单独设计一个P控制器、PI控制器、PD控制器或者PID控制器。

以四旋翼无人机为例,假设悬停时,无人机的姿态在范围内波动,这时候遥控器给一个控制指令,期望无人机俯仰角度向前达到。无人机从的过程中:

(1)过小的P值,会使得无人机的姿态变化比较缓慢、反应迟钝,甚至最终俯仰角度可能只有,极小的P值可能导致控制器失效。

(2)过大的P值,会使得无人机俯仰角度快速到达)附近,并且超过(超调)后再回调,也可能会在附近来回振荡,极大的P值会使得无人机超调特别严重从而导致无人机侧翻。

(3)只用单纯的比例控制(P),不管我们如何调整P值,无人机无论如何都没法准确的达到。始终会存在一个误差(“稳态误差”),这个稳态误差只有引入积分项(积分控制)才能消除。

1.3、积分控件(I)

积分控制考虑过去误差,将误差值过去一段时间和(误差和)乘以一个正值的常数KiKi从过去的平均误差值来找到系统的输出结果和预定值的平均误差。一个简单的比例系统会震荡,会在预定值的附近来回变化,因为系统无法消除多余的纠正。通过加上负的平均误差值,平均系统误差值就会渐渐减少。所以,最终这个PID回路系统会在设定值稳定下来。

积分控制会加速系统趋近设定值的过程,并且消除纯比例控制器会出现的稳态误差(静差)。积分增益越大,趋近设定值的速度越快,不过因为积分控制会累计过去所有的误差,可能也会出现超调的情形。

1.4、微分控件(D)

微分控制考虑将来误差,计算误差的一阶导,并和一个正值的常数Kd相乘。这个导数的控制会对系统的改变作出反应。导数的结果越大,那么控制系统就对输出结果作出更快速的反应。这个Kd参数也是PID被称为可预测的控制器的原因。

说明:如何理解微分控制可以作为预测项?假设我们做一个类比,误差类比为位置,那微分项类比为速度。速度变化的频率总是快于位置的变化频率,如下图所示为无人机悬停时位置和速度曲线。(绿色曲线-位;红色曲线-速度)

最后,我们来通过一幅动图来理解通过调整不同的P、I和D值,是如何影响控制器的。

二、ArduPilot控制器框架

上节所述的是课本上的PID控制器,结构简单易于理解,但是实际工程应用中被控系统可能是非常复杂的,比如对于无人机这种高阶、复杂的控制系统,简单的PID无法达到控制需求。因此,就需要对PID控制器进行改进,在无人机系统中的PID的控制器设计中,有一个常用并及其有效的方法就是:设计串级PID。串级PID内环一般选择变化速度较快的量,利用串级PID控制,可以增加控制器的工作频率,并降低其时间常数。例如:对于ArduPilot中的高度方向位置控制。

(假设初速度为0)

设计三级串联的PID控制器,分别就可设计位置环、速度环和加速度环。而变换速度最快的加速度环为最内环,速度环为中间环,位置环为最外环。

ArduPilot控制器可分为两大块:Position Controller(位置控制器)和Attitude Controller(姿态控制器)。

2.1、位置控制器(Position Controller)

上图是ArduPilot位置控制器(Position Controller)的框图,采用串级PID的设计框架,通过导航层计算得到目标位置,作为位置控制器的输入。对ArduPilot位置控制器做以下几点说明:

(1)水平位置控制器和垂直位置控制器是分离的,并且垂直方向位置控制器多了一环加速度控制器。

(2)每个控制器都引入了前馈控制,前馈控制是一个开环控制,引入前馈控制的目的是提高系统的响应频率。

(3)不管是位置控制器,还是姿态控制,都引入了开方控制器(Square Root Controller),开方控制器的作用是:让控制器的目标值在一个合理的范围内(后面会有专门的文章来分析开方控制器)。

2.2、姿态控制器(Attitude Controller)

姿态控制器同样采用的是串级PID,外环为角度控制,内环为角速率控制,可以看出不管是位置控制器还是姿态控制器,都有及其相似的控制框架:

(1)都使用了串级PID,并且选择变化量快的量为内环控制;

(2)都引入了开环控制和开方控制。

(3)都采用了控制量分离的方式设计控制器,如:水平控制器-垂直控制器分离和倾-转分离。

ArduPilot位置控制器和姿态控制器可调参数如下图所示(红色框标注的为姿态控制器可调参数、蓝色框标注的为位置控制器可调参数):

总结:无人机系统中,控制器只是其中一个环节,影响无人机飞行性能的因素很多,其中最为重要的就是状态估计器和控制器。我们可以看到,控制器的大多数反馈量都是从状态估计器得来的,状态估计器性能是影响控制器性能的一个必要条件,即:只有状态估计器性能好了才能设计出一个好的控制器,否则,控制器设计得再牛X都没有用。

三、ArduPilot控制器调试方法(多旋翼无人机)

1、确认初始参数

(1)MOT_THST_EXPO:根据下图曲线根据桨叶尺寸设置此参数值,比如:5寸桨(0.55)、10寸桨(0.65)、20寸桨(0.75)。

(2)INS_GYRO_FILTER :5寸桨(80HZ)、10寸桨(40HZ)、20寸桨(20HZ)。

(3)ATC_ACCEL_P_MAX /ATC_ACCEL_R_MAX:10寸桨(110000)、20寸桨(50000)、30寸桨(20000)

(4)ATC_ACCEL_Y_MAX : 10寸桨(27000)、 20寸桨(18000)、30寸桨(9000) 。

(5)ACRO_YAW_P : 0.5 x ATC_ACCEL_Y_MAX / 4500

(6)ATC_RAT_PIT_FLTD : INS_GYRO_FILTER / 2

(7)ATC_RAT_PIT_FLTT : INS_GYRO_FILTER / 2

(8)ATC_RAT_RLL_FLTD : INS_GYRO_FILTER / 2

(9)ATC_RAT_RLL_FLTT : INS_GYRO_FILTER / 2

(10)ATC_RAT_YAW_FLTE : 2

(11)ATC_RAT_YAW_FLTT : INS_GYRO_FILTER / 2

2、确认位置控制器和姿态控制器默认参数

位置控制器和姿态控制器的默认参数如下图所示(红色框标注的为姿态控制器可调参数、蓝色框标注的为位置控制器可调参数):

对于普通用户(不追极致性能的用户)可完全不动位置控制器的所有参数,默认即可。对于初次飞行,姿态控制器参数也可直接使用默认参数飞行即可。

3、调参(主要针对整机重量在800g-30kg的多旋翼无人机)

常规机架(机架类型非异形结构),在无人机动力搭配合理的情况下(动力不存在极大冗余或者不过载),使用自稳模式(Stabilize)或者定高模式(Althold)默认参数起飞,在无风或者微风条件下,无人机姿态能保持基本稳定,假如出现姿态异常的抖动80%以上都跟控制器参数无关。其中,影响无人机姿态和位置最大的两个因素就是:机械振动和状态估计器。后面会有文章分析机械振动和状态估计器。

假如排除机械振动和状态估计器引起的问题之后,无人机姿态还是出现振荡,那可以减小角速率环的P值和D值,I值设置成和P值相等(每次减小的值可为10%-20%),直到振荡消失,要是P、I、D值一直减小,飞机姿态控制效果很弱且振荡还没消失,那怎么调整PID参数都是没有效果的。

假如都无类似上述问题,那么就可以依照下列步骤对角速率换控制器进行调参:(先调节横滚和俯仰,再调节偏航)。

(1)每次增加30%左右的D值,直到出现振荡的现象;

(2)每次减小10%左右的D值,直到振荡现象消失;

(3)再把D值减小25%。

(4)每次增加30%左右的P值,直到出现振荡的现象;(每次调整P值时,把I值设置成跟P值一样

(5)每次减小10%左右的P值,直到振荡现象消失;

(6)再把P值减小25%。

接下来就依照上述步骤,自己上手调试PID参数吧。实践才是检验真理的唯一标准

总结:控制器对无人机来说,只是其中的一个关键算法,要想设计一个稳定飞行的无人机,是需要克服很多难点的。当在调整PID参数的过程中,不管怎么调试PID参数,无人机飞行性能都没有特别大的改善,那就说明还有其他更关键的因素在影响无人机的飞行性能。

阿木实验室致力于为机器人研发提供开源软硬件工具和课程服务,让研发更高效!

公众号:阿木实验室 ( 领取免费资料包)

官方淘宝店:阿木实验室(可购买硬件配件)

硬件咨询:硬件咨询:danqiu199506或yanyue199506(欢迎洽谈合作)

课程咨询:jiayue199506 (免费领取机器人工程师学习计划)

- End -

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。 阿木实验室致力于为机器人研发提供开源软硬件工具和课程服务,让研发更高效!

以上是关于知行合一ArduPilot | ArduPilot控制器框架简述与PID参数整定的主要内容,如果未能解决你的问题,请参考以下文章

基于ArduPilot的旋翼式无人机飞行器开发系列(五,ArduPilot开源代码下载,编译,调试及烧录)

ArduPilot简介

基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建

# ardupilot_gazebo仿真

ArduPilot开发指南目录

ArduPilot开发指南目录