本帖最后由 Davy_Qu 于 2017-7-29 17:03 编辑
" g) G) N, @7 i4 M/ b$ k
5 r" G% i0 Y1 o8 n! C* J; ^3 [% r用了两种方法,一种是陀螺仪比例控制,另外一种在比例控制的基础上加入了防止陀螺仪漂移的程序(仍在探索中还不成熟)。两种方案执行结果差不多,如果启动时摆的够正的话,偏差都不会很多,实际行驶距离要大于300cm,最大偏差不超过8mm,为了体现程序的可靠性,录了4个视频。 首先,说一下比例控制的方法,做了一个小的数学运算,相对陀螺仪重置时的初始位置多少角度前进,可以直接在“基准角度”端口输入对应的角度值。另外用的是未校准电机,因为移动槽和移动转向模块都自带PID矫正,会对再次编辑的PID算法产生影响,容易造成抖动。
主程序
我的模块
The most straight 300cm.ev3
(7.08 KB, 下载次数: 236)
第一个视频地砖不是太平,中途抖动了一下,不过影响并不是很大,最后轮子偏差不超过一个乐高单位。
由于之前的抖动,换了个地方重新跑了一遍,效果好了一点,但由于车子前端没有放轮子之类的东西,直接就是连杆挨着地面,所以停车时会有一点甩头,但轮子的位置基本没有变化。
再来说说仍在探索中的抑制漂移的方法,思路来自于Gyro Boy的程序。首先,RST模块重置各传感器和写入变量的初始值。但对于发生漂移的陀螺仪来说重置并不能产生作用。之后,gOS每隔0.004s测量陀螺仪的旋转速率并将每次循环测得的数值累加,再求得平均旋转速率。在P_ZX模块中,运行时间乘以旋转速率就可以得到偏移角度,之后用陀螺仪的角度值减去偏移量。其它的地方基本与比列控制一样。 另外,也可以全程都不使用陀螺仪的角度值,内部的角度值也可以通过旋转速率对时间积分得到。本来还想再加上电机旋转传感器联合控制的,可惜没试出结果,有兴趣的同仁可以探索一下。
主
rst
gos
pzx
1.ev3
(11.32 KB, 下载次数: 200)
这个视频由于重写程序时,忘了在最后结束循环,所以车子没有等我自己跑了!!O(∩_∩)O哈哈~,表示有些无奈,不过运行效果还是很不错的。
最后一段视频,又换了个地方测试,也没有设置起点终点,但可以看到陀螺仪的角度一直在增加,但是并没有对直线行进产生影响,说明程序有效。
最后是车子的图片,因为WRO的车型也是用的陀螺仪,所以就在WRO基础上改了一下,LDD可以看WRO的帖子。 WRO帖子地址:WRO2017
: ^ A# A' N0 {
/ v$ e! D3 j# k
- A) G( \ }: h9 t# s% ^8 G
9 [3 h9 I, A7 Y8 e0 x, }# T% ]& q |