在我的项目中,我只是试图制作一个能够尽可能多地探索网格的机器人,而不需要两次使用相同的路径。此外,它还有一个传感器,可以看到一个物体是否在它的路上(物体只能在走廊里)。但我在试图让机器人避免采取相同的路径时遇到了麻烦。
我尝试通过创建一个2D数组来解决这个问题,该数组用于存储网格中每个方块的整数值。值为0表示机器人尚未在网格中的那个方格上,值为1表示方格在网格中被阻挡,值为2表示机器人之前已经在该方格上。如果机器人看到当前航向前方的方格值为2,那么它将继续旋转以找到值为0的方格,但如果机器人周围没有值0的平方存在,则它开始回溯。 / p>
这个例子可以更清楚地解释我的问题:
三角形表示机器人及其起始位置,左下角假定为我网格中的位置(0,0)。绿色圆圈表示阻挡其路径的项目。红色方块是机器人的目标。机器人只能移动到网格中的白色方块上。
当我开始我的程序时,机器人向前移动(向东,因为那是它当前的标题),直到它到达绿色圆圈之前的交叉点。它向前看并在路上检测到一个物体,因此它逆时针旋转90度并检查另一个阻塞,这再次发生,因此它再次逆时针旋转。所以现在机器人位于(0,2)向西的位置。它只能向西移动以避免离开网格或击中一个物体,因此它返回到其初始位置但仍向西行进。它现在顺时针旋转90度,直到它能找到一个将它保持在栅格上的方向,即直到它再次面向东方。所以网格现在看起来像:
但是现在我想忽略前进并走向同一条路,忽略那个方向并逆时针旋转90度再朝北,所以我的机器人可以向北移动到一条新的路径。我可以简单地忽略方向并且只是继续旋转以找到一条新路径,但如果我被路径包围并且我希望我的机器人回溯到它的最后一个路径,那该怎么办呢。我怎样才能有效地做到这一点。另外,我如何有效地检测何时需要回溯。
谢谢
答案 0 :(得分:1)
解决图片2中的困境可能就像在移动之前检查机器人周围的其他white
方格一样简单。在图2中,机器人会看到他所面对的方格是灰色的"并决定检查所有其他方向,并最终发现他的北方有一个空的白色方块。
编辑:没有意识到这是一个真正的机器人。
由于学习单元格中的内容的唯一方法是转向该单元格并使用传感器,因此无论您做什么,机器人都必须进行一些转动。当它遇到墙壁或绿色物体时,它必须转向它找到一条新的旅行路径。您可以忽略机箱的墙壁来优化它。例如,当机器人回到面向西的起始位置时,你已经知道南面有一堵墙,因为它的坐标位置是(0,-1),这是无效的。这允许你弄清楚开放的瓷砖是否在北方,因为你已经访问了东边的瓷砖,只需要一个转弯。
此外,当机器人最终一直向北行进时,瓦片(0,6)你知道由于它的位置,北面和西面都有一面墙。然后你可以智能地猜测开放的槽必须在东边,因为西方瓦片(-1,6)无效,(0,7)也无效。
在不更换传感器以查看2个区块或在机器人上安装更多传感器(即每侧一个)的情况下,由于信息的可用性有限,因此无法进行更多优化。