Boustrophedon细胞分解仅是将环境细分为可以由牛齿path路径有效覆盖的区域。可以进行梯形分解,并且可以使用行扫描算法来完成。参见[Choset 2000],该网站
,或(我建议!)马克·德·伯格等人的著作《计算几何学》(Computational Geometry)。等,以完整描述所需的数据结构和算法。
乔塞特,豪伊。“已知空间的覆盖范围:Boustrophedon细胞分解” 自动机器人,2000年。
例如,将一组障碍视为边缘和顶点。假设环境也受到特殊多边形的限制。我们有类似以下内容。为了分解该空间,我们只需在每个顶点和最近的线或顶点之间添加垂直边。
要在代码中完成此操作,您只需要一个线段相交测试,一个排序的边列表和一个排序的顶点列表。
- 从每个顶点以从左到右的顺序,vi
- 在每个处创建一条垂直线,一直延伸到与之相交的第一条边或顶点livi
- 在每个相交处,创建一个新顶点。
完成此操作后,一组新的边和顶点将仅包含梯形。但我要强调,您不能在线进行此操作(没有事先了解障碍的情况)。如果您想在没有先验知识的情况下进行可靠的覆盖,则可以查看“错误算法”。特别是,这是一个简单的算法,假设环境是有界的。
从开始位置向上和向左移动,直到到达环境的左上角。如果您首先遇到障碍,则必须绕过障碍。您知道如果可以绕过某些物体(颠簸和移动),则它是一个障碍。
从左上角向右移动,直到遇到边界。然后向下移动并向左移动(我们正在对整个空间进行牛头怪)。
当您在左右线上遇到障碍物时,有两种选择。(i)我们可以绕行直到到达我们要覆盖的左右线,然后继续。(ii),我们可以转身并覆盖一条新的左右线,直到我们越过障碍物或再次陷入这种情况。我会说明。
在左侧,我们绕过障碍物,直到可以返回到我们试图遵循的“线”。在右侧,我们继续覆盖障碍物一侧的(较小)区域。
第一种方法的优点是,在决定如何绕过障碍物之前,您始终会先将障碍物完全标出,从而可以走更短的路。第二种方法的优点是您完全不必绕开障碍,您可以继续覆盖您所在的区域。
请注意,这以在线方式定义了牛牙根分解:您覆盖了障碍物之间或障碍物与边界之间的区域。
但是,据我所知,第一种方法更易于分析。选择更复杂的算法(例如BFS等),是因为环境不受限制(您不想永远花时间寻找边界),或者在基本上划分环境的方式中存在着非常讨厌的障碍。为什么这样不好?看这个例子:
移动左右,然后盘旋每个障碍产生的方式各障碍物之间的小零件太多的封面。实际上,如果没有全局路径规划,则可以通过将这些列设置为1 px宽,与整个环境一样高且相隔1 px来使它与网格的分辨率一样糟糕。然后,每次碰到障碍物时,您都必须绕过障碍物。
这就是为什么我问您是否对环境的位置有所了解或可以进行全局路径规划的原因。但是,在线与离线讨论以及针对此的最佳算法并不是您真正想要的。
更新:我必须删除图像(而不是https),并将其发布出来,这在实际的实际应用程序中经常使用。http://www.cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/yamauchi_frontiers.pdf