Randomized Kinodynamic Planning
Steven M. LaValle
James J. Kuffner, Jr.
1. Exploring the State Space – 构造随机搜索树
即不断在整个状态空间随机产生状态点
x
r
a
n
d
x_{rand}
xrand,在已生成的树上找到其最近邻
x
n
e
a
r
x_{near}
xnear,向其施加控制
u
n
e
w
u_{new}
unew,产生一个由当前搜索树向
x
r
a
n
d
x_{rand}
xrand靠近的状态点
x
n
e
w
x_{new}
xnew,并把
x
n
e
w
x_{new}
xnew加入搜索树中,循环往复。
由当前搜索树向随机点靠近的过程称为扩展(EXTEND),这个过程会隐式地进行碰撞检测,保证
x
n
e
w
x_{new}
xnew不会发生碰撞(即作者提到的满足全局约束–Global Constraints)。
扩展有三种结果:
Reached:到达
x
r
a
n
d
x_{rand}
xrand
Advanced:未到达
x
r
a
n
d
x_{rand}
xrand但还在向其靠近
Trapped:无法再向
x
r
a
n
d
x_{rand}
xrand靠近,其示意图如下
作者提出,这样产生的搜索树可以迅速地搜索到整个状态空间(Exploring the State Space)
2. Bidirectional Planning Algorithm – 向指定目标寻径
上述构建搜索树的过程可以看做广度搜索,向整个状态空间蔓延。当由起点向一个具体的目标寻径时,使用“双向”的想法,由起点和目标点每次向随机产生的同一个 x r a n d x_{rand} xrand扩展,一旦一方到达且另一方未Trapped,则认为寻径成功,并将其返回。
上述双向连结搜索树的缺陷:会出现两段路径不连续的情况。
论文后半部分给出了不同自由度和维度的场景应用RRT进行规划的结果:
3. 一点补充
一开始我对RRT的一个疑惑是,既然每次都能定向地向环境中随机生成的点扩展,为什么不干脆每次都定向地向目标点扩展,这样不是更快地就能到达目标点吗?
向了解RRT的朋友请教后思考了一下,我的理解是这样的:
如果每一次都定向地向目标扩展,那么实际上算法生成规划路径的唯一标准是:离目标越近越好。那么这样一个单一的标准是否能满足我们的规划需求呢?
想象如下情况,机器人处在一个U形障碍物内部,目标点位置如图:
如果按上述标准规划,那么机器人一定会往前走直到被挡住,且很有可能因为其“只想无限接近目标”而在前面那堵墙附近一直震荡。
可以发现,在类似的情况中,仅考虑离目标的距离,是无法得到我们预期的规划结果的,相反可能限制自身而出现上述震荡情况。
那么,随机搜索的目的就在于规避这种情况的发生,当被挡住了前路,不至于一直震荡,而会随机向其他方向走。就像当一个人朝着目标走,前方被挡住了,他不至于死脑筋地还是一直在这堵墙前面徘徊,而会随意地向其他方向走一走,试试能不能“绕路”抵达目标。
当然,随机化本身也增加了一些不必要的“绕路”成本,这是为了平衡单一目标导向所产生的弊端所必然带来的。
※进一步地
后面提出的双向连结随机树,甚至扩展时一定程度上加入目标导向(一定概率下把目标点作为生成的随机点),都可以让算法加速搜索到目标。
–
最后放一篇看到的很详细的介绍RRT搜索的文章
https://www.cnblogs.com/21207-iHome/p/7210543.html