Cell Decomposition系列路径规划算法——ECD、ACD
做个正直的人
思想
cell decomposition算法看名字,即将整个的search space分解(decomposition)为许多的相互毗邻的cell,然后把这些cell表示为一个node,每两个相邻的cell所对应的两个node用edge连接。这样整个search space就变成了一个graph。如果场景中不存在hole,那么这一个graph将会是一个connectivity graph。随后应用一些图搜索算法(比如深度优先搜索DFS、广度优先搜索BFS、Dijkstra算法等)就可以找到一条从起点到目标点的路径。
CD算法本文讲三个,分别是
- Exact Cell Decomposition 即 ECD
- Approximate Cell Decomposition 即 ACD
- Probability Cell Decomposition 即 PCD
1、ECD
ECD算法的第一步是将整个的search space分解为诸多的cell。那这个分解的方法就五花八门了。但是有一些方面是各个方法都必须满足的。
- cell是整个连通区域,内部不能有洞
- cell应该是一个凸形状,比如凸多边形
cell是一个连通区域很容易理解,毕竟这个cell里面竟然还留有障碍物是不允许的。那为什么必须是凸的呢?我们看下面两幅图
上图中,左图是一个凸多边形,要知道CD是要把一个cell用一个node来表示的,这意味着我们认为机器人在一个cell内部运动的时候是绝对安全的,凸多边形是满足这一要求的;右图是一个非凸多边形,我们看其中的橙色路径,机器人想从cell内部的一点沿着这条路径运动到另一点,那试问,机器人的运动绝对安全吗?certainly not. 因此,分解出的众多cell必须都是凸的。
1.1 最少化cell分解方法
如上图这种分解方法,通过重点关注环境中的“顶点”来分解,该方法确实获得了最少的cell,但是当场景中存在hole的时候,就成了一个NP-hard问题,因此这种分解方法实际上效率很低,很不好用。
1.2 垂直线分解
如上图这种分解方式,在场景中放置一系列(n条)垂直的线,这些线在碰到障碍物或者墙壁的地方被切断,这样就在场景中出现了许多的垂直线段,我们就取这些线段的中点作为node来表示整幅search space。
其时间复杂度为O(n logn)。
1.3 排布分解方法(Arrangement Method)
如上图,该算法的思路是将场景中的线段向两边延长,这样许许多多的直线就把整个search space分解成了许多的cell。然而可以看到这种方法分解出的cell区域太小、数量太多,给搜索阶段带来了更大的计算量。因此排布分解还会对分解出的cell进行一次合并,来祛除那些不必要的cell。该算法的时间复杂度是 O ( n 3 ) O(n^3) O(n3)。
1.3.1 排布分解方法的步骤
- 把表示障碍物和墙壁的线段延长成为直线
- 统计场景中的交点和边并用一个合适的数据结构来存储由这些边和点未成的 cell
- 把那些不必要的cell给合并(这一步见1.3.2)
- 为每一个cell计算环境信息,比如跟哪一段墙壁、哪一个障碍物、哪些cell相邻。
1.3.2 合并不必要的cell
如上图两个cell——X和Y。可以看到X和Y的公共边是由 w 1 w_1 w1的延长线组成的,然而我们发现 w 1 w_1 w1