四旋翼飞行器之PID参数整定

本文原创,作者zzw,转载请注明,版权属于燕骏团队zzw

概述

十几天前,开始和队友一起整自己的四旋翼飞行器。我们买了套飞行器的配件机架使用的是穿越机qv250机架。主控电路板,是自己用AD设计的电路图,然后制作的盘存表电路板,使用的是STM32F103RCT6芯片。上面集成mpu6050、hmc5883l、bmp180、超声波、光流、激光传感器等等。这个飞行器,我们自认为是将主控STM32RCT6芯片的功能,发挥到了极致。

我想做的是一架可以自动飞行的飞行器,学习并理解一些高级算法

辛辛苦苦十来天,整机模块驱动基本完成,姿态解算及PID控制等算法基本搞定。今天(2017.1.3)我和队友在实验室,整定了一天的PID参数,总结了一些规律以及一些经验。记录在博客下面,自己忘记的时候回来看看,也分享给大家和大家一起讨论学习。(若有错误,请点出,谢谢~)

**一篇博客写了好几天,最近几天忙着考试,今天抽空把这篇博客写完吧(2017.1.6)

关于我们这个四旋翼后续的详细资料以及详细制作过程,详细代码,寒假期间,我将陆续发布到自己的博客。我和队友最终的意愿是开源我们自己的飞控源码以及硬件电路。

单级PID整定

这里写图片描述 
e(t)是偏差。 
下面说说今天整定单级PID的一些感悟:(心塞塞啊~),一开始使用的是串级PID,分内环和外环,但是串级PID整定毫无头绪,现象不是特别明显(后续文章我将 分享一下我所理解的串级PID算法)。 
无奈串级PID整定无头绪,又写程序改为单级PID进行整定调试找感觉。。。

下面说说单级PID:输入的是目标角度,输出是PWM增减量。 
这里先默认大家会写单级PID算法,基础知识先自己脑补。 
下面先看看wiki上介绍的PID控制器:(原文链接如下) 
https://en.wikipedia.org/wiki/PID_controller

wiki内容

这里 盗来wiki的几幅图: 
第一幅图:PID各个参数动图大家自己点击链接看吧

https://en.wikipedia.org/wiki/PID_controller#/media/File:PID_Compensation_Animated.gif

Kp比例项参数

第二幅图: 
这里写图片描述 
如图:当Ki,Kd保持为常量时,改变Kp。图上在t = 1s时,给系统一个阶跃信号,然后调节Kp比例项的值。图中红线为Kp = 0.5时候的响应曲线,绿线为Kp = 1.1时候的响应曲线,紫线为Kp = 1.6时的响应曲线。

上升时间 指:这里我们直接认为是 从一开始0% 到第一次达到目标值的时间100%。

从图 上分析: 
红线:当Kp比例项较小时,响应无超调无震荡,上升时间较长,但是稳定时间很长,延时时间长。 
绿线:当Kp比例项增大时,响应有较小超调,上升时间明显缩短,稳定时间缩短。 
紫线:当Kp比例项足够大时,响应曲线超调较大,震荡很多次,上升时间继续缩短,但是稳定时间却增长了。 
如果继续增大Kp值呢??这里图上没有反应,但是我们可以推测一下:上升时间继续减小,超调继续增大,震荡次数增大,最终系统失控发散,系统性能恶化。

所以调PID参数时一定要小心,Kp值不能过大。

Ki积分项参数

第三幅图:KI的影响:

这里写图片描述

大家看图:可能很多人都知道,Ki积分项是用来消除静差的。那么什么是静差??我个人的理解是,如果目标值是 10,经过P或者PD调节之后,系统稳定值为9.5,那么与10是有一定差距,这个就属于静差,这个静差的调节就需要积分项来进行。

继续分析图: 
绿线为基准线:Kp = 1 Ki = 1 Kd = 1 
红线:Ki = 0.5 其他一致 
蓝线:Ki = 2 其他一致

可以看出Ki的特性和Kp类似,和Kp是“正”作用。Ki较大反而会引起系统震荡

Kd微分项参数

下面让我们来看看 Kd:微分项: 
这里写图片描述

