文档库 最新最全的文档下载
当前位置:文档库 › APM 之PID参数调整详解

APM 之PID参数调整详解

APM 之PID参数调整详解
APM 之PID参数调整详解

先来了解一下P项、I项和D项的基本内容。这里只用通俗语言简单解释,给出一些简单实用的调整方法。有需要深入研究的用户,请自行查阅相关资料。

P项相当于一个变化率,数值越大,变化越快。假设“俯仰到升降通道”的P值为60时,机头从上抬20o到变回水平位置,需要5秒钟时间,那么P值为30时,这个时间就大于5秒(比如10秒),P值为120时,这个时间就小于5秒(比如2.5秒)。

D项相当于一个“阻尼器”,数值越大,阻尼越大,控制越“硬”。如果飞机在水平直飞时,在横滚方向上老是振荡,那么可以调小“副翼通道”的D值,如果飞机在横滚方向上的增稳效果不好(即偏离水平位置后很难再回复到原来状态),那么可以调大该D值。

I项相当于一个“加分器”,使控制量更贴近目标量,但也有可能“加过头”了。例如:如果要使飞机从100米爬升到200米,而飞机只爬到199米就不再爬升,那么,此时需要增大I值;但如果飞机爬到201米才停下来,那么,此时应该减小I值。

下面简单描述一下在试飞调试阶段进行PID参数调整的步骤。

第一步:规划并上传一个矩形航线。高度不要太高,比如50米,这样便于肉眼观察高度变化。第一个航点和最后一个航点距离稍微近点,相邻航点间距离为300米~400米为宜。让飞机在视野范围内压线飞行。

第二步:切入自动模式,让飞机沿着这个航线飞行。

第三步:看增稳控制效果。

先使用默认参数。副翼通道上:P=95,I=5,D=8。俯仰到升降通道:P=95,I=3,D=8。注意到各项目上类似于“P/128”的字样,其中“P”指P项,“128”是可以输入的最大值。此外,每个项目上能填入的最小数值为零。

横滚和俯仰上的调整方法类似,此处只讲横滚。

如果飞机在横滚方向上左右振荡,那么同时调小P值和D值,I值一般固定不动。

如果飞机在横滚方向上的增稳效果不好,那么同时调大P值和D值,I值一般固定不动。

第四步:试着改变目标高度,看定高效果。

如果飞机爬升或俯冲速度太慢,就增大“高度到俯仰角”的P值,反之减小P值。如果在爬升或俯冲过程中,机头振荡得厉害,就减小“高度到俯仰角”的D值。最后,如果飞机无法爬升到预设高度,就增大“高度到俯仰角”的I值,相反减小I值。

★在这里,调大P值,一般是把初始俯仰角调大,调小P值,一般是把初始俯仰角调小。参考前文关于位置控制的解释,就能理解这里的意思。如果不能理解,就不要深究。

第五步:看飞机在到达航点时的转弯效果。

如果转弯速度太慢,就增到“方向舵通道”的P值,反之减小P值。如果转弯时机头来回振荡,就减小D值,如果转弯时机头上没有阻尼的感觉,就增大D值。

★在这里,调大P值,一般是把初始倾斜角调大,调小P值,一般是把初始倾斜角调小。参考前文关于位置控制的解释,就能理解这里的意思。如果不能理解,就不要深究。

第六步:看飞机的压线效果。

如果飞机切入航线时的速度太慢,就增大“偏侧距”的P值,反之减小P值。如果飞机在航线上左右扭动,就减小“偏侧距”的D值,而如果没有阻尼的感觉,就增大D值。

★在这里,调大P值,一般是把初始夹角调大,调小P值,一般是把初始夹角调小。参考前文关于位置控制的解释,就能理解这里的意思。如果不能理解,就不要深究。

super_mice的专栏

[原]四旋翼飞行器Quadrotor飞控之 PID调节(参考APM程序)

2014-8-8阅读10860评论43

