本帖最后由 Davy_Qu 于 2017-7-29 17:03 编辑 & K. K0 s! ^0 b1 N3 y1 ?7 F2 _
/ }2 j h7 P& z5 P2 s- Z7 D
用了两种方法,一种是陀螺仪比例控制,另外一种在比例控制的基础上加入了防止陀螺仪漂移的程序(仍在探索中还不成熟)。两种方案执行结果差不多,如果启动时摆的够正的话,偏差都不会很多,实际行驶距离要大于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
$ H# O6 ]. K/ W! @1 ~; t" g1 D4 n! O
/ }+ C! y+ `* e2 R. r# N i; j
# t5 t p* _$ } |