【2017年整理】对串级PID和单级PID的理解

上传人:豆浆 文档编号:1010103 上传时间:2017-05-25 格式:DOC 页数:8 大小:42KB
返回 下载 相关 举报
【2017年整理】对串级PID和单级PID的理解_第1页
第1页 / 共8页
【2017年整理】对串级PID和单级PID的理解_第2页
第2页 / 共8页
【2017年整理】对串级PID和单级PID的理解_第3页
第3页 / 共8页
【2017年整理】对串级PID和单级PID的理解_第4页
第4页 / 共8页
【2017年整理】对串级PID和单级PID的理解_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《【2017年整理】对串级PID和单级PID的理解》由会员分享,可在线阅读,更多相关《【2017年整理】对串级PID和单级PID的理解(8页珍藏版)》请在金锄头文库上搜索。

1、对串级 PID 和单级 PID 的理解(基于匿名微型六轴)来源:本站 | 作者:小古 | 发表时间:2015-04-01 | 点击量:14145/* (C) COPYRIGHT 2014 ANO Tech * 文件名 :ANO_FlyControl.cpp* 描述 :飞行控制*/include ANO_FlyControl.hANO_FlyControl fc;/*先整定内环,后整定外环。参数整定找最佳,从小到大顺序查先是比例后积分,最后再把微分加曲线振荡很频繁,比例度盘要放大曲线漂浮绕大湾,比例度盘往小扳曲线偏离回复慢,积分时间往下降曲线波动周期长,积分时间再加长曲线振荡频率快,先把微分降下

2、来动差大来波动慢。微分时间应加长理想曲线两个波,前高后低 4 比 1*/*ROLL 和 PIT 轴向按照以上公式计算 PID 输出,但 YAW 轴比较特殊,因为偏航角法线方向刚好和地球重力平行,这个方向的角度无法由加速度计直接测得,需要增加一个电子罗盘来替代加速度计。如果不使用罗盘的话,我们可以单纯的通过角速度积分来测得偏航角,缺点是由于积分环节中存在积分漂移,偏航角随着时间的推移会偏差越来越大。我们不使用罗盘就没有比例项,只仅使用微分环节来控制。*/ANO_FlyControl:ANO_FlyControl()yawRate = 120;/重置 PID 参数PID_Reset();/重置 P

3、ID 参数void ANO_FlyControl: ID_Reset(void)/因为 YAW 角度会漂移,所以参数和 ROLL、PITCH 不一样pidPIDROLL.set_pid(70, 15, 120, 2000000); /ROLL 角度的内环控制系数,20000:积分上限 pidPIDPITCH.set_pid(70, 30, 120, 2000000);/PITCH 角度的内环控制系数pidPIDYAW.set_pid(100, 50, 0, 2000000); /YAW 角度的内环控制系数pidPIDLEVEL.set_pid(280, 0, 0, 0); /外环控制系数pid

4、PIDMAG.set_pid(15, 0, 0, 0); /电子罗盘控制系数/* 【扫盲知识】 串级 PID:采用的角度 P 和角速度 PID 的双闭环 PID 算法-角度的误差被作为期望输入到角速度控制器中 (角度的微分就是角速度) 对于本系统则采用了将角度控制与角速度控制级联的方式组成整个串级 PID 控制器。串级 PID 算法中,角速度内环占着极为重要的地位。在对四旋翼飞行的物理模型进行分析后,可以知道造成系统不稳定的物理表现之一就是不稳定的角速度。因此,若能够直接对系统的角速度进行较好的闭环控制,必然会改善系统的动态特性及其稳定性,通常也把角速度内环称为增稳环节。而角度外环的作用则体现

5、在对四旋翼飞行器的姿态角的精确控制。 外环:输入为角度,输出为角速度内环:输入为角速度,输出为 PWM 增量使用串级 pid,分为:角度环控制 pid 环,和角速度控制环稳定环。主调为角度环(外环),副调为角速度环(内环)。参数整定原则为先内后外,故在整定内环时将外环的 PID 均设为 0所谓外环就是只是一个 P 在起作用,也就是比例在起作用;P 也就是修正力度,越大越容易使飞机震荡。 震荡的特点是:频率小、幅度大*/*【横滚(Roll)和俯仰(Pitch)的控制算法】 横滚(Roll)和俯仰(Pitch)的控制算法是一样的,控制参数也比较接近。首先得到轴姿态的角度差(angle error)

6、,将这个值乘以角度系数 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输出。*/串环 PID 调节详情参见:http

7、:/ . 36723 /飞行器姿态外环控制void ANO_FlyControl:Attitude_Outter_Loop(void)int32_t errorAngle2;Vector3f Gyro_ADC;/计算角度误差值, 角度误差值=期望值-此刻姿态值 /constrain_int32 作用:32 位整型数限幅,使其控制输入的最大飞行倾角不大于 25 度(如果控制量比 25 度大,飞机早就坠毁了)/rc.CommandROLL:遥控数据 imu.angle.x :此刻姿态(角度)/1.得到轴姿态的角度差(errorAngle)/2.这个角度差值进行限幅(constrain_int32)