这张图中绿线为基准线:(Kp = 1 Ki = 1) 
红线Kd = 0.5较小时,上升时间减小,但是比 Kd = 1.0时超调大一点,上升时间短一点。 
黑线Kd = 2,和Kd = 1时做比较,发现超调量竟然比Kd = 1时大了,上升时间也长了。

所以可以大致总结出:Kd在一定范围内可以起到抑制超调量的作用,但是会延长系统上升时间。

我们自己整定经验总结

下面简单说一下,我们那天调PID参数的情况: 
我们自己利用丝杠 做了一个单轴调节器。(只能一个轴动)使用起来很方便,如下图: 
这里写图片描述

第一个经验

将各个轴分开来,单独调各个轴的PID

第二个经验

先单独调节Kp,Ki = 0和Kd = 0 
调节方法是1,2,4,8,16等2倍数,且每次观察并用手感觉实际情况。(下面是以我们自己的飞行器举例的,先整定的是Y轴的PID各项参数) 
比如 Kp 从1调到4 ,发现飞行器 有左右震荡调节趋势,但是软趴趴的,调节不过去。也就是说Kp比例项小了,力度不够不能调节到稳定位置。于是将Kp加大到8,发现飞行器很有力度了,左右震荡幅度很大。当飞行器手动向左偏得时候,有一个很大的力度让飞行器向右偏,在中间位置左右震荡幅度较大,需要很长时间 才能基本稳定。 
于是我们感觉自己的Kp有点大,于是减小Kp到6.0。发现力道稍微小了点,但是最后还是能基本在中间平衡位置 基本稳定。

就这样感觉Kp差不多了,通过上面分析,我们知道加入Kp虽然能使系统快速达到目标值,但是会使系统超调震荡: 
如下图: 
这里写图片描述 
在目标值上下震荡,也就是我们的飞行器在平衡位置的上下震荡。振幅按理说是减小的。

第三个经验

接着整定Kd微分项参数 
这个时候就应该整定 微分项Kd了,这个参数大小范围实际还是看自己的PID算法实际是怎么写的。不过呢,Kd项参数的作用是一种阻尼作用,阻碍系统变化的。通过微分跟踪上一次状态(我是这么理解的,不知道对不对),调这个参数时,我们也是按照1、2、4、8、16、32这规律 再2分法整定的。比如:8和16之间取 12,然后确定是在12和16还是8和12直接进行二分法寻优。

我们中间做了个实验,只整定Kd其他项为0,目标值为0平衡位置。发现:在一定范围之内,随着Kd的增大,一种阻碍飞行器姿态变化的力逐渐增大。一个字概括为:“硬”。也就是说微分项通过微分,跟踪上一次的状态进行预估下一次的状态,阻碍系统的变化,是一个阻尼作用。

上面说到Kp比例项震荡,需要加入Kd进行调节,加入合适的Kd后,系统能较快稳定。效果还是不错的。

注意点:就我们个人经验,发现加入Kd后,可能之前的Kp项系数也要微调。也就是说各个参数不是死的,不是一个调整好就不需要动了的。而且就我们测试发现好几组PID参数都是基本可以的。

第四个经验

单轴、最后调节Ki,目标值为0度,然后用jlink仿真器进仿真,看看基本稳定后解算出来的姿态,实际角度与我们的目标角度有多大的差值。我们程序中设置了积分分离阈值与积分饱和阈值,积分分离阈值呢,我们设置为5度,也就是说大于5度我们就认为不是系统静差了,就不需要积分项进行作用了,积分饱和呢我们设置了100,也就是积分饱和最大输出100的PWM增量。我们的Ki积分项,参数很小0.0几的样子。

以上 单个轴的PID系数就基本整定出来了,剩下的几个轴重复以上步骤。。

今天先写到这,,后面再补充吧。最后附上队友MATLAB仿真PID

串级PID参数整定

串级PID待我寒假回家研究研究,貌似难调

附录:

队友MATLAB仿真:

参数

这里写图片描述

结果 
这里写图片描述

参数 
这里写图片描述

结果

这里写图片描述

参数 
这里写图片描述

结果 
这里写图片描述

参数

这里写图片描述

结果

这里写图片描述

参数 
这里写图片描述

结果 
这里写图片描述

参数

这里写图片描述

结果

这里写图片描述

参数 
这里写图片描述

结果 
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值