本帖最后由 394069341 于 2011-1-18 21:58 编辑
今年WRO和FLL都有巡线方面的问题,在此献给没有了解过巡线逻辑的朋友们一些启发。当然,这未必是最好的逻辑,我只是希望能起到抛砖引玉的作用~希望在WRO上能看到有小学组的巡线非常棒的机器人。
巡线就是沿着地面的一条线走的机器人。而基本原理就是通过检测反射回来的光的强度来判断机器人与线的位置偏差有多少。偏多了,就要往回走一些,偏少了,就稍微往回走。没有偏的话就直走。
巡线的逻辑其实就是上面说的,机器人只需要判断自己偏差了多少。但根据光感个数的不同,判断偏差的逻辑也不太一样。下文给出的这些逻辑仅仅是一个参考,并不一定就是最好的逻辑。所以大家千万别以为这个就是标准答案了……
单光感: 1个光感巡线的逻辑,我想到的有2种。 第一种是最简单的,如果测到黑,就往左转。测到白就往右转。这样的逻辑效果当然就是一摇一摆的了。但如何让程序知道光感检测到的是黑色还是白色呢?打开NXT的主菜单,会找到一个叫View的菜单,进入后会找到一个图标像发光的灯泡。这个就是检测光感数值的地方了。点进去之后只要选择端口号,NXT就会把自己检测到的光值显示在屏幕上了。 这个时候你要测一下,光感放在黑色上是什么数值,放在白色上是什么数值。然后取这2个值的平均值,就是程序判断黑还是白的中间值了。大于这个中间值,NXT就认为测到白色。小于这个值就认为测到黑色。
还有另一种,就是通过数据上的一个算法来进行判断。这需要一个类似“公式”的东西来计算机器人偏了多少。 而这个数据是怎么得来的呢?光感测到黑和白会传回一个数值。而且测到黑和白之间交界的时候也会得到一个值。但这个值浮动比较大,如果测的位置偏黑的那边,值就越来越小。如果偏白的那边,值就越来越大。所以可以通过这个大小来决定机器人到底偏了多少。 如果这个值是中间值,说明没有偏(其实这个时候我们的机器人是沿着黑和白的交界走的)。如果这个值比中间值大,就说明偏了。大的越多,偏的越多。反之,如果比中间值小,小的越多偏的也越多。 http://u.115.com/file/f9df5d6f83#
单光感巡线(难版).rar
双光感巡线: 双光感巡线其实就可以不用上面那样复杂的算法了。 双光感巡线的逻辑很直接。如果左边的光感检测到黑,就往左走(说明机器人往右偏了)。如果右边的光感检测到黑,就说明机器人往左偏了。如果2个光感都没检测到黑线,说明没偏。就直走。 但…… 要注意,2个光感巡线会有意外发生的……就是在测到黑线的时候还没来得及转弯,就测到线外面去了……例如这样 这个时侯就要做一些调整了,就是转弯力度变大一些,或者前进力量减小一些。避免飞线的情况……
也可以在交叉点的时候做一些事情,例如左转
三光感巡线: 大家看到上面的双光感巡线会出一个问题,就是机器人会跑到线外面去。这是因为机器人检测到黑色的时候没来得及转到线上,那个检测到黑的光感就已经检测到线外面去了。而外面也是白色的,所以2个光感都检测到白,就以为自己没偏了。这怎么办呢? 所以三光感的第三个光感就是用来检测自己是不是在线上。如果3个光感都测到白色,说明自己肯定已经跑到线外面去了。这个时候就不要做任何动作了,还是继续之前转弯的动作。 而如果只用中间的光感检测到黑线,而两侧的光感没有检测到黑线,就说明自己在线上,这个时候就可以直走了。
多光感巡线:(WRO和FLL比赛不允许- -!) 其实多光感巡线的逻辑和三光感巡线的逻辑是一样的。只是两侧的光感比较多,可以更快的用来判断机器人偏了多少。偏的越多,远的光感就会检测到。偏的少,近的光感就会检测到。 这个程序我只能拿LABVIEW来编写。这个寻线传感器是我自己做的,通过I2C协议和NXT之间进行通讯。
PS……字很多。。。
|