做四轴也有一段时间了,最近一直在做PID方面的工作。现在四轴基本可以实现室内比较稳定的飞行,操控手感也可以接受。稍后上试飞视频。在此把一些PID方面的经验总结总结和大家分享一下。

首先介绍一下大概的硬件组成:

MCU:Freescale MK60D

传感器(IMU):GY-86模块(MPU6050 + HMC5883L + MS5611)

433MHz数据传输模块

DC-DC可调式开关稳压模块

遥控设备:JR XG7发射机+ JR 611B接收机

机架:普通红白f450机架

电机:朗宇2212kv880高效能电机(黑色)

电调:天行者40A

桨:仿APC1047

电池:DUPU 2200mah 25c

电路很简单用洞洞板搭的简易测试电路。

软件方面最主要的是姿态解算,最终用的是MPU6050的DMP(Digital Motion Process)输出,遥控器控制的目标姿态也是四元数表示的。为了有较好的线性度,将两者的姿态差转换为欧拉角后再进行PID的控制。

下面进入正题。PID算法很大程度上参考了APM(国外成熟开源飞控项目,官网点击打开链接)的控制算法。它是采用的角度P和角速度PID的双闭环PID算法。角度的误差被作为期望输入到角速度控制器中。双闭环PID相比传统的单环PID来说性能有了极大的提升,笔者也曾经调试过传统的PID控制算法,即便参数经过了精心调整和双环控制算法相比在控制效果上的差距依旧很大。无论是悬停的稳定性,打舵时的快速跟随性和回正时的快速性上都是后者的效果明显优于前者。

大概介绍一下APM算法的大概流程。这个PID控制流程图可以在APM官网找到。笔者参考的是APM3.1.0的代码和图上2.9版本的有一点点出入,不影响大局(控制频率100hz)。

横滚(Roll)和俯仰(Pitch)的控制算法是一样的,控制参数也比较接近。首先得到轴姿态的角度差(angle error),将这个值乘以角度系数p后限幅(限幅必须有,否则剧烈打舵时容易引发震荡)作为角速度控制器期望值(target_rate)。target_rate与陀螺仪得到的当前角速度作差,得到角速度误差(rate_error)乘以kp得到P。在I值小于限幅值(这个值大概在5%油门)或者rate_error与i值异号时将rate_error累加到I中。前后两次rate_error的差作为D项,值得注意的是加需要入20hz(也可以采用其它合适频率)滤波,以避免震荡。将P,I,D三者相加并限幅(50%油门)得到最终PID输出。偏航(Yaw)的控制算法和前两者略有不同,是将打舵量和角度误差的和作为角速度内环的期望值,这样可以获得更好的动态响应。角速度内环和横滚与俯仰的控制方法一致,参数(积分限幅值会很小,默认只有万分之8)上有不同。

把APM的算法移植过来,限幅值也移过来之后就可以进行PID参数调整了。一般先进行横滚或俯仰方向的调整。把四轴固定起来,只留一个待调整方向的旋转自由度(简直就是旋转“烤四轴”有木有)。

笔者稍后奉上调试时使用的装置。强烈建议调试时带上厚的防护手套,不然的话我的手早就被被打烂

左右两个直线轴承,用几颗自攻螺丝拧在桌子上(可怜的桌子),插上铝合金管(外径12mm,

壁厚2mm,注意要调整两个直线轴承的位置使它们同轴),两头用角铁限位也是拧在桌子上

。把四轴用胶带+扎带绑在上面即可开始“烤四轴”。

大概过程(注意修正反向):

1、估计大概的起飞油门。

2、调整角速度内环参数。

3、将角度外环加上,调整外环参数。

4、横滚俯仰参数一般可取一致,将飞机解绑,抓在手中测试两个轴混合控制的效果(注意安全),有问题回到“烤四轴”继续调整,直至飞机在手中不会抽搐。

5、大概设置偏航参数(不追求动态响应,起飞后头不偏即可),起飞后再观察横滚和俯仰轴向打舵的反应,如有问题回到“烤四轴”。

6、横滚和俯仰ok以后,再调整偏航轴参数以达到好的动态效果。

