该算法将给定的地图分解成若干个cells(单元)。每个单元都是无障碍的,因此可以更简单的进行路径规划。对于每个单元,先规划一条boustrophedon路径,该路径上下往返平行于单元的上下边界,详细信息,请参阅参考文献下载链接。
此函数执行以下步骤:
- I.使用Sobel算子计算每个像素处的梯度方向。利用这些信息,可以计算出最适合单元格的方向,即令单元更长的方向,并且以这种方式旋转地图。这样就可以在最后一步中使用算法将找到的路径点简单地转换回原始方向。
- II.通过给定的地图扫描一个切片(莫尔斯函数),并检查这条线的连通性,即有多少连接段。如果连接增加,即出现更多的段,则会发生产生新的单独单元格的IN事件,如果连接减少,即段合并,则会发生将两个单元格合并在一起的OUT事件。如果发生事件,算法会沿着当前行检查critical points,即触发事件的点。从这些区域开始绘制单元格的边界,从critical points开始向左/向右移动,直到击中黑色像素。
- III.扫描切片确定所有单元后,算法使用轮廓检测找到这些单元格,并为每个单元提供一组像素点,用于从每个单元创建通用多边形。
- IV.创建所有多边形后,为所有的多边形规划路径以覆盖整个区域。为此,首先使用旅行商问题(TSP)公式,生成一条穿过所有单元的全局路径。这就产生了一个所有单元的最佳访问顺序。接下来,为每个单元确定一条boustrophedon路径,该路径在单元内和沿着单元边界的水平路径之间来回移动,以确保覆盖单元的整个区域。对于每个单元,找到最长的边并将其旋转,使之水平于x方向。这会产生更长但更少的边,从而改进小而长的单元所规划的路径。单元路径的起点由前一个单元的终点所确定,且两个单元路径之间的距离最小。单元路径是以旋转的方式确定的,因此在最后一步中,单元路径点将转换为原始单元内的点,然后插入全局路径中。
- V.上一步生成了一条视场路径。如果需要,这条路径将被映射到机器人视场所需跟随的路径。为此,只需应用矢量变换。如果计算出的机器人姿态不在自由空间中,则通过在视场半径内找到距离机器人上一位置最小的可访问点来生成。如果不需要这样做,则必须将相应的布尔值设置为false(显示应为机器人足迹执行路径规划)。