快速算法,可以随时随地在2D地图上找到未知的网格目标

时间:2019-05-21 01:58:07

标签: c++ graph-algorithm path-finding a-star robotics

我有一辆流浪者在移动地图。它存储有关节点中每个网格位置的数据。它存储是否已对其进行了探索/探索(即传感器已扫描该网格位置)或已访问(该漫游车在该点是实际的)或是否被阻止。我正在使用A *帮助查找路径。因此,从源位置(流动站位置)转到目标位置。这些目标位置是其创建的地图中未开发的部分。

数据存储在链接的网格数组中,基本上每个节点都有8个指向每个周围网格位置的指针。已探索的每个父位置将创建/填充未探索的周围节点。如果已访问/感知到每个被探查的节点,或者被阻止/可导航,则标记每个探查的节点。对于所有期望探索位的事物,未探索只是空的。

我正在寻找的是一种算法,可以帮助您找到下一个未探索的目的地。最有可能是最接近的地图,但是随着地图尺寸的增加,它必须能够保持快速运行。

我尝试创建一个约2倍于单位节点大小的2d数组,但是遇到的问题是,当探索该大小的所有节点时,它会失败。我正在考虑尝试检查每个节点,从源节点向外盘旋。但这将检查许多已经看到的节点,并且随着地图的增长而变得笨拙。事实是,外围总是有未开发的节点。大型对象内部的任何节点。 (我仍然需要找到一种方法来更改这些节点)。

我还没有任何代码。

我期望的是一种找到未探索位置的快速算法,因此我可以使用在我的A *路径查找中具有目标点的算法。

1 个答案:

答案 0 :(得分:0)

您可能具有带有指向周围对等点的“链接晶格”指针的2d数组,因此您可以链接到新的周围区域而无需调整数组的大小。

FROM alpine

# Upgrade grep so that it supports -Po flags
RUN apk add --no-cache --upgrade grep

ENV IPADDRESS "ip a show eth0 | grep -Po 'inet \K[\d.]+'"

如果您希望它任意缩放,则可以对其进行自动化,以便在完全探究任何9个数组后,它会添加一个更高级别的索引,其中2d数组中的每个位都指示第二高索引中的2d数组是否具有已经进行了全面的探索,但是,如果这种“漫游者”以某种方式是物理的,那么它可以探索的数量就会受到时间的限制,并且您可能不需要这种可伸缩性。