8、(正负 FLYANGLE_MAX)(限幅必须有,否则剧烈打舵时容易引发震荡)作为角速度控制器期望值(target_rate) errorAngleROLL = constrain_int32(rc.CommandROLL * 2) , -(int)FLYANGLE_MAX), +FLYANGLE_MAX) - imu.angle.x * 10; errorAnglePITCH = constrain_int32(rc.CommandPITCH * 2) , -(int)FLYANGLE_MAX), +FLYANGLE_MAX) - imu.angle.y * 10; /获取此时陀螺仪上的角速度

9、,取角速度的四次平均值 Gyro_ADC = mpu6050.Get_Gyro() / 4;/* 得到外环 PID 输出(角速度的差值)(实质是相当于内环的 P 比例项)- 3.target_rate 与陀螺仪得到的当前角速度作差,得到角速度误差(RateError)乘以 kp(外环控制系数 pidPIDLEVEL-(280, 0, 0, 0))得到给内环的 P。*/ /横滚 roll:外环控制。输入为角度,输出为角速度。RateErrorROLL 作为内环的输入。RateErrorROLL = pidPIDLEVEL.get_p(errorAngleROLL) - Gyro_ADC.x; /

10、Gyro_ADC.x:陀螺仪 X 轴的值 /俯仰 pitch:外环控制。输入为角度,输出为角速度。RateErrorPITCH 作为内环的输入。RateErrorPITCH = pidPIDLEVEL.get_p(errorAnglePITCH) - Gyro_ADC.y;/Gyro_ADC.y:陀螺仪 Y 轴的值/*偏航(Yaw)的控制算法和前两者略有不同,是将打舵量(遥控数据量rc.CommandYAW)和角度误差的和作为角速度内环的期望值,这样可以获得更好的动态响应。角速度内环和横滚与俯仰的控制方法一致,参数(积分限幅值会很小,默认只有万分之 8)上有不同。*/航向 yaw:外环控制。输

11、入为角度,输出为角速度。 RateErrorYAW 作为内环的输入。RateErrorYAW = (int32_t)(yawRate) * rc.CommandYAW) / 32 - Gyro_ADC.z; /Gyro_ADC.z:陀螺仪 Z 轴的值/飞行器姿态内环控制: 输入为角速度,输出为 PWM 增量/内环的效果就是:减小 P 比例控制带来的震荡void ANO_FlyControl:Attitude_Inner_Loop(void)int32_t PIDTerm3;/注意这里是 i 的值是 0 到 2/PIDROLL、PIDPITCH、PIDYAW 是枚举类型,也就是 0、1、2,也就

12、是下面的pid 、 PIDTerm 就是 3 组 PIDfor(u8 i=0; i这里实际就是一个完整的 PID/PID_INNER_LOOP_TIME: 2000us-0.2ms 积分微分时间,每隔 0.2ms 操作积分和微分 ,RateError 是外环计算的结果(从外环算出) /得到内环 PID 输出,直接输出转为电机控制量 PIDTerm = pid.get_pid(RateError, PID_INNER_LOOP_TIME);/对 YAW 角继续处理,加入遥控控制 /在 I 值小于限幅值(这个值大概在 5%油门)或者 rate_error 与 i 值异号时将 rate_error

13、累加到 I 中。PIDTermYAW = -constrain_int32(PIDTermYAW, -300 - abs(rc.CommandYAW), +300 + abs(rc.CommandYAW); /PID 输出转为电机控制量motor.writeMotor(rc.CommandTHROTTLE, PIDTermROLL, PIDTermPITCH, PIDTermYAW);/*【 调节串环 PID 大概过程(注意修正反向) 】 1、估计大概的起飞油门。2、调整角速度内环参数。3、将角度外环加上,调整外环参数。4、横滚俯仰参数一般可取一致,将飞机解绑,抓在手中测试两个轴混合控制的效果

14、(注意安全),有问题回到 “烤四轴 ”继续调整,直至飞机在手中不会抽搐。5、大概设置偏航参数(不追求动态响应,起飞后头不偏即可),起飞后再观察横滚和俯仰轴向打舵的反应,如有问题回到 “烤四轴 ”。6、横滚和俯仰 ok 以后,再调整偏航轴参数以达到好的动态效果。*/ /*【 过程详解 】1、要在飞机的起飞油门基础上进行 PID 参数的调整,否则 “烤四轴 ”的时候调试稳定了,飞起来很可能又会晃荡。2、内环的参数最为关键!理想的内环参数能够很好地跟随打舵(角速度控制模式下的打舵)控制量。在平衡位置附近(正负 30 度左右),舵量突加,飞机快速响应;舵量回中,飞机立刻停止运动(几乎没有回弹和震荡)。

15、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 度左右)可以修

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号