|
经过了这些天的反复尝试,终于明白了自主悬停的一些要点,也更理解了UAVP的代码。
虽然以前就知道要利用PID里的I做文章,但一直没有理解为什么要针对I。这个在一般PID应用中看起来只是一个阻尼器的东西为什么会对自主悬停有这么大的影响?经过反复尝试各种自创算法,包括直接修改P,对加速度计移动平均后的结果进行PID再处理,等等。效果都可以用“非常糟”来形容。
昨晚又仔细回到了UAVP,仔细看了它的英文版配置手册。发现里面提到了PID参数设置时的一些注意事项。其中说到关于P,如果P=0,那么四轴是无法飞行的。如果只有P,那么四轴就像一个一般的遥控玩具那样,需要人来完全控制它的一举一动。再说到I的时候,提到了如果I参数不为0,那么四轴就可以工作在角度控制而并非角速度控制模式下。
恍然大悟,原来在四轴里,这个I不仅仅只是一般PID里的一个“装饰”,还是整个四轴所有翻转角度的一个总合。(虽然以前也知道对陀螺仪数据进行积分后可以得到角度,但一直没有引起重视)也就是它记录了四轴当前的偏转角度。换句话说,我们就要利用这个角度来实现四轴的自主悬停。
明白了这个,也就理解了以前的错误。以前我总是认为I可有可无,于是把I参数设置为非常小,0.2。还有一个非常低的积分上限,50。结果就是所有角速度的积分都被积分上限卡住,而且0.2的参数也无法让I真正发挥作用。
于是今天就重点研究I,首先将上限放开,2000。这里我并不担心积分过大造成四轴翻覆,因为在最后输出给马达转速前,我都验证过处于对角位置的马达转速差不能超过1000,超过部分会被截掉。这在很大程度上避免了翻覆。然后我修改I到2.0,在我的椅子上进行测试。反复调整后设置到4。效果还不错。那到外面又进行了N次试飞,摔坏了3个桨,一个轴。终于确定了对应的P参数为70,I为4。
在这里还有一点,就是加速度计和陀螺仪数据积分之间的一个系数确定问题。为了让加速度计能够纠正陀螺仪的积分偏差,必须知道加速度计一个轴的偏转角度应该对应陀螺仪积分的大小。这个系数是非常关键的。我通过一个小实验,就是一下子把四轴一个测按到地上,然后看记录里的陀螺仪积分数值和加速度偏差。在实际试飞中又把这个参数稍微调整小了一点。现在的参数看起来还是不错的。整体飞行已经很平稳了。漂移速度也很慢了。
这是调整参数中间的一次飞行,当时参数不合适,可以通过陀螺仪数据看出四轴处于晃动状态。
那个PID2输出就是加速度计修正PID I积分的数值。而加速度计X轴是经过50次加权移动平均后的数据,可以说能够代表四轴当前是否稳定。
可以看到加速度计对于PID的修正还是基本正确的,随着四轴的倾斜做出相应的修正,有正有负。
这个修正不能直接以加速度计偏角是否大于0或者小于0来决定,这样会引起四轴失控。这个是多次试验得到的结论。原因也很简单,如果当前的I里已经有了引起加速度计偏转的陀螺仪角度,你要再给他增加,相当于过量了。结果就会让四轴往一个方向飞去,尤其是在起飞的时候。
下面的问题就是遥控器的控制。在我测试参数过程中,发生过不控制方向没问题,一控制方向四轴就开始抖动,阻挠控制。这说明我们的代码起作用了,因为四轴的方向运动依靠的是自身的倾斜来完成,所以如果四轴不倾斜那就无法前进后退。但我以前的代码只是简单地修改马达转速来实现偏转,在有这个自主悬停后程序认为这个偏转是不对地,于是想要纠正它。但马达转速偏转是每次都存在的,所以就出现了纠正到平衡位置后又变到倾斜位置,然后又重复重复再重复,于是引起震荡。解决方法也很简单,在有遥控器操作后修改加速度计的平衡点,让四轴能根据新的位置实现平衡,这样就OK了。
[ 本帖最后由 c_nmusic 于 2009-4-4 17:19 编辑 ] |
|