人工势场法

原理

人工建立势场,将障碍物设置成斥力,目标设置成吸引力,进行力的矢量相加,最后算出合力的方向。
人工势场法
人工势场法

引力场

常用的引力函数:
人工势场法
这里的ε是尺度因子.ρ(q,q_goal)表示物体当前状态与目标的距离。引力场有了,那么引力就是引力场对距离的导数(类比物理里面W=FX):

人工势场法人工势场法

斥力场

人工势场法
公式(3)是传统的斥力场公式。公式中η是斥力尺度因子,ρ(q,q_obs)代表物体和障碍物之间的距离。ρ_0代表每个障碍物的影响半径。换言之,离开一定的距离,障碍物就对物体没有斥力影响。

斥力就是斥力场的梯度
人工势场法
人工势场法
总的场就是斥力场合引力场的叠加,也就是U=U_att+U_rep,总的力也是对对应的分力的叠加,如下图所示:

人工势场法

优点:

简单实用,有良好的实时性
结构简单,便于底层的实时控制,在实时壁障和平滑的轨迹控制方面得到广泛的应用

缺点:

  1. 当目标点距离较远的话,引力将变得特别大,相对较小的斥力下,物体路径可能会碰到障碍物
  2. 当目标点附近有障碍物时,斥力将非常大,引力相对较小,物体很难到达目标点
  3. 在某个点,引力斥力刚好相等,方向相反,物体容易陷入局部最优解或震荡
  4. 容易陷入局部最优解

改进:

  1. 对于碰到障碍物的问题,可以通过修正引力函数来解决,避免距离过大导致引力过大。
    人工势场法和(1)式相比,(5)式增加了范围限定。d*_goal 给定了一个阈值限定了目标和物体之间的距离。对应的梯度也就是引力相应变成:
    人工势场法
  2. 目标点附近有障碍物导致目标不可达的问题,引入一种新的斥力函数

人工势场法
这里在原有斥力场的基础上,加上了目标和物体距离的影响,(n是正数,我看到有篇文献上n=2)。直观上来说,物体靠近目标时,虽然斥力场要增大,但是距离在减少,所以在一定程度上可以起到对斥力场的拖拽作用
相应斥力变成:
人工势场法

所以可以看到这里引力分为两个部分,编程时要格外注意

  1. 局部最优问题是一个人工势场法的一个大问题,这里可以通过加一个随机扰动,让物体跳出局部最优值。类似于梯度下降法局部最优值的解决方案。