本文篇幅较长,建议阅读时间: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参数整定相关推荐

  1. matlab求系统根轨迹代码_根轨迹法、PID参数整定和matlab指令计算

    收获 (1)理解根轨迹的概念及其在控制系统设计中的作用: (2)手绘根轨迹草图,以及如何使用极端及绘制根轨迹: (3)熟悉在反馈控制系统中应用广泛的关键部件:PID控制器: (4)理解根轨迹在参数设计 ...

  2. 我的四轴专用PID参数整定方法及原理

    给四轴调了好久的PID,总算是调好了,现分享PID参数整定的心得给大家,还请大家喷的时候手下留情. 首先说明一下,这篇文章的主旨并不是直接教你怎么调,而是告诉你这么调有什么道理,还要告诉大家为什么'只 ...

  3. 一个实例说明PID 参数整定

    引言:PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解.     1.比例控制 ...

  4. 机器人控制——PID参数整定

    (1)首先选择一个合适的并且尽量短的采样时间让系统工作: (2)首先加入比例环节,调节比例系数,直到系统的输出出现临界振荡: (3)若单独的比例环节不能满足设计要求,则此时加入积分环节,调整好的比例系 ...

  5. 学习制作平衡小车:(四)PID学习、位置PID参数整定以及匿名上位机显示

    一.PID学习 PID的知识网上有很多教学讲解的非常清楚,可以再参考学习[平衡小车之家]的视频教程. 二.位置PID学习 位置PID控制公式为:Pwm=Kp*e(K)+Ki*∑e(K)+Kd[e(K) ...

  6. 基于遗传算法的PID参数整定研究(三)

    基于遗传算法的PID参数整定研究 在获得对象模型的基础上设计PID参数时常用的原理,经典的有经验试凑法.临界比例度法.极点配置原理.零极点相消原理.幅相裕度法等:现代的则往往借助于计算机,利用最优化方 ...

  7. 【控制理论】——控制系统分类PID算法简介PID参数整定PID上位机通信协议

    目录 ​ 前言 一.PID算法 1.控制系统分类&参数&信号 2.PID算法简介 二.PID参数整定 三.PID上位机通信协议 1.数据帧&协议调试 2.协议代码实现 拓展: ...

  8. 基于入门级粒子群算法的PID参数整定(MATLAB2016b-simulink)(超详细01)

    PID算法作为工业或日常生活中常用的控制算法,想必大家都不陌生,依靠误差反馈来消除误差,关于PID的原理部分相比看这篇博客的同学应该都十分清楚,有不清楚的同学可以百度或知网搜索.PID算法的应用程度很 ...

  9. 我的四轴专用PID参数整定方法及原理---超长文慎入(转)

    给四轴调了好久的PID,总算是调好了,现分享PID参数整定的心得给大家,还请大家喷的时候手下留情. 首先说明一下,这篇文章的主旨并不是直接教你怎么调,而是告诉你这么调有什么道理,还要告诉大家为什么'只 ...

最新文章

  1. 怎么做 慢充 话费_警惕!冒充亲友骗充话费卷土重来
  2. 24张GIF图,让你秒懂非标自动化机构的原理
  3. github 搜索_因为这个工具,我在 GitHub 搜索源码的时间缩短了 50%!
  4. HTML 文本格式化标签
  5. 使用调试的方式搞清楚SAP UI5应用标题的更改方式
  6. Unity3d烘焙常见黑斑解决方法(适用5.x、2017、2018、2019版)
  7. 记录:网络通信协议中的TCP/IP与UDP
  8. java swt 刷新,java – org.eclipse.swt.SWTException:从表刷新中“处理小部件”
  9. vue +element 导出多级表头(标题)
  10. 【EMNLP2020】“自言自语”来实现无监督常识问答
  11. Unity3D开发资料
  12. Windows XP 系统中内置的AT命令
  13. 输出三角形字符阵列图形(C语言)
  14. macd柱体和汇价的背离
  15. 法国电子与计算机信息工程学校排名,法国工程学院的十大排名情况
  16. 不把鸡蛋放在一个篮子里面
  17. 2022爱分析・智慧园区厂商全景报告 | 爱分析报告
  18. Halcon学习---图像采集助手
  19. 华硕B250M+I5-7500黑苹果EFI引导文件
  20. 青云QingCloud 在不同场景化中的云计算应用

热门文章

  1. 我的世界java版钻石剑附魔_我的世界钻石剑怎么附魔 钻石剑附魔100级指令
  2. 2021 编程-Python编码与数值计算-面向科学家及工程师指南
  3. fatal error C1001: INTERNAL COMPILER ERROR(compiler file 'msc1.cpp', line 1786)解决方法
  4. 关于Blender安装显示User installations are disabled via policy on the machine. 问题解决
  5. 数据库大量数据操作中事务优化方案
  6. 【2023】浙江大学计算机考研信息汇总
  7. deepin更新失败_deepin V20 20200826升级失败
  8. vivo手机系统android9,可能是最安全的安卓系统了,vivo Funtouch OS 9带来不一样
  9. Asynchronous FIFO with gray code(异步FIFO verilog设计理念)
  10. 拉格朗日乘数和KTT条件