本帖最后由 wwfiney 于 2014-11-26 13:46 编辑
上一篇**介绍了基本硬件平台的搭建
https://bbs.21ic.com/icview-834204-1-1.html
下面开始讨论调试问题
由于我们采用PID的控制模式模式,调试的关键就是P,I,D这三个参数
这里不对PID的基础概念进行讨论
简单点说,如果系统往左偏,我们自然希望“向右转”,但是用“多大力”向右转呢?我们需要有一定的“依据”
依据就是我们设定的目标(比如平衡就是角度0度)和当前值实际值(比如左偏了10度,记作当前负10度)的差值(误差),0减负10就是正10
这个就是我们计算需要“多大力”的一个基准
简单点的单级PID,直接拿这个“误差”做运算得出“多大力”向右转
P是直接乘以这个“误差”的,所以P越大,则往右转动的力越大,即调整的速度越快
I是历史累计误差乘以的一个系数,什么意思呢,就是你这次测量“依据”是10,下次转过来了5度,“误差”就变成5了,但是还是有误差,累计上次就是15了,可以看出这个值和做PID调整的频率是有关系的
D是说现在变化的趋势,是这次的“误差”减去上次的“误差”,上面那个例子5减去10就是负5,说明虽然还没到设定值(平衡位)但是误差在变小了
能看出来,大家都是“正”的这个是“负”的,就会阻碍“大力调整”,所以大家称这个为“阻尼力”。通俗点说,就是虽然还没到位置,但是很接近了,我们就别这么快了,否则一下子“超过去”了
上面简单的说了PID的原理,那么PID取多少值?5?50?500?
这个与你的系统有关系,做PID的调整周期
还有就是输出值的意义,比如你用5作为PID算出来调整20,这个20什么意义?要对应到你的电机的马力输出
举个例子如果这个值是直接加到16位的PWM计数器的,那么20对于65535的计数器才有多大的变化?这时候你可能是需要用50或者500来得到20000这么大的值
那么如何调整PID的值呢
在讨论这个问题之前,我们需要建立“调试环境”
四轴的调试原则是:
1 调左右摆动(ROLL)和前后仰俯(pitch),自身旋转(yaw)容易修正,不作为主要调试
2 固定住四轴,只留一个方向的自由度,来调整这个方向
说起来比较容易,“只留一个方向的自由度”这个怎么实现?
最容易想到的就是类似平衡杆一样的结构,让四轴只能“左右”转,来调整roll和pitch
但是实现起来有一定难度,如何把一个“杆”固定在四轴底下,而且可以自由转动,四轴还不会往“前后”跑呢?
本文主要讨论调试环境的搭建,有个科学方便的调试环境,会很容易得到满意的PID
对于小四轴用绳子拴住就行了:
找个小空间,拴住两头,绷紧绳子就可以调试roll或者pitch
但是大四轴有半米的大小,这种方法就比较麻烦
家里有两个大柱子或者重物来栓绳子的不多,寝室的梯子普通家里是没有的
而且重达1kg以上的四轴,用绳子对其的约束力也会大大减小
我们需要一个简单,牢固,廉价,易收拾(家里人不会希望你整一滩在那里吧:))的方法来做平衡架
首先来个设计图
那么如何做这个架子且易收藏呢?
经过考虑,pvc水管是一个不错的选择
在大四轴底下绑一个“四通”可以很方便的调试roll和pitch
并且测试完可以拆卸,不占地方
pvc管材并不贵
搭建原型
固定四通
为了不让四轴前后滑动,用螺丝固定住,换轴向的时候拧下来就行了
上架测试
然后找重物压住架子就可以调试了
关于整定PID的值
网上很多教程,这里不细说
简单说,就是I和D都设为0,调整P,因为P是直接乘“误差”,所以最直接简单
P太大会忽左忽右的,太小半天调不过来,所以先把P整定在一个既能很快调整到平衡又“左右晃动”幅度不太大的位置
然后微调I或者D,或者干脆没有I和D
crazyflie用的是串级PID
用了2级PID
再次简单点说第一级是计算当前的“角度”和目标的差值,做PID运算,得出一个“调整值”,可以看作需要转动的“加速度”
陀螺仪可以获得的当前该方向的“加速度”,如果把前面根据“角度”差计算出的需要的“加速度”当作目标值,陀螺仪当前测定值作为实际值,那么这又是一个PID
算出最终输出的“电机马力”调整值
|