大家好,又见面了,我是你们的朋友全栈君。
人工势场法是局部路径规划的一种比较常用的方法。这种方法假设机器人在一种虚拟力场下运动。
1. 简介
如图所示,机器人在一个二维环境下运动,图中指出了机器人,障碍和目标之间的相对位置。
这个图比较清晰的说明了人工势场法的作用,物体的初始点在一个较高的“山头”上,要到达的目标点在“山脚”下,这就形成了一种势场,物体在这种势的引导下,避开障碍物,到达目标点。
人工势场包括引力场合斥力场,其中目标点对物体产生引力,引导物体朝向其运动(这一点有点类似于A*算法中的启发函数h)。障碍物对物体产生斥力,避免物体与之发生碰撞。物体在路径上每一点所受的合力等于这一点所有斥力和引力的和。这里的关键是如何构建引力场和斥力场。下面我们分别讨论一下:
1.1. 引力场
常用的引力函数:
这里的ε是尺度因子,表示物体当前状态与目标的距离。引力场有了,那么引力就是引力场对距离的导数(类比物理里面W=FX):
1.2. 斥力场
公式(3)是传统的斥力场公式。公式中η是斥力尺度因子,代表物体和障碍物之间的距离。代表每个障碍物的影响半径。换言之,离开一定的距离,障碍物就对物体没有斥力影响。
斥力就是斥力场的梯度
总的场就是斥力场合引力场的叠加,也就是U=U_att+U_rep,总的力也是对对应的分力的叠加,如下图所示:
2. 存在的问题
- 当物体离目标点比较远时,引力将变的特别大,相对较小的斥力在甚至可以忽略的情况下,物体路径上可能会碰到障碍物
- 当目标点附近有障碍物时,斥力将非常大,引力相对较小,物体很难到达目标点
- 在某个点,引力和斥力刚好大小相等,方向想反,则物体容易陷入局部最优解或震荡
3. 各种改进版本的人工势场法
- 对于可能会碰到障碍物的问题,可以通过修正引力函数来解决,避免由于离目标点太远导致引力过大
和(1)式相比,(5)式增加了范围限定。d*_goal 给定了一个阈值限定了目标和物体之间的距离。对应的梯度也就是引力相应变成:
- 目标点附近有障碍物导致目标不可达的问题,引入一种新的斥力函数
这里在原有斥力场的基础上,加上了目标和物体距离的影响,(n是正数,我看到有篇文献上n=2)。直观上来说,物体靠近目标时,虽然斥力场要增大,但是距离在减少,所以在一定程度上可以起到对斥力场的拖拽作用
相应斥力变成:
所以可以看到这里引力分为两个部分,编程时要格外注意
- 局部最优问题是一个人工势场法的一个大问题,这里可以通过加一个随机扰动,让物体跳出局部最优值。类似于梯度下降法局部最优值的解决方案。
参考文献
路径规划算法初探_森林宝贝的博客-CSDN博客_局部路径规划算法
Artificial Potential Field Approach and its Problems – General Discussions – RobotShop Community
matlab改进人工势场法模拟机器人路径规划,避障_人工势场法改进领航跟随法的控制算法实现-Matlab文档类资源-CSDN下载
http://www.cs.cmu.edu/~motionplanning/lecture/Chap4-Potential-Field_howie.pdf
帮忙分析一下人工势场法的局部路径规划程序 – MATLAB中文论坛
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151072.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...