过程详解:

1、要在飞机的起飞油门基础上进行PID参数的调整,否则“烤四轴”的时候调试稳定了,飞起来很可能又会晃荡。

2、内环的参数最为关键!理想的内环参数能够很好地跟随打舵(角速度控制模式下的打舵)控制量。在平衡位置附近(正负30度左右),舵量突加,飞机快速响应;舵量回中,飞机立刻停止运动(几乎没有回弹和震荡)。

2.1首先改变程序,将角度外环去掉,将打舵量作为内环的期望(角速度模式,在APM中叫ACRO 模式,在大疆中叫手动模式)。

2.2加上P,P太小,不能修正角速度误差表现为很“软”倾斜后难以修正,打舵响应也差。P太大,在平衡位置容易震荡,打舵回中或给干扰(用手突加干扰)时会震荡。合适的P能较好的对打舵进行响应,又不太会震荡,但是舵量回中后会回弹好几下才能停止(没有D)。

2.3加上D,D的效果十分明显,加快打舵响应,最大的作用是能很好地抑制舵量回中后的震荡,可谓立竿见影。太大的D会在横滚俯仰混控时表现出来(尽管在“烤四轴”时的表现可能很好),具体表现是四轴抓在手里推油门会抽搐。如果这样,只能回到“烤四轴”降低D,同时P也只能跟着降低。D调整完后可以再次加大P值,以能够跟随打舵为判断标准。

2.4加上I,会发现手感变得柔和了些。由于笔者“烤四轴”的装置中四轴的重心高于旋转轴,这决定了在四轴偏离水平位置后会有重力分量使得四轴会继续偏离平衡位置。I的作用就可以使得在一定角度范围内(30度左右)可以修正重力带来的影响。表现打舵使得飞机偏离平衡位置,舵量回中后飞机立刻停止转动,若没有I或太小,飞机会由于重力继续转动。

3、角度外环只有一个参数P。将外环加上(在APM中叫Stabilize模式,在大疆中叫姿态模式)。打舵会对应到期望的角度。P的参数比较简单。太小,打舵不灵敏,太大,打舵回中易震荡。以合适的打舵反应速度为准。

4、至此,“烤四轴”效果应该会很好了,但是两个轴混控的效果如何还不一定,有可能会抽(两个轴的控制量叠加起来,特别是较大的D,会引起抽搐)。如果抽了,降低PD的值,I基本不用变。

