检查路径/最短路径中的障碍物

时间:2015-05-14 19:49:20

标签: python algorithm search

我正在研究模拟机器人程序(使用莫尔斯机器人模拟器),该程序涉及控制机器人在房间内(使用口语)与各种盒子,其他物体和其他机器人一起移动。我想机器人: 1.避开障碍物(箱子,其他机器人) 2.找到最短路径

目前,我忽略了动态障碍的问题,例如其他机器人不断改变位置,但最终肯定会发挥作用。

我知道A *搜索和Dijkstra的算法,并且过去已经实现了类似的图搜索算法;但是,这些程序涉及图形/网格搜索。目前,机器人的世界模型由世界范围内的对象字典表示,而不是基于图块的网格,其指示某些图块是否被填充。 E.g:

{Box = {position:(3,4)...},Robot = {position:(0,0)...}}

如果有必要,我可以完成将世界模型更改为网格/图形表示的过程,但在我看来,这似乎不是必需的。对于最短路径,莫尔斯模拟器将把“乌鸦的距离”从A点移动到B点 - 直接穿过任何障碍物。

因此,我想添加的是一个控制功能,用于检查机器人与其目的地之间的当前路径中是否有任何障碍物,如果是,则建议另一种N部分路线。

到目前为止,我在Python中实现的只是检查一个对象是否落在A点和B点之间的斜率范围内:

def check_for_obstacles(origin, destination):
     slope = get_slope(origin, destination)
     obstacles = []
     initialX = origin[0]
     for obj in world:
          worldObj = getattr(world, obj)
          pos = [worldObj.pos.x, worldObj.pos.y]
          yInt = slope * pos[0] + origin[1]
          diff = abs(pos[1] - yInt)
          if diff < 2: # Hard-coded footprint of object, for now
              obstacles.append(obj)
     return obstacles

在一些测试案例中,这似乎有效。据推测,一旦我得到路径中的障碍列表,我会找到一条新路径的三角测量,然后在我走的时候不断检查障碍物。这看起来像是一个合理的解决方案,还是我忽视了一些明显的东西?

0 个答案:

没有答案