沿右墙迷宫算法
引导
线控模拟可以使得通过用户手动操作,实现机器人在模拟环境下在迷宫中行走(即:运动),算法可以使得机器人按照一定的策略自动行走,沿右墙迷宫算法就是其中的一种策略。
目的
运行程序后,使得机器人能自动根据算法原理走出迷宫(或者运行程序后,通过按键事件,让机器人自动走出迷宫)
原理
默认直行(优先级次之,为2):右侧无路情况下,前方测量值大于设定值,说明前方有路
右侧有路则右转(优先级最高,为1):只要检测要右侧有路,即右方测量值大于设定值,则右转
前方无路则左转(优先级最低,为3):右侧无路且前方无路的情况下,只能往左转。
总结
使用了两个传感器:右侧距离传感器、前方距离传感器,对应的端口号分别是1、2,分别用于测量距离。(注意:Web 2D模拟器中实现沿右墙迷宫算法,右侧使用的是距离传感器,前方使用的是触觉传感器)
根据原理进行程序编写
主机
由于使用的是unity模拟器,那么,主机的配置,和线控模拟中的配置一致。
初始化
有两种方案:一种是运行程序后,直接运行;另一种是运行程序后,按键再运行。(个人更推荐后者,原因:unity模拟器中,需要运行模拟器和viple,存在界面切换,第二种需要用户按键后才开始出现运行效果,即,用户可以看到完整的运行,即使算法有缺陷,都更容易去观察现象,再进行DeBug)
方式1:
方式2:
右方距离传感器
右侧距离传感器,测量值大于设定的值,则表示右侧有路,然后右转。小技巧:右转完成后,先直行一段时间,避免右转完成后,立即检测右方是否有路,万一满足条件,就会出现来回行走的问题。
前方距离传感器
前方距离传感器,测量值大于设定值,则表示前方有路,此时保持直行即可,由于默认就是直行,所以,无需写程序。只需要判断测量值小于设定值,此时前方无路,左转即可。左转完成后,保持直行。
整体逻辑
设置isBusy变量,用来表示是否在转弯,在转弯,值为true,没有在转弯,值为false,所以需要进行标记,由于布尔类型的变量,默认初始化的值是false,所以,无需写初始化程序都可以(如果您是初学者,可以拖一个数据活动和一个变量活动来进行初始化)。
测试
unity模拟器沿右墙迷宫算法
如果按照逻辑写出来的程序出现按键后,机器人连续右转,造成了右转转圈的情况,说明右侧传感器测量值一直都是大于设定值,所有造成了连续右转,为了避免这种情况,你就要破坏右转成立的条件,首先,传感器只能读取数据,不能修改数据,所以,只能修改设定值,此时,测量值大于设定值造成了连续右转,测量值不能改,那就只能改设定值,需要思考设置值是大了还是小了,当测量值为20,设定值为10,就满足右转条件,测量值不能更改,设定值要如何改,才能让条件不成立?显然就是设定值小了,需要改大一些,假如改为30,那么,20>30不成立,就实现了破坏右转条件,避免了连续右转问题。