5、加上偏航的修正参数后(直接给双环参数,角度外环P和横滚差不多,内环P比横滚大些,I和横滚差不多,D可以先不加),拿在手上试过修正和打舵方向正确后可以试飞了(试飞很危险!!!!选择在宽敞、无风的室内,1米的高度(高度太低会有地面效应干扰,太高不容易看清姿态且容易摔坏),避开人群的地方比较适合,如有意外情况,立刻关闭油门!!!

5.1试飞时主要观察这么几个方面的情况,一般经过调整的参数在平衡位置不会大幅度震荡,需要观察:

5.1.1在平衡位置有没有小幅度震荡(可能是由于机架震动太大导致姿态解算错误造成。也可能是角速度内环D的波动过大,前者可以加强减震措施,传感器下贴上3M胶,必要时在两层3M泡沫胶中夹上“减震板”,注意:铁磁性的减震板会干扰磁力计读数;后者可以尝试降低D项滤波的截止频率)。

5.1.2观察打舵响应的速度和舵量回中后飞机的回复速度。

5.1.3各个方向(记得测试右前,左后等方向)大舵量突加输入并回中时是否会引起震荡。如有,尝试减小内环PD也可能是由于“右前”等混控方向上的舵量太大造成。

6、横滚和俯仰调好后就可以调整偏航的参数了。合适参数的判断标准和之前一样,打舵快速响应,舵量回中飞机立刻停止转动(参数D的作用)。

至此,双环PID参数调节完毕!祝爽飞!

super_mice的专栏

[原]四旋翼飞行器Quadrotor飞控之 PID调节(参考APM程序)

2014-8-8阅读10860评论43

做四轴也有一段时间了,最近一直在做PID方面的工作。现在四轴基本可以实现室内比较稳定的飞行,操控手感也可以接受。稍后上试飞视频。在此把一些PID方面的经验总结总结和大家分享一下。

首先介绍一下大概的硬件组成:

MCU:Freescale MK60D

传感器(IMU):GY-86模块(MPU6050 + HMC5883L + MS5611)

433MHz数据传输模块

DC-DC可调式开关稳压模块

遥控设备:JR XG7发射机+ JR 611B接收机

机架:普通红白f450机架

电机:朗宇2212kv880高效能电机(黑色)

电调:天行者40A

桨:仿APC1047

电池:DUPU 2200mah 25c

电路很简单用洞洞板搭的简易测试电路。

软件方面最主要的是姿态解算,最终用的是MPU6050的DMP(Digital Motion Process)输出,遥控器控制的目标姿态也是四元数表示的。为了有较好的线性度,将两者的姿态差转换为欧拉角后再进行PID的控制。

下面进入正题。PID算法很大程度上参考了APM(国外成熟开源飞控项目,官网点击打开链接)的控制算法。它是采用的角度P和角速度PID的双闭环PID算法。角度的误差被作为期望输入到角速度控制器中。双闭环PID相比传统的单环PID来说性能有了极大的提升,笔者也曾经调试过传统的PID控制算法,即便参数经过了精心调整和双环控制算法相比在控制效果上的差距依旧很大。无论是悬停的稳定性,打舵时的快速跟随性和回正时的快速性上都是后者的效果明显优于前者。

大概介绍一下APM算法的大概流程。这个PID控制流程图可以在APM官网找到。笔者参考的是APM3.1.0的代码和图上2.9版本的有一点点出入,不影响大局(控制频率100hz)。

横滚(Roll)和俯仰(Pitch)的控制算法是一样的,控制参数也比较接近。首先得到轴姿态的角度差(angle error),将这个值乘以角度系数p后限幅(限幅必须有,否则剧烈打舵时容易引发震荡)作为角速度控制器期望值(target_rate)。target_rate与陀螺仪得到的当前角速度作差,得到角速度误差(rate_error)乘以kp得到P。在I值小于限幅值(这个值大概在5%油门)或者rate_error与i值异号时将rate_error累加到I中。前后两次rate_error的差作为D项,值得注意的是加需要入20hz(也可以采用其它合适频率)滤波,以避免震荡。将P,I,D三者相加并限幅(50%油门)得到最终PID输出。偏航(Yaw)的控制算法和前两者略有不同,是将打舵量和角度误差的和作为角速度内环的期望值,这样可以获得更好的动态响应。角速度内环和横滚与俯仰的控制方法一致,参数(积分限幅值会很小,默认只有万分之8)上有不同。

把APM的算法移植过来,限幅值也移过来之后就可以进行PID参数调整了。一般先进行横滚或俯仰方向的调整。把四轴固定起来,只留一个待调整方向的旋转自由度(简直就是旋转“烤四轴”有木有)。

笔者稍后奉上调试时使用的装置。强烈建议调试时带上厚的防护手套,不然的话我的手早就被被打烂

左右两个直线轴承,用几颗自攻螺丝拧在桌子上(可怜的桌子),插上铝合金管(外径12mm,

壁厚2mm,注意要调整两个直线轴承的位置使它们同轴),两头用角铁限位也是拧在桌子上

。把四轴用胶带+扎带绑在上面即可开始“烤四轴”。

大概过程(注意修正反向):

1、估计大概的起飞油门。

2、调整角速度内环参数。

3、将角度外环加上,调整外环参数。

4、横滚俯仰参数一般可取一致,将飞机解绑,抓在手中测试两个轴混合控制的效果(注意安全),有问题回到“烤四轴”继续调整,直至飞机在手中不会抽搐。

5、大概设置偏航参数(不追求动态响应,起飞后头不偏即可),起飞后再观察横滚和俯仰轴向打舵的反应,如有问题回到“烤四轴”。

6、横滚和俯仰ok以后,再调整偏航轴参数以达到好的动态效果。

过程详解:

1、要在飞机的起飞油门基础上进行PID参数的调整,否则“烤四轴”的时候调试稳定了,飞起来很可能又会晃荡。

2、内环的参数最为关键!理想的内环参数能够很好地跟随打舵(角速度控制模式下的打舵)控制量。在平衡位置附近(正负30度左右),舵量突加,飞机快速响应;舵量回中,飞机立刻停止运动(几乎没有回弹和震荡)。

2.1首先改变程序,将角度外环去掉,将打舵量作为内环的期望(角速度模式,在APM中叫ACRO 模式,在大疆中叫手动模式)。

2.2加上P,P太小,不能修正角速度误差表现为很“软”倾斜后难以修正,打舵响应也差。P太大,在平衡位置容易震荡,打舵回中或给干扰(用手突加干扰)时会震荡。合适的P能较好的对打舵进行响应,又不太会震荡,但是舵量回中后会回弹好几下才能停止(没有D)。

2.3加上D,D的效果十分明显,加快打舵响应,最大的作用是能很好地抑制舵量回中后的震荡,可谓立竿见影。太大的D会在横滚俯仰混控时表现出来(尽管在“烤四轴”时的表现可能很好),具体表现是四轴抓在手里推油门会抽搐。如果这样,只能回到“烤四轴”降低D,同时P也只能跟着降低。D调整完后可以再次加大P值,以能够跟随打舵为判断标准。

2.4加上I,会发现手感变得柔和了些。由于笔者“烤四轴”的装置中四轴的重心高于旋转轴,这决定了在四轴偏离水平位置后会有重力分量使得四轴会继续偏离平衡位置。I的作用就可以使得在一定角度范围内(30度左右)可以修正重力带来的影响。表现打舵使得飞机偏离平衡位置,舵量回中后飞机立刻停止转动,若没有I或太小,飞机会由于重力继续转动。

3、角度外环只有一个参数P。将外环加上(在APM中叫Stabilize模式,在大疆中叫姿态模式)。打舵会对应到期望的角度。P的参数比较简单。太小,打舵不灵敏,太大,打舵回中易震荡。以合适的打舵反应速度为准。

4、至此,“烤四轴”效果应该会很好了,但是两个轴混控的效果如何还不一定,有可能会抽(两个轴的控制量叠加起来,特别是较大的D,会引起抽搐)。如果抽了,降低PD的值,I基本不用变。

5、加上偏航的修正参数后(直接给双环参数,角度外环P和横滚差不多,内环P比横滚大些,I和横滚差不多,D可以先不加),拿在手上试过修正和打舵方向正确后可以试飞了(试飞很危险!!!!选择在宽敞、无风的室内,1米的高度(高度太低会有地面效应干扰,太高不容易看清姿态且容易摔坏),避开人群的地方比较适合,如有意外情况,立刻关闭油门!!!

5.1试飞时主要观察这么几个方面的情况,一般经过调整的参数在平衡位置不会大幅度震荡,需要观察:

5.1.1在平衡位置有没有小幅度震荡(可能是由于机架震动太大导致姿态解算错误造成。也可能是角速度内环D的波动过大,前者可以加强减震措施,传感器下贴上3M胶,必要时在两层3M泡沫胶中夹上“减震板”,注意:铁磁性的减震板会干扰磁力计读数;后者可以尝试降低D项滤波的截止频率)。

5.1.2观察打舵响应的速度和舵量回中后飞机的回复速度。

5.1.3各个方向(记得测试右前,左后等方向)大舵量突加输入并回中时是否会引起震荡。如有,尝试减小内环PD也可能是由于“右前”等混控方向上的舵量太大造成。

6、横滚和俯仰调好后就可以调整偏航的参数了。合适参数的判断标准和之前一样,打舵快速响应,舵量回中飞机立刻停止转动(参数D的作用)。

至此,双环PID参数调节完毕!祝爽飞!

相关文档