Algorithm 如何绘制出一个机器人迷宫?

Algorithm 如何绘制出一个机器人迷宫?,algorithm,maze,robotics,Algorithm,Maze,Robotics,首先,我已经看过类似的问题,但它们并没有解决我的问题,这不是重复(我希望) 我正在用Arduino Nano制造并编程一个机器人,这个机器人应该能解迷宫。它被放在迷宫的某个地方,然后必须找到一件物品。下一次应该直接进入项目(不一定是最短的路线,但不允许有死胡同) 没有必要知道整个迷宫,因为只要他有一种方法可以找到这个项目,这是很好的。正如我所说,我不需要最短的路 迷宫是二维的,我只是把黑色的胶带放在白色的桌子上,机器人应该使用一个线传感器来跟踪这些线 没有其他传感器来定位他自己。首先,我想制作一


首先,我已经看过类似的问题,但它们并没有解决我的问题,这不是重复(我希望)
我正在用Arduino Nano制造并编程一个机器人,这个机器人应该能解迷宫。它被放在迷宫的某个地方,然后必须找到一件物品。下一次应该直接进入项目(不一定是最短的路线,但不允许有死胡同)
没有必要知道整个迷宫,因为只要他有一种方法可以找到这个项目,这是很好的。正如我所说,我不需要最短的路

迷宫是二维的,我只是把黑色的胶带放在白色的桌子上,机器人应该使用一个线传感器来跟踪这些线
没有其他传感器来定位他自己。首先,我想制作一个二维阵列,迷宫的每个区域都在其中。但由于它只是一个普通的线传感器,机器人不知道直线是一条还是两条场长,所以整个过程都不起作用
我也试过DFS或类似的东西,但这里有一个类似的问题。迷宫是圆形的,机器人怎么知道这个节点以前已经找到了,而且是一样的

如果有人有主意就好了

虽然方向有点模糊,但可以使用决策。决定必须是可复制的。它可以用一个类来表示:

public class Decision {
    boolean[] directions = new boolean[2]; // 0 = left, 1 = straight, 2 = right
    // at least 2 of them should be true or it is no decision
    int path; // 0-2 to mark the current path
}
  • 创建一堆决策

  • 如果一开始只有一个可能的方向(后退不起作用,以后再处理),那么继续前进,直到满足第一个决定

  • 用堆栈上所有可能的方向推送决策

  • 将路径设置为第一个可能的方向,然后朝该方向移动

  • 如果你最终做出了另一个决定:在3点继续

    如果您找到标记:abort,那么您找到了一种没有死胡同的可复制方法

    如果它是一个死胡同:返回到上一个决策节点(返回的第一个)并继续执行6

  • 弹出决策并尝试下一个可能的方向(设置新路径并推动决策),然后在5继续

    除非你已经试过了所有的方法,否则就退回另一个决定,继续第6步

    如果没有更多的决定(上面提到的特殊情况,我们在开始时走错了方向):继续前进,直到你满足第一个决定,然后在3点继续。这意味着您需要另一个布尔变量来指示是否应该在开始时向后

    当你从
    回来时必须小心,如果你想尝试
    下一步你必须左转,不要直行。因此,其中涉及到一些计算


  • 如果一开始就以错误的方式开始,那么该算法对于环形决策存在问题。我认为这可以通过设置一个上限来避免,例如,如果您仍然没有找到令牌并遇到30个决策节点(向前),那么您可能在循环中运行,因此请返回开始,现在不要尝试按递增顺序排列方向,而是按递减顺序排列方向

    “机器人应该使用线路传感器来跟踪线路。“我只是好奇——一个线路传感器对2路或3路分离有何反应?它有3个独立的传感器。每一个都有一个不同的值,只有中间的一个在这条线上。如果在左侧或右侧,一个新的方式启动其中一个传感器,左侧或右侧将在悬停在测线上时注意到一个黑色,这样会注意到一个拆分。随机选择分支如何?从描述中可以看出,您必须执行航位推算,以根据指令的运动确定位置。基本上,你需要跟踪你移动了多远以及每次向前移动的方向。无论如何,16/32kB在加载二进制文件后不会释放太多内存。也许你应该考虑一些额外的USB外部存储为您的纳米。关于位置:也许你可以用超声波传感器拼凑一个本地定位系统?(20kHz可提供厘米精度定位)谢谢!那可能正是我想要的。在第6步中,“弹出决策”-我想不是弹出决策,而是指我应该弹出方向(删除最后一条路径,并将新路径设置为下一个可能的方向)?@po0l是的,您将其设置为下一个可能的方向,并仅在有剩余可供探索时再次推动。你必须保持决策的原样,否则你可能会迷失方向。如果这是一条死胡同,所有决策都是以第一次遇到的方式为导向的,因此你还需要做出决策,以了解你之前探索的道路以及如何继续。