用于在字段中定位对象的最快算法

时间:2012-11-09 22:23:10

标签: java algorithm lejos-nxj

在字段中定位对象的速度方面,最好的算法是什么?

该区域由18×18个正方形组成,边长30.48厘米。机器人放置在方形(0,0)中,其工作是到达光源,同时避开沿途的障碍物。为了定位光源,机器人进行360度转动以找到具有最高光读数的角度,然后朝向光源行进。它可以可靠地检测100厘米的光源。

我现在正在实现的方式是我将每个磁贴的信息存储在2x2阵列中。瓷砖的可能值未经探测(默认),被阻挡(有障碍物),空(那里没有任何东西)。我正在考虑使用DFS算法,其中孩子处于位置(i + 3,j)或(i,j + 3)。然而,考虑到我将进行旋转来定位每个孩子的最高光读数的角度,我认为可能有一种算法能够比DFS更快地定位光源。此外,我将只在x和y方向上行进,因为机器人将使用地板上的网格线来修正它的x和y位置。

如果能够建议快速可靠的算法来完成这项任务,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

这是一个非常广泛的问题,我不是专家,所以我的回答是基于“第一原则”的思考,而不是在该领域的经验。

(我假设你的机器人通常没有障碍物的视线和运动;即它是一个有分散障碍物的开放区域,而不是迷宫。)

问题在于解释从360度扫描中获得的信息。

  • 如果机器人看到光源,那么遍历到光源的路线要么是微不足道的,要么是“简单”的迷宫步行任务。

  • 难点在于您没有看到来源。这可能意味着来源不在可见性范围内。但它也可能意味着光线在障碍物后面。不幸的是,像你这样的简单传感器无法区分这两种情况。

如果您的传感器系统允许您查看障碍物,则可以绘制“阴影”区域(障碍物后面的区域)的位置,并使用它来跟踪要搜索的位置。因此,您的策略是访问少数几个位置并对每个位置进行扫描,然后有条不紊地“整理”一些处于阴影中的区域。

但是由于你不能轻易分辨出阴影区域的位置,你需要一种(最终)在任何地方搜索的算法。 DFS是一种在任何地方搜索的一般策略,但它通过(实际上)首先查看角落和缝隙来实现。更好的策略是进行广度优先搜索,如果大范围扫描没有找到光源,则只能访问角落和缝隙。


  

如果能够建议快速可靠的算法来完成这项任务,我将不胜感激。

我认为你需要自己开发一个。 (这不是问题/任务/竞争的重点吗?)

答案 1 :(得分:0)

虽然它可能看起来不像,但这看起来更像是一个迷宫问题而不是任何事情。我想这是一种挑战或竞争的情况,总是从开始到目标的路径,但假设没有片刻。机器人导航完全被障碍物包围的信标的成功结果之一将是报告,其描述信号周围的障碍物的闭合路径。如果没有这样一条封闭的道路,那么你可以在某处找到一个洞;这就是为什么看起来像迷宫一样。

所以我选择的基本算法是从一个螺旋向内的横向开始,扫出一条足够窄的路径,这样你就可以确定看到一个灯塔。如果没有障碍物(退化情况),则会在最短时间内找到目标。 (提示:每转一圈都会减少传感器每步可以定位的细胞数量。)

将螺旋遍历逆时针旋转。那么你所拥有的是通过将右手放在墙上并遵循生成的路径来解决迷宫的规则。在这种情况下,你有一个复杂的问题,即迷宫的起点在边界上,但结尾可能不是。在这种情况下,右手触摸路径可能会失败。检测到这种情况需要在靠近隔离墙的地区寻找“空洞”。