赞
踩
A:机器人,机器人上的点成为控制点(Control Points),用p表示
W:机器人所处的空间(Work Space),可以包含一系列bitmap,W中的点用x表示
C:Configuration,指定机器人在W中的位置、朝向,进一步可以对应到机器人身上的控制点,C集合的元素用q表示
C f r e e C_{free} Cfree:不会使机器人和障碍物发生碰撞的一系列Configuration的集合
BM:Bitmap,反映W中的障碍物分布情况,从Workspace中的x映射到1/0,1表示有障碍,0则为无障碍
* W e m p t y W_{empty} Wempty:W中满足BM(x)=0的点集,即非障碍物区域
X:前向运动映射(Forward Kinematic Map),X(p,q)→x,即从C作用于A,映射到W
在W域构造一个势场 V p i V_{p_i} Vpi,使每一个非障碍物点x都对应一个Potential值
下角标 p i {p_i} pi代表控制点,对于机器人上的不同控制点,可能有不同的目标位置,甚至障碍物等信息有差异,故每个控制点可以对应自己单独的势场。
构造 V p i V_{p_i} Vpi有如下两个目标:
为实现上述目标,用下面两步计算 V p i V_{p_i} Vpi:
对每个 x ∈ W e m p t y x∈W_{empty} x∈Wempty,计算 d 1 ( x ) d_1(x) d1(x),步骤如下:
① 设置地图边缘和障碍物外缘的点的
d
1
d_1
d1值为0
② 设置其邻点的
d
1
d_1
d1值为其
d
1
d_1
d1值+1
③ 循环往复进行传播,直到
W
e
m
p
t
y
W_{empty}
Wempty中的所有点都计算完毕
d1是从地图边缘和障碍物外缘同时向外递增传播的,其相遇处将形成d1的极大值,这些具有
d
1
(
x
)
d_1(x)
d1(x)极大值的x点将构成S(Work Space Skeleton “骨架”),如下图:
上图第一幅图对应第一张图的Skeleton。观察几幅Skeleton,可以发现,原地图上连通的区域,Skeleton上也一定会相连,作者提到其形式和Voronoi图很相似。
这里作者给出两种算法,NF1和NF2
NF1不使用d1和skeleton,直接设置目标点
V
p
i
(
x
g
o
a
l
)
=
0
V_{p_i}(x_{goal})=0
Vpi(xgoal)=0,从目标点向外递增传播(遇到障碍物时停止,不传播),得到的W域势场如下:
显然,它满足了第一个目标而未满足第二个目标,能沿梯度下降到达目标,但却并非尽可能远离障碍物。
NF2要用到d1和skeleton,算法如下:
简单来说,就是先把目标点连进Skeleton,构成新的Skeleton,先在Skeleton内由目标开始递增传播,Skeleton传播完成后再由Skeleton向全图递增传播。这样一来,在地图上任意给定起点,机器人都会沿梯度方向先行驶到Skeleton上,再顺着Skeleton上的梯度行驶到目标。联系Skeleton的特点,可以发现如此生成的势场可以同时满足两个目标。
关于生成势场的方式,作者提出可以不限于他给出的方式,比如若将算法第四步
V
p
(
y
)
V_p(y)
Vp(y)设置为
V
p
(
x
)
+
1
/
d
V_p(x)+1/d
Vp(x)+1/d,则靠近障碍物外缘/地图边缘时Potential值将趋于无穷。
作者给出的C域势场计算公式如下:
对于任意一个Configuration值,即q而言,机器人的C域势场为它在该Configuration下,所有控制点在其各自W域势场下的Potential值的一种组合(由G函数决定)
个人理解,区别于W域势场将机器人视为单点进行单一约束,C域势场可以同时考虑多个控制点,可以用于高自由度机器人甚至机械臂的运动规划。
δ \delta δ:W域地图分辨率
δ m i n \delta_{min} δmin、 δ m a x \delta_{max} δmax:同一场景下会有一套分辨率由低到高的地图,高分辨率数值小,用 δ m i n \delta_{min} δmin表示,低分辨率数值大,用 δ m a x \delta_{max} δmax表示
r m i n r_{min} rmin、 r m a x r_{max} rmax: r m i n = − l o g 2 ( δ m a x ) r_{min}=-log_2(\delta_{max}) rmin=−log2(δmax), r m a x = − l o g 2 ( δ m i n ) r_{max}=-log_2(\delta_{min}) rmax=−log2(δmin)
这里 r m i n r_{min} rmin对应W域低分辨率, r m a x r_{max} rmax对应W域高分辨率
类似地,用 Δ \Delta Δ和 R R R来表示C域分辨率, R = − l o g 2 ( Δ ) R=-log_2(\Delta) R=−log2(Δ)
当Configuration离散化后,每个q之间的间隔为
Δ
\Delta
Δ,用偏导数表示W域坐标随C域的q变化的情况(个人觉得,简单情况下这个值可以等于1吧),二者乘积即为相邻的q的变化造成的W域坐标的变化大小。
我们希望Configuration离散化的结果是相邻的q的变化不要造成太大的W域坐标的变化,那么令上式=nbtol×
δ
\delta
δ,也就是W域的几个分辨率(nbtol表示一个小整数),可得满足要求的C域分辨率为
用对数形式表示为
将下列值及nbtol=2带入上式可得
那么对数关系的-1,也就对应于x、y这两维上C域的分辨率是W域的一半。其实也刚好对应于nbtol的取值。
方法1:各控制点势场加权求和
特点:“雨露均沾”
缺陷:各控制点都想尽可能到达自己的目标位置,加剧了这种竞争。并且这种加权组合容易产生local minima,造成规划失败
方法2:取最小值
特点:“捷足先登”,哪个控制点已经离自己的目标点更近了,就优先让它到达
优势:减小了产生local minima的几率
缺陷:一旦一个控制点抵达目标,G值将降至0,其他控制点将不能再在当前基础上向其目标运动
改进:ε为较小的实数,举例可以取0.1,需要根据不同机器人进行不同选择以达到最佳效果
方法3:取最大值
特点:“锱铢必较”
缺陷:更加加剧竞争,更容易产生local minima(但一定程度上降低其volume)
优势:很适合于高自由度机器人和机械臂
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。