5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
标题: PID是什么,一学就会 [打印本页]
作者: yangjinduo 时间: 2019-2-9 19:08
标题: PID是什么,一学就会
本帖最后由 yangjinduo 于 2019-2-9 23:55 编辑
这节课主要介绍了捷联惯导、卡尔曼滤波和PID,其中PID部分,很多网友说讲的最通俗易懂。
如有不足之处还请网友多多指点
关于飞控、不同的厂商在软件和硬件架构上都是有差别的,但是飞控的软件算法都离不开捷联惯导、卡尔曼滤波和PID控制这三种算法。
我们先说捷联惯导,惯导也叫作惯性导航。说到导航我们会想到GPS导航,我们在生活中用的比较多,GPS是通过接收卫星发送的信号计算出自身位置的,但是当GPS设备上方被遮挡后,GPS设备就不能定位了。比如在室内、隧道内、地下等场所,基本收不到GPS信号。还有一种导航方式是不依赖外界信息的,这种导航叫作惯性导航。它在飞行器、车、船、潜航器等设备中都有应用。
那什么是惯性导航,它就是利用载体上的加速度计、陀螺仪这两种惯性元件,去分别测出飞行器的角运动信息和线运动信息,与初始姿态、初始航向、初始位置一起交给计算模块,由计算模块推算出飞机的姿态、速度、航向、位置等导航参数的自主式导航方法。惯性导航系统工作时不依赖外界信息,也不向外界辐射能量,不易受到干扰,是一种自主式导航系统。
惯性导航系统 分为平台式惯性导航和捷联式惯性导航,早期的惯性导航系统都是平台式的,平台式惯导有实体的物理平台,陀螺仪和加速度计置于由陀螺稳定的平台上,该平台跟踪导航坐标系,以实现速度和位置解算,姿态数据直接取自于平台的环架;它的优点是直接模拟导航坐标系,计算比较简单;能隔离载体的角运动,系统精度高。它的缺点是结构复杂,体积大,制作成本高。
还有一种捷联式惯性导航(strap-downinertialnavigation),捷联(strap-down)的英语原义是“捆绑”的意思。因此捷联式惯性导航也就是将惯性测量元件,包括陀螺仪和加速度计,直接装在需要姿态、速度、航向等导航信息的主体上,用计算机把测量信号变换为导航参数,它的优点是没有平台,架构简单,体积小,维护方便,缺点是惯性元件直接装在载体上,环境恶劣,对元件要求较高;坐标变换中计算量大。总体来看,捷联惯导比平台式惯导优势要明显。
在1969年,捷联惯导系统作为"阿波罗"-13号登月飞船的应急备份装置,在其服务舱发生爆炸时将飞船成功地引导到返回地球的轨道上时起到了决定性作用,成为捷联式惯导系统发展中的一个里程碑
卡尔曼滤波算法是卡尔曼等 人在20世纪60年代提出的一种递推滤波算法。它的实质是以最小均方误差为估计的最佳准则,来寻求一套递推估计的算法。这套算法采用信号与噪声的状态空间模型,利用前一时刻地估计值和现时刻的观测值来更新对状态变量的估计,求出现时刻的估计值,在惯性导航系统中有非常广泛的应用。刚才说的噪声指的是计算得出的值与实际值的误差。
那么为什么Kalman滤波会应用到惯性导航系统中呢?这主要是因为惯性导航系统的“纯惯性”传感器不足以达到所需的导航精度,为了补偿导航系统的不足,常常使用其他导航设备来提高导航精度,以减小导航误差。所以利用Kalman滤波算法,可以将来自惯性导航系统与其他导航装置的数据(如惯性导航系统计算的位置对照GPS接收机给出的位置信息)加以混合利用,估计和校正未知的惯性导航系统误差。
卡尔曼滤波算法广泛应用已经超过30年,包括机器人导航,控制, 传感器数据融合甚至军事方面的雷达系统以及DaoDan追踪等等。
比如,在雷达中,人们感兴趣的是跟踪目标,但目标的位置、速度、加速度的测量值往往在任何时候都有噪声。卡尔曼滤波利用目标的动态信息,设法去掉噪声的影响,得到一个关于目标位置最优的估计。这个估计可以是对当前目标位置的估计(滤波),也可以是对于将来位置的估计(预测),也可以是对过去位置的估计(插值或平滑)。
卡尔曼滤波算法是一个非常复杂的计算,我们结合飞行器来简单的讲一下它的计算过程,比如飞行器想知道自己的一个状态,这个状态可以是姿态、速度或位置等信息,我们知道飞行器的传感器是可以得到这些信息的,通过惯性导航的数学模型也可以计算出这些信息,但这两个信息的值与实际值还是有一定的差距的,把这两个值放在若干数学公式里可以得到一个最优值,通过这个最优值与传感器和数学模型的值进行对比,我们可以知道哪个值与最优值比较接近,下次的计算我们应该较多的参考接近最优值的那个值,比如传感器的值最接近最优值,那我们就把传感器的值使用较大的权重,数学模型得到的值加使用较小的权重,所得到的这个权重不是随便给的,也是通过数学公式得也来的。那我下一个时间段再计算的时候这个权重就要起作用了,传感器的值和数学模型的值会带着权重放在数学公式里得到最优值,然后我们再把这个最优值与传感器和数学模型的值进行对比,再看一下哪个值与最优值接近,如果还是传感器的值比较接近,我们还是会通过公式生成一个权重,交给下个时间段的计算使用。通过不断重复这样的计算,我们就可以得到一个相对较优的值,这就是卡尔曼滤波算法的大概过程。
目前,人们通过科学研究获得了诸多具有优异控制效果的算法和理论,但在工程应用领域,基于经典PID的控制算法仍然是最简单、最有效的控制方案。
PID控制器是一种线性控制器,它主要根据给定值和实际输出值构成控制偏差,然后利用偏差给出合理的控制量。
目前主流的几款开源飞控中,无一例外地都是采用PID控制算法来实现无人机的姿态和轨迹控制。
PID里的P是Proportion的首字线,是比例的意思,I是Integral的首字线,是积分的意思,D是Differential的首字母,是微分的意思。
那么PID控制器算法能解决什么问题呢?以多旋翼为例,在没有控制系统的情况下,直接用信号驱动电机带动螺旋桨旋转产生控制力,会出现动态响应太快,或者太慢,或者控制过冲或者不足的现象,多旋翼根本无法顺利完成起飞和悬停动作。为了解决这些问题,就需要在控制系统回路中加入PID控制器算法。在姿态信息和螺旋桨转速之间建立比例、积分和微分的关系,通过调节各个环节的参数大小,使多旋翼系统控制达到动态响应迅速、既不过冲、也不欠缺的现象。
下面我们简单的举个例子让大家了解一下PID的作用,我们先以一个自动驾驶的小车来举例子,为什么用小车呢而不用多旋翼来举例子呢?因为用小车举例,可以看到小车的行进轨迹,根据轨迹我们可以很直观的看到PID对控制的影响,便于理解PID的作用。
我们先讲P,比例控制。现在我们想让这个小车沿着绿线向前走,我们给P设置一个固定的值,这个值可以让离开绿线的小车向绿线的方向行驶,离的越远,方向盘打的角度越大,离的越近,方向盘打的角度越小。橙色的箭头表示小车行进的方向
比如这个小车在这个位置,我们设置了一个中等大小的P值,想要沿着绿线走,在比例控制下路径是这样的,因为小车有一定的速度,到达绿线时因为惯性的原因又向前运动了,然后再根据中等P值向回打方向盘,当到达绿线时,同样因为惯性的原因冲过了头,因为小车越接近绿线,方向盘打的越小,所以小车每经过一次绿线,它的偏差就越来越小,所以随着小车多次的往复运动,就能离绿线越来越近,理论上最终能够行驶在绿线上面。
如果我们把P值设置的比较大,它的路径是这样的,因为方向盘打的角度比较大,所以小车比中等P值的时候较早的到达绿线,但同样因为惯性的原因会多次往返绿线的两侧,也是一次比一次接近绿线,因为它方向盘角度打的比较大,所以会比中等P值往返的次数要多,最终经过多次往返,理论上它会离绿线越来越近,最终到达绿线上方。
如果我们把P值设置的比较小,也就是方向盘打的角度比较小,它的路径是这样的,小车会较晚到达绿线,因为惯性会往返绿线两侧,但是因为方向盘角度小,小车可以在较少的往复次数下接近绿线。
所以我们对比一下设置这三种P值的结果,在小车与绿线相同距离的情况下,P值越大,小车的反应越快,P值越小,小车的反应越慢,所以这三个小车第一次到达绿线的时间是不一样的。虽然P值大能够较快的到达绿线,但是反应比较剧烈,总是因为过快冲过了头。相反P值小的反应比较平缓,但是它反应太慢,我们有时候接受不了。
什么样的P值是合理的呢,就是设置后,小车的反应不是很剧烈,反应时间你也能够接受,那这就是一个相对合理的P值。
那有没有一种办法让它反应再快一点,反应又不那么剧烈呢,那就要用到接下来我们要讲的微分控制了。
我们为了不让这个小车冲过头,我们再给它加一个力,这个力就是D,让这个力来起一个作用,就是让小车越接近绿线的时候,接近绿线的速度越慢,小车越远离绿线的时候,接近绿线的速度相对较快,这个接近绿线的速度不是小车前进的速度,是小车与绿线平行线之间的相对速度。这个D大家可以理解为小车靠近绿线的一个阻力。
假设我们设置了一个相对合理的P值,在P值不变的情况下,微分控制中D值的变化会有怎样的结果。比如我们设置了一个比较合适的D值,微分控制(D)让小车在靠近绿线时,接近绿线的速度比较慢,这样比例控制(P)就可以很轻松的让小车到达绿线上方行驶。
如果D值过大,也就是小车靠近绿线的阻力过大,这样会让小车需要比较长的时间才能到达绿线上方。
如果D值设置的过小,也就是小车靠近绿线的阻力过小,那微分控制(D)就不会对比例控制产生大的影响,所以虽然小车能够较快到达绿线,但小车需要多调整几次,在绿线的两侧往复几次后才能到达绿线上方行驶。
那这样看来比例控制(P)和微分控制(D)的配合,貌似已经很完美了。为什么还要有积分控制(I)呢?
设置合适的P值和D值,可以让小车很好的沿着绿线一直走,但路上不是很平坦,会有些坑坑包包,或者其他的一些干扰,路况不好就会让小车的行进路线发生偏移,比如小车在这里遇到了坑坑包包,它的行进路线 就会变成这样,稍微偏离了绿线一点,因为微分控制(D)让小车离绿线越近时,靠近绿线的速度越慢,比例控制(P)让小车在接近绿线时,方向盘又打的比较小,所以小车要走一段路才回到绿线上面。
有没有办法让它更快回到绿线上面呢,所以我们再给它加一个力,这个力就是I,积分控制。我们让积分控制起这样的作用:如果P和D的调节不是很理想的话,就让I帮他俩一把,向P的方向上加一个力,这样可以让小车更快回到目的路径。
设置了I以后,I会根据误差和误差经历的时间进行积分,然后决定施加给目标方向的力的大小,就能够让小车回到目标轨迹上。
一个合适的I值,可以让小车偏离轨迹后,I可以在合适的时间给P一个合适的力,让小车快速的回到绿线上面;
如果I值过大,积分控制(I)调整的力就会比较大,它在帮P的时候会用力过猛,会让小车冲过绿线,下次帮忙的时候还是用力过猛,P表示很无奈,毕竟I也是好心,经过几次调整后,小车终于回到绿线上面,但我们看小车的轨迹线产生了一定的振荡;
如果I值过小,积分控制(I)调整的力就会比较小,就像有一个手无缚鸡之力的柔弱小鲜肉一样,帮不上太大的忙,所以小车回到正确轨迹的时间就会比较长。
上图中指向左侧的箭头定的是过大不是过人
说完了PID控制对小车的影响,下面我们再说说PID控制对多旋翼的影响。比如这架多旋翼想要作的是保持机身的水平平稳。
我们先从P开始,如果P值设置的过大,哪怕机身有那么一丁点倾斜,飞行器都会用稍大一些的力去调整,结果用力过猛,又继续向回调整,这样飞行器就会频繁的调整自己的水平状态,导至机身产生振动。
上图中指向左侧的箭头定的是过大不是过人
如果P值设置的过小,飞行器的水平调整就会显得力不从心,比如空气中的微风让飞行器发生了倾斜,飞行器向回调整的力比较小,所以需要长一点的时间才能调平,这样让我们觉得它反应有点慢。
上图中指向左侧的箭头定的是过大不是过人
比如我们经过多次测试设置了一个比较合适的P值,可以让飞行器有一个我们能接受的反应时间,但稍有一点过冲,会有一些震荡,接下来再设置D值,让D值消除震荡,如果D值设置过大,会让飞行器恢复平衡时间过长,反应变慢,
上图中指向左侧的箭头定的是过大不是过人
如果设置了一个过小的D值,会导致效果不明显,飞行器还是会有震荡。
上图中指向左侧的箭头定的是过大不是过人
比如我们又设置了一个合适的D值,可以让飞行器反应不是很慢,也不会有明显的震荡。接下来我们再设置一下I值。
这里的I我们可以这么理解,I根据飞行器的反应时间,适当的帮忙,如果飞行器反应慢了,他就会帮一下,能让它的反应快一点。但是如果值设置的过大,这个帮忙可能会用力过猛,导致过冲。
上图中指向左侧的箭头定的是过大不是过人
如果I值设置过小,它的帮忙就没有太大的作用,还是不会让飞行器反应更快。所以设置一个合适的I值需要多次的测试,让它的帮忙起作用,又不会用力过猛。
有些人怕麻烦就不设置I值了,其实也没有太大的影响,只不过离完美还差那么一点。
PID的设置是一个非常复杂的过程,对于一般的使用者来说是非常难的。所以有些厂商也想出了一些办法。
比如3DR的开源飞控APM和PIXHWAK,咱们看它的调参软件中,PID部分有这么多要调的地方,对于一般的用户来说是比较有难度的,所以它加了一个自动调参的功能,就是这个AutoTune[‘ɔ:toʊtən],可以把遥控器上的一个开关设置成自动调参,找一片开阔地让飞行器起飞,然后把遥控器上的自动调参开关打开,飞控就开始自己控制飞行器进行飞行测试,然后根据测试情况自动设置一个比较合适的PID参数。
有些厂商作的就更简单了,直接在调参软件里加了一个感度的配置,这个感度大家可以理解为敏感度 ,数值越大,敏感度越高,不同的轴距都有不同的推荐感度设置。
左面的这个是大疆NAZA飞控的调参软件,调参软件说明书里就有一个不同轴距的推荐感度值,右面的拓攻更简单,直接选择轴距,就能自动设置推荐的感度值。
这些厂商的调参软件里一般都会有姿态感度和基本感度,或者叫稳定感度。姿态感度是指飞行器对遥控指令的敏感程度,基本感度或稳定感度是指飞行器对于外界干扰反应的敏感程度。这样就比PID理解起来要简单的多了。
今天的课程就到这里,希望本节课能够给喜欢无人机的朋友们带来帮助,因本人能力有限,如果大家发现课程中有错误,希望能我留言,我会重新整理更正,后续再进行发布,也欢迎大家在下方留言处留言互动,谢谢大家。
课程来源于我的视频课,课程链接:https://study.163.com/course/courseMain.htm?courseId=1005766009&share=2&shareId=400000000551002
也有所有课件可以下载:
民航无人机驾驶员学习必备课程,课件下载地址:
链接:https://pan.baidu.com/s/1SGt0EFlDGBdq7J9Oz7sXWQ 提取码:xvtq
作者: 师路 时间: 2019-2-9 20:32
写的真好,通俗易懂
作者: litong_874 时间: 2019-2-9 21:07
PID部分还是不怎么合理,要离开三种震荡收敛来讲PID总有偏颇。
作者: busanbusi 时间: 2019-2-9 22:25
2楼占个楼,看情况扯点其他的。
作者: reikasteven 时间: 2019-2-9 22:52
好帖啊。。。。。感觉调了D 就会变缓慢,I 调高就会变快,
作者: juju4107 时间: 2019-2-9 23:22
谢谢,学习了
作者: litong_874 时间: 2019-2-9 23:47
简单理解,微分时间管的是瞬态响应,积分时间管的是累积响应,这个要结合受控对象本身的惯性来调整。
作者: yangjinduo 时间: 2019-2-9 23:48
谢谢您的意见,离开三种震荡收敛来讲PID总有偏颇是什么意思呢。我后期好修改一下。
作者: 在这 时间: 2019-2-11 17:30
已收藏
作者: sdxgy 时间: 2019-2-11 18:54
学习一下
作者: fly100 时间: 2019-2-11 21:19
自动控制原理知识早就交给老师了看了楼主的贴又收货了不少,虽然不玩飞控但是对调节直升机陀螺仪知其所以然了
作者: elva 时间: 2019-2-12 10:19
这个牛逼了
作者: yangjinduo 时间: 2019-2-12 23:32
是的,D可以理解为越到预期位置阻力越大,I就是帮忙的让其尽快到预期位置的力。
作者: 老金 时间: 2019-2-13 07:00
是的,过度的打比方容易让学习的人走偏道路
p是用来纠偏的力度,i用来保证纠偏能够纠到点子上,d用来加快纠偏的速度。
纠不到点子,和来来回族是常见的数值选取不当的后果
就如层主所说,离开振荡来解释pid有失偏颇
作者: youcandy 时间: 2019-2-13 08:47
强帖留名
作者: 行空者 时间: 2019-2-13 11:32
本帖最后由 行空者 于 2019-2-13 12:10 编辑
浦菲笋劳所以我说啊,玩飞机飞得多溜,多厉害不重要,关键是稳当,安全,哈
作者: wise 时间: 2019-2-13 15:27
好帖,学习了
作者: yangjinduo 时间: 2019-2-14 10:09
感谢您的意见,因为最早的想法是想让学员理解PID各自的作用,所以讲解的思路就是P是什么,过大会怎样,过小会怎样,适中是什么样的,接下来调D,过大过小会怎样,适中怎样,最后是I,同样讲了过大过小适中的情况。
在这里能听到不同的意见我很欣慰,只有不同的想法才能碰撞出更好的、适合大家学习的内容,再次感谢。
不知其他模友是怎样的看法,欢迎回贴讨论,根据大家讨论的结果我会改进课程出升级版。
作者: reikasteven 时间: 2019-2-14 18:38
yangjinduo 发表于 2019-2-12 23:32
是的,D可以理解为越到预期位置阻力越大,I就是帮忙的让其尽快到预期位置的力。
我发现,i要调的正好,调过了,好像回位也不行
作者: yangjinduo 时间: 2019-2-14 21:34
是的,调大了就抖了。按P D I的顺序来就行,I到最后调大了再一点点往回调,如果追求完美,这三个值且得调一阵子呢。
作者: 老金 时间: 2019-2-15 05:38
其实用浅显的语言来描述复杂的系统不容易,看得出您是花了不少力气的,应该得到学员的感谢
还有一点要商榷一下,关于d
如果没有记错,如果要用阻力来比喻d的作用,那么d和车偏离中线距离没有关系,但是和车偏离中线的速度有关。前者其实是P的作用,proportional和距离成比例; 而后者,是对距离求导,derivertive, 也就是速度。偏移的速度越快,往回拉的力就越大,而当车快速接近中线时,d又能加大踩刹车,这是d能够“加速”收敛(减小震荡)的原因。
作者: 老金 时间: 2019-2-15 09:38
拼错了,打字手抖不好意思。
作者: yangjinduo 时间: 2019-2-15 09:41
说的很好,谢谢老金!得到这么中肯的意见我很高兴,现在觉得相对复杂的知识还是现场教学比较好,有了互动,才能让学生接收正确的信息,用文字或视频效果稍差,或者需要大费周折才能讲明白。再次感谢!
作者: 行空者 时间: 2019-2-15 22:33
本帖最后由 行空者 于 2019-2-15 22:38 编辑
找几本PLC,单片机,自动控制之类的教科书仔细看下再想吧,有时间就骑个自行车自己体会一下吧,这事情没那么玄,固件默认PID基本都可用的。各种动态现象都是三个数值互相影响的结果,还有当时气候条件等外部因素影响。达到同样效果的控制可以有无数个控制律的组合,这里只是简单的二维直线运动,固定式的PID只是很初级的控制律。
作者: yangjinduo 时间: 2019-2-16 20:46
感谢您的意见
作者: 南极仙翁 时间: 2019-2-16 21:24
好贴。技术金贴。
作者: 行空者 时间: 2019-2-18 09:47
可以认为一个速度对应一个最佳的PID组合,而一个姿态也对应一个最佳的PID组合。实际飞行中的动态现象普遍是:当飞机在不同速度下,对应的舵效都是不同的,而且控制偏舵角在这种PID开环输出下,忽略了翼面空气压缩,附面层涡流,以及复杂流态的影响。在不同的阶段,比如起降的低速阶段,翼面当地攻角比较大的时候,对应一套PID组合控制,在巡航或高速阶段的时候,往往会过冲,或者有震荡的动态现象,反之亦然。对于多旋翼,则是刚体受力分布为主,机械变形比较少,而且各旋翼桨叶的对称度较好,单一的控制马达转速会更容易实现一些。而固定翼或复合翼,考虑的各项因素要多出很多,动态响应更加复杂。事实上,要达到最好的控制效果,应该是引入自适应控制技术,需要控制算法通过高速穷举迭代,得到当时运动趋势下最佳的求解来参与到控制环路中。而相对简单的实现方法是:根据飞行器的飞行包线,划分阶段,预先调好的参数存储起来,在不同的阶段调用出来,这样达到最好的控制效果。
作者: Yanhl 时间: 2019-2-18 13:01
写的非常好,新手学习了。
作者: 泼墨漓江 时间: 2019-2-22 08:46
浅显明了
作者: yangjinduo 时间: 2019-2-22 17:28
谢谢您的认可
作者: lijun215021 时间: 2019-3-14 10:27
这么吊的教程一定要顶起来 看了无数pid的教程和调参视频 这一个pid教程说的清清楚楚 保留下来 以后经常要来温故而知新
作者: 沈淼章 时间: 2019-3-27 22:28
总结:
P是用来纠偏的力度,I用来保证纠偏能到点,D用来加快或者减缓P纠偏的速度。
理解:
P是比例,P和偏差度成比例,以小车偏离中线为例,P和小车离中线的距离成比例;
D是微分,D是对小车与中线的距离求导,就是速度,偏移的速度越大,往回拉的力越大,越接近中线时,偏移速度变小,往回拉的力也变小,最后“收敛”在中线附近;
I是积分,在每次越过中线前都进行积分,即计算出这个时间段内的路程(即偏差),用于下次消除这个偏差,I的大小决定每次消除的快慢,在重复消除之后,将误差减小为0。
作者: yangjinduo 时间: 2019-3-28 23:41
总结的太棒了,兄DEI
作者: SQ阿兹猫 时间: 2019-6-15 17:15
太专业了,厉害
作者: wise 时间: 2020-9-8 15:08
写的非常棒,通俗易懂
作者: robot大白 时间: 2021-5-5 22:16
学习了,太有营养了,慢慢消化吧!
作者: cclsy13 时间: 2021-10-31 08:45
厉害
作者: tcjsjxx 时间: 2021-11-2 16:12
看来大家都懂了,我来提个问题吧。
谁来解释下什么是PID的静差,为什么会有静差?并且举例说明下,好么?
作者: supercl 时间: 2022-3-10 15:05
哎呀 感谢答主 现在分享的教材被删了 能再传一下吗 谢谢啦
作者: 斯普鲁恩斯 时间: 2022-3-11 07:48
好文章
作者: yangjinduo 时间: 2022-8-13 11:34
作者: 斩薪 时间: 2022-9-8 09:52
顶
作者: robot大白 时间: 2022-9-10 21:54
写的太棒了,通俗易懂啊,但是还需要消化吸收,然后在实践。
欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://5imx.com./) |
Powered by Discuz! X3.3 |