对于一个在有许多障碍物(如房屋、树木、车库等复杂边界)区域工作的自主移动割草机,其最好的zig-zag弓字形运动是什么?是可以最小化冗余遍历数量的方案吗?还是最小化需要停止和旋转次数的呢?这是覆盖规划的一个例子,覆盖规划在诸如割草、自动耕作、喷漆、清洁和扫雷等诸多领域具有极高的应用价值。即使对于 W = R 2 {W}= {\mathbb{R}}^2 W=R2中的一个区域,通过将其归结为密切相关的旅行商问题,找到覆盖规划的最优长度解也是NP难的。因此即使在 R 2 {\mathbb{R}}^2 R2中,我们也愿意容忍覆盖问题的近似或甚至启发式的解决方案。
Boustrophedon分解规划
解决覆盖问题的一种方法是将
C
f
r
e
e
C_{free}
Cfree分解为单元,并在每个cell(单元)中执行boustrophedon规划,如图所示。假设机器人处于是
W
=
R
2
\mathcal{W}=\mathbb{R}^2
W=R2中的一点,机体自身覆盖宽度为的
ϵ
\epsilon
ϵ。这使它能够在向前移动时,机器人的两侧可以各覆盖
C
f
r
e
e
C_{free}
Cfree中
ϵ
/
2
\epsilon/2
ϵ/2的部分。打印机(增材制造)中经常使用这种规划来减少往复的次数。
如果
C
o
b
s
C_{obs}
Cobs是多边形,则通过采用垂直分解方法以得到合理的分解。在该算法中,对一些情况定义了critical events临界事件,其中一些与boustrophedon规划无关。唯一需要处理的事件如图所示。这会产生一个更少单元的分解。尽管单元是非凸的,但它们总是可以很好地切成垂直的条带,这使得它们适合于boustrophedon规划。原始的垂直分解也可以使用,但是额外的单元边界会导致机器人不必要的重新定位。基于线扫描的最优分解中提出了一种类似的方法,进一步优化了机器人的转弯次数。
Spanning tree 生成树覆盖规划
Gabriely和Rimon开发出一种有趣的近似方法,它将一个正方形放置在
C
f
r
e
e
C_{free}
Cfree内,并计算得到的连通图的生成树。再次假设
C
f
r
e
e
C_{free}
Cfree是多边形的,如图a所示。第一步是用正方形平铺
C
f
r
e
e
C_{free}
Cfree的内部,如图b所示。对于某些常量
ϵ
>
0
\epsilon>0
ϵ>0,每个正方形的宽度应为
ϵ
\epsilon
ϵ。接下来,通过在每个正方形的中心放置一个顶点并定义一条连接每对相邻立方体中心的边来构造路线图c。下一步是计算
G
\mathcal{G}
G的生成树。这是一个没有圈的连通子图,它触及
G
\mathcal{G}
G的每个顶点;如果
G
\mathcal{G}
G有
n
n
n各边,它可以在
O
(
n
)
O(n)
O(n)中计算。有许多可能的生成树,并且可以定义和优化一个标准来诱导偏好,如图c所示。
生成生成树后,从生成树附近的一点开始沿着生成树的周长跟踪,即可获得如图所示的路径。将平铺的分辨率提高一倍,并形成相应的路线图。路线图的一部分对应于生成树,但也包括环绕生成树的循环路径。这条小路通向新区域的中心。一般来说,该方法一旦给出近似就得到最优路径。