沿右墙迷宫算法原理
- 默认直行;
- 右侧有路,则右转;
- 前方无路,则左转。
使用了2个传感器,分别是:机器人右侧的距离传感器 、前方的触觉传感器。
按照逻辑,程序中需要左转(Left90)、右转(Right90)模块,其次,默认直行(前进),需要初始化(Init)、左转或者右转后需要继续直行(ResetState),由于前方使用的触觉传感器,此时,机器人和障碍物已经撞上了,硬转弯的话,效果不好,可以选择先退一段距离(后退),再进行左转。经过分析,粗体部分需要设置为自定义活动进行封装。
前进(Forward)
能使得机器人前进,左右轮的功率值相等,且为正数即可。如果不相等,则会出现转弯,也就是本来应该走直线,效果却是走不直。
后退(Backward)
与前进的原理类似,能使得机器人前进,左右轮的功率值相等,且为负数即可。如果不相等,则会出现后退转弯现象,即:无法直行倒退。
注意:
- 驱动器的左右轮端口号分别是3和4。前行使用的端口是哪两个,后面无论是后退还是左右转弯,都要设置为一致。
- 后退应该将左右轮的驱动功率值设置为-0.5。也可以为其他数,为了和前进速度一致,退的时候,也选择0.5。
- 退的时候,需要设置一个定时器,时长不宜过大,这是因为右侧无路且前方无路时,想要做左转操作,但是,此时使用的是触觉传感器,碰上了再强制左转,是转不过去的,所以,需要先后退一点,再左转。所以,退的时候,要给一个时间,设置太大,则会退很长一段距离,设置过小,又会转不过去,所以,要观察程序出现的现象,适当调整。
左转(Left90)
要使得机器人左转,则需要设置左轮速度慢,右轮速度快,为了能转到90度,所以,设置左轮的功率值为-0.5,右轮设置为0.5。左转完成后,暂停一下,确保完成90度的转弯,后面再直行的时候,确保走的是直线。
右转(Right90)
同样的道理,设置右转,只需要将左转的两个轮子的驱动值交换即可。
初始化(Init)
恢复直行状态(ResetState)
Main主程序
设置一个内建事件,使得程序运行在Web 2D模拟器上后,不要直接运行,需要用户按键后,才直行。故,需要按键后进行初始化。紧接着机器人右侧的距离传感器和前侧的触觉传感器进行检测判断,右侧有路则右转,前方无路则左转。
由于使用到了两个传感器,均需要配置端口号,前面轮子已经使用了3和4,传感器就不能再使用3和4了。距离传感器的端口号设置为1,触觉传感器的端口号设置为2(后面会用到)。编写逻辑。右侧传感器比较容易理解,检测在直行过程中,满足测量值大于设定的危险值,则认为右侧有路,随即修改状态,再右转,右转完成后,机器人是暂停状态,为了走出迷宫,所以,后面还要接上一个重置状态,使得机器人继续直行,并且,还要将右转状态改为直行。
前方触觉传感器要反复检测机器人是否为直行状态,如果是直行状态,机器人会往前方移动,无需处理。如果不是直行状态,说明,机器人触碰到障碍物了,根据前方无路则左转,所以,此时机器人想要左转,但是触碰到了障碍物,转不过去,于是,先退一点,再左转,左转完成后,机器人暂停了,所以,还是需要在后面再接上一个重置状态,使得机器人转完后继续直行。
从而来使得按下w键后,机器人才能自动根据传感器的监测,按照沿着强的右侧走出迷宫。
机器人主机配置
使用Web 2D模拟器,只需要配置主机的端口号即可。端口号设置为8124(必须设置为8124,其他端口不可以)
运行到Web 2D模拟器步骤
首先,运行viple程序,窗口不要关闭
其次,点击viple中的“运行”,选择到“启动Web 2D模拟器”,进行传感器的配置,并进行更新,再连接到viple程序。
连接成功后,会弹出对应的提示:
此时机器人不会自主运动,需要用户按下w键,才能观察运行效果
效果展示
Web 2D沿右墙迷宫算法效果