首先声明,我已经一年多没碰过能力风暴了,现在我写的这些东西全是我凭借我的一点印象写出来的。而且是针对以前乘0.7回家系数时的规则所言,就是不进房间,不记撞墙,回到白圆停下即可的。新的规则我没仔细看过。 

   首先说一下硬件方面的。个人感觉指南针不是很必要,而且听人说指南针的精度不是很精确。反正我是没有用过。在我的算法里检测白线是必须的,检测白线我试过四种方法:自制的灯泡加光敏电阻(效果不是很好,会出现漏测的情况,而且还要另外加电池,我用的摩托车上的灯泡,很费电)广茂达的灰度检测(一个发光二极管加一个光敏电阻,感觉除了比较省电之外检测效果还不如我自己做的)光电编码器(以前在这里讨论过具体做法,这里就不多说了,比较理想的方式,很少会漏测)光电编码器+触发器(也讨论过,万无一失的方法,只是硬件上扩展的东西比较多,不适合入门者)。另外就是红外测障了,我在左中右各加了一组,这样机器人既可以左手走又可以右手走,回家时有用。硬件上基本就这样了。 

   下面我们做个规定,假设机器人播放是正向前的,左手走,先进两个大房间,这样按顺序四个房间就是1,2,3,4号房间。 

   机器人灭完火后的位置一般是不确定的。而我们的算法一般都是靠墙走,所以这时候首先是要“找墙”。假设机器人要用左手走回家,那么它必须让左面的传感器检测到障碍,才可以顺利的采用左手走。我谈一下我当时采用的办法:如果灭完火后机器人左边的传感器已经检测到了障碍就直接进入左手走的子程序回家,如果左边没有而前边检测到了障碍,机器人就原地转,一直转到左边检测到障碍,进入左手走的子程序回家,如果右边有障碍类似。如果都没有就让机器人一直往前走,一直走到某一个传感器检测到障碍为止。 

   OK,找到墙了。具体回家的做法是根据白线检测的记数知道自己处在哪个房间里,然后转入分别的回家子程序。1房间采用优先右转回去,3、4房间用优先左传回去,都不会进入其他房间。2房间比较麻烦,简单的左手或右手都不行。我用了一个笨办法,机器人从房间门口的白线出来后先优先左传走,轮子上的光电编码器开始记距离,走一定的距离后右转一个固定的圆弧,拐入一开始出来的那条走廊,然后优先右转,就可以回去了。不是很保险,不过由于回家不记撞墙,我感觉成功率还是蛮高的。 

   至于怎么停在白圆里,这里我就不说了,大家自己想想,其实很简单的,程序里的一点小手脚。 

   以上是我的一点点经验了,希望可以起到抛砖引玉的作用,当然说起来简单做起来难。里面还有很多细节的,比如怎样不会让机器人不把房间门口的白线和蜡烛周围的白线搞混,希望大家自己多动动手,动动脑,别人的经验永远是别人的,只有细细的消化吸收了才是你自己的,才能编好自己的程序!最后还是一句话:别把机器人灭火当成小孩子的游戏。