路径规划-人工势场法 (Artificial Potential Field)

人工势场法是局部路径规划的一种比较常用的方法。这种方法假设机器人在一种虚拟力场下运动。

1. 简介

如图所示,机器人在一个二维环境下运动,图中指出了机器人,障碍和目标之间的相对位置。 

这个图比较清晰的说明了人工势场法的作用,物体的初始点在一个较高的“山头”上,要到达的目标点在“山脚”下,这就形成了一种势场,物体在这种势的引导下,避开障碍物,到达目标点。

人工势场包括引力场合斥力场,其中目标点对物体产生引力,引导物体朝向其运动(这一点有点类似于A*算法中的启发函数h)。障碍物对物体产生斥力,避免物体与之发生碰撞。物体在路径上每一点所受的合力等于这一点所有斥力和引力的和。这里的关键是如何构建引力场和斥力场。下面我们分别讨论一下:

1.1. 引力场

常用的引力函数:

U_{\mathrm{att}}(\mathbf{q})=\frac{1}{2}\xi\rho^{2}(\mathbf{q},\mathbf{q}_{\mathrm{goal}}) (1)

这里的ε是尺度因子,\rho(q,q_{goal})表示物体当前状态与目标的距离。引力场有了,那么引力就是引力场对距离的导数(类比物理里面W=FX):

\mathbf{F}_{\mathrm{att}}(\mathbf{q})=-\nabla U_{\mathrm{att}}(\mathbf{q})=\xi(\mathbf{q}_{\mathrm{goal}}-\mathbf{q})(2)

引力场模型

1.2. 斥力场

\left.U_{\mathrm{rep}}(\mathbf{q})=\left\{ \begin{array} {ll}\frac{1}{2}\eta\left(\frac{1}{\rho(\mathbf{q},\mathbf{q}_{\mathrm{obs}})}-\frac{1}{\rho_{0}}\right)^{2}, & \quad\mathrm{if}\rho(\mathbf{q},\mathbf{q}_{\mathrm{obs}})\leq\rho_{0} \\ 0, & \mathrm{if}\rho(\mathbf{q},\mathbf{q}_{\mathrm{obs}})>\rho_{0t} \end{array}\right.\right. (3)

公式 (3) 是传统的斥力场公式。公式中η是斥力尺度因子,\rho(q,q_{obs})代表物体和障碍物之间的距离。\rho_0代表每个障碍物的影响半径。换言之,离开一定的距离,障碍物就对物体没有斥力影响。

斥力就是斥力场的梯度

斥力场模型

总的场就是斥力场合引力场的叠加,也就是U=U_{att}+U_{rep},总的力也是对对应的分力的叠加,如下图所示:

2. 存在的问题

  • 当物体离目标点比较远时,引力将变的特别大,相对较小的斥力在甚至可以忽略的情况下,物体路径上可能会碰到障碍物
  • 当目标点附近有障碍物时,斥力将非常大,引力相对较小,物体很难到达目标点
  • 在某个点,引力和斥力刚好大小相等,方向想反,则物体容易陷入局部最优解或震荡

3. 各种改进版本的人工势场法

  • 对于可能会碰到障碍物的问题,可以通过修正引力函数来解决,避免由于离目标点太远导致引力过大

和 (1) 式相比,(5) 式增加了范围限定。d^*_{goal }给定了一个阈值限定了目标和物体之间的距离。对应的梯度也就是引力相应变成:

  • 目标点附近有障碍物导致目标不可达的问题,引入一种新的斥力函数

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

相应斥力变成:

\begin{aligned} \mathbf{F}_{rep}(\mathbf{q}) & =-\nabla U_{\mathrm{rep}}(\mathbf{q}) \\ & \left.=\left\{ \begin{array} {ll}F_{\mathrm{rep}1}\mathbf{n}_{OR}+F_{\mathrm{rep}2}\mathbf{n}_{RG}, & \quad\mathrm{if}\rho(\mathbf{q},\mathbf{q}_{\mathrm{obs}})\leq\rho_{0} \\ 0, & \quad\mathrm{if}\rho(\mathbf{q},\mathbf{q}_{\mathrm{obs}})>\rho_{0} \end{array}\right.\right. (8) \\ \mathrm{where} \\ & F_{\mathrm{rep}1} =\eta\left(\frac{1}{\rho(\mathbf{q},\mathbf{q}_{\mathrm{obs}})}-\frac{1}{\rho_{0}}\right)\frac{\rho^{n}(\mathbf{q},\mathbf{q}_{\mathrm{goal}})}{\rho^{2}(\mathbf{q},\mathbf{q}_{\mathrm{obs}})} \\ & F_{\mathrm{rep}2} =\frac{n}{2}\eta\left(\frac{1}{\rho(\mathbf{q},\mathbf{q}_{\mathrm{obs}})}-\frac{1}{\rho_{0}}\right)^{2}\rho^{n-1}(\mathbf{q},\mathbf{q}_{\mathrm{goal}}) \end{aligned}

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

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

参考文献

路径规划算法初探_森林宝贝的博客-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中文论坛

### 人工势场算法流程图 #### 初始化阶段 - **定义参数**:设定目标位置、障碍物的位置以及它们的影响范围。初始化机器人的起始位置和速度[^3]。 ```matlab % 定义目标位置 goalPosition = [gx, gy]; % 障碍物列表,每个元素表示一个障碍物的位置及其影响半径 obstacles = {[ox1, oy1, r1], [ox2, oy2, r2]}; ``` #### 势场构建过程 - **计算引力**:根据当前机器人到目标的距离,按照预设函数(通常是距离平方的倒数)计算吸引力向量。 - **计算斥力**:对于每一个检测到的障碍物,依据其与机器人之间的距离按特定公式得出排斥力向量;如果距离超过一定阈值则认为无作用[^4]。 ```matlab function F_attraction = calculateAttractionForce(currentPos, goalPos) % 计算吸引力建议省略具体实现细节 end function F_repulsion = calculateRepulsiveForces(currentPos, obstacles) % 对所有障碍物循环调用此函数累加总斥力建议省略具体实现细节 end ``` #### 合并处理环节 - **合成净力**:将上述两部分得到的结果矢量相加以获得最终的作用力方向。 - **更新状态**:基于合力调整下一时刻的速度和位移,确保不会越过任何已知障碍物边界[^2]。 ```matlab F_total = F_attraction + sum(F_repulsions); newVelocity = updateVelocity(oldVelocity, F_total); nextPosition = currentPosition + newVelocity * deltaTime; ``` #### 判断终止条件 - **到达终点判断**:当机器人接近预定的目标点至可接受误差范围内时停止迭代。 - **异常情况处理**:遇到无法逾越的局部极小值或其他特殊情况应采取措施跳出陷阱或重新规划路线[^1]。 ```mermaid flowchart TD A[开始] --> B{是否完成初始化?} B ----> C[设置初始位置] B ----> E[返回继续初始化] C --> D[进入主循环] D --> F[获取当前位置] F --> G[计算引力] G --> H[遍历障碍物] H --> I[累积斥力] I --> J[求合外力] J --> K[预测新位置] K --> L{是否达到目标?} L ----> M[结束程序] L ----> N{是否存在局部最小?} N ----> O[尝试逃离策略] N ----> P[更新位置/速度] P --> Q[重复直到满足退出标准] O --> Q ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值