人工势场法
原理
人工建立势场,将障碍物设置成斥力,目标设置成吸引力,进行力的矢量相加,最后算出合力的方向。
引力场
常用的引力函数:
这里的ε是尺度因子.ρ(q,q_goal)表示物体当前状态与目标的距离。引力场有了,那么引力就是引力场对距离的导数(类比物理里面W=FX):
斥力场
公式(3)是传统的斥力场公式。公式中η是斥力尺度因子,ρ(q,q_obs)代表物体和障碍物之间的距离。ρ_0代表每个障碍物的影响半径。换言之,离开一定的距离,障碍物就对物体没有斥力影响。
斥力就是斥力场的梯度
总的场就是斥力场合引力场的叠加,也就是U=U_att+U_rep,总的力也是对对应的分力的叠加,如下图所示:
优点:
简单实用,有良好的实时性
结构简单,便于底层的实时控制,在实时壁障和平滑的轨迹控制方面得到广泛的应用
缺点:
- 当目标点距离较远的话,引力将变得特别大,相对较小的斥力下,物体路径可能会碰到障碍物
- 当目标点附近有障碍物时,斥力将非常大,引力相对较小,物体很难到达目标点
- 在某个点,引力斥力刚好相等,方向相反,物体容易陷入局部最优解或震荡
- 容易陷入局部最优解
改进:
- 对于碰到障碍物的问题,可以通过修正引力函数来解决,避免距离过大导致引力过大。
和(1)式相比,(5)式增加了范围限定。d*_goal 给定了一个阈值限定了目标和物体之间的距离。对应的梯度也就是引力相应变成:
- 目标点附近有障碍物导致目标不可达的问题,引入一种新的斥力函数
这里在原有斥力场的基础上,加上了目标和物体距离的影响,(n是正数,我看到有篇文献上n=2)。直观上来说,物体靠近目标时,虽然斥力场要增大,但是距离在减少,所以在一定程度上可以起到对斥力场的拖拽作用
相应斥力变成:
所以可以看到这里引力分为两个部分,编程时要格外注意
- 局部最优问题是一个人工势场法的一个大问题,这里可以通过加一个随机扰动,让物体跳出局部最优值。类似于梯度下降法局部最优值的解决方案。