Jump Point Search

Jump Point Search

有众多的算法能够在代价一致的均匀网格中(uniform-cost grid maps)搜索最短线性路径,常见的有A*,Dijkstra’s等。而JPS算法相比其他算法,省略了众多点插入和点删除的操作,有选择性地扩展必要的节点。因此有着很高的搜索效率。

原论文:Online Graph Pruning for Pathfinding on Grid Maps by Daniel Harabor and Alban Grastien

符号和术语

  • JPS算法工作于不定向的均匀网格地图中。
  • 每一次直线运动的代价为1,对角运动的代价为 2 \sqrt{2} 2
  • 涉及不可穿越节点(障碍物)的运动是禁止的。
  • y = x + k d ⃗ y=x+k\vec{d} y=x+kd 代表从 x x x 沿 d ⃗ \vec{d} d 方向运动 k k k 个单位可到达 y y y,当 d ⃗ \vec{d} d 为对角方向时,可分解为 d 1 ⃗ \vec{d_1} d1 d 2 ⃗ \vec{d_2} d2
  • π = < n 0 , n 1 , . . . , n k > \pi= π=<n0,n1,...,nk> 代表从 n 0 n_0 n0 n k n_k nk 的无周期有序路径; π ∖ x \pi\setminus x πx 代表不包含节点 x x x 的路径 π \pi π
  • l e n ( π ) len(\pi) len(π) 代表路径长度, d i s t ( n 0 , n k ) dist(n_0,n_k) dist(n0,nk) 代表两节点间的距离。

Jump Point

Jump Point Search_第1张图片

Neighbour Pruning Rules

Jump Point Search_第2张图片

考虑从父节点 p ( x ) p(x) p(x) 到节点 x x x 的两种运动:直线运动与对角运动。

直线运动:我们修剪所有满足以下约束的 n ∈ n e i g h b o u r ( x ) n\in neighbour(x) nneighbour(x)
l e n ( ⟨ p ( x ) , . . . , n ⟩ ∖ x ) ≤ l e n ( ⟨ p ( X ) , x , n ⟩ ) len(\left\langle p(x),...,n\right\rangle \setminus x)\le len(\left\langle p(X),x,n\right\rangle) len(p(x),...,nx)len(p(X),x,n)
对角运动:与直线运动相似,但不包含 x x x 的路径必须严格主导,即:
l e n ( ⟨ p ( x ) , . . . , n ⟩ ∖ x ) < l e n ( ⟨ p ( X ) , x , n ⟩ ) len(\left\langle p(x),...,n\right\rangle \setminus x)< len(\left\langle p(X),x,n\right\rangle) len(p(x),...,nx)<len(p(X),x,n)
假设 n e i g h b o u r ( x ) neighbour(x) neighbour(x) 不包含任何障碍物,则修剪过后留下的节点称为natural neighbour。当 n e i g h b o u r ( x ) neighbour(x) neighbour(x) 中存在障碍物时,则我们可能无法修剪所有的non-natural neighbour,这些因为障碍物而无法修剪的neighbour称为forced neighbour

Definition 1 如果节点 n ∈ n e i g h b o u r ( x ) n\in neighbour(x) nneighbour(x) 满足以下条件:

  • n n n 不是 x x x 的natural neighbour

  • l e n ( ⟨ p ( x ) , x , n ⟩ ) < l e n ( ⟨ p ( x ) , . . . , n ⟩ ∖ x ) len(\left\langle p(x),x,n\right\rangle)len(p(x),x,n)<len(p(x),...,nx)

    节点 n n n 是节点 x x x 的forced neighbour

Definition 2 如果 y y y 最小化了 k k k,使 y = x + k d ⃗ y=x+k\vec{d} y=x+kd ,且下列条件之一成立:

  • 节点 y y y 是终点

  • 节点 y y y 至少存在一个 forced neighbour

  • d ⃗ \vec{d} d 是对角运动,且存在节点 z = y + k i d i ⃗ z=y+k_i\vec{d_i} z=y+kidi z z z 根据前两个条件被判定为是 y y y 的跳点

    节点 y y y 是节点 x x x d ⃗ \vec{d} d 方向的跳点

Algorithmic Description

Jump Point Search_第3张图片

Jump Point Search_第4张图片

Jump Point Search_第5张图片

你可能感兴趣的:(无人机运动规划常用算法,算法,自动驾驶,人工智能)