news 2026/8/21 11:21:20

第222篇 势场法——经典但仍有生命力的局部规划方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第222篇 势场法——经典但仍有生命力的局部规划方法

局部规划方法讲了好几个了(DWA、TEB、Lattice Planner)。今天讲一个最老牌的——势场法(Potential Field)。这算法是Khatib在1986年提出的,快40年了,但面试中还是经常被问到。讲真,势场法的思想非常朴素:目标点产生引力,障碍物产生斥力,机器人沿着合力方向走。

势场法的核心优势是计算极快——每个控制周期只需要算一次引力和斥力的矢量和。劣势也很明显:局部最小值、狭窄通道中振荡、目标点附近不可达。但它的思想影响了很多后续算法,理解势场法对学习其他规划方法有帮助。

一、势场法的基本原理

势场法把机器人看作一个在力场中运动的质点。力场由两部分组成:

引力场:目标点产生引力,方向指向目标,大小和距离成正比(或二次函数)。离目标越远,引力越大。

斥力场:障碍物产生斥力,方向远离障碍物,大小和距离成反比。离障碍物越近,斥力越大。超过一定距离后斥力为零。

机器人受到的合力 = 引力 + 所有障碍物的斥力。沿合力方向移动一步,重复这个过程直到到达目标。

def potential_field(robot_pos, goal, obstacles): # 引力:指向目标 F_att = k_att * (goal - robot_pos) # 斥力:远离障碍物 F_rep = Vector2D(0, 0) for obs in obstacles: d = distance(robot_pos, obs) if d < rho_0: # 影响范围 F_rep += k_rep * (1/d - 1/rho_0) * (1/d**2) * normalize(robot_pos - obs) # 合力 F_total = F_att + F_rep return normalize(F_total) * max_speed

二、势场法的三个经典问题

势场法有三个广为人知的问题,面试几乎必问。

局部最小值:引力和斥力可能恰好抵消——机器人卡在一个点上不动了。典型的场景是U型障碍物:机器人走到U的底部,两边墙壁的斥力和目标的引力平衡,卡住了。解决办法:加随机扰动(跳出局部最小值)、用虚拟目标(把目标临时移到别处引导机器人绕过去)、或者结合全局规划器。

狭窄通道振荡:机器人通过狭窄通道时,两边障碍物的斥力方向相反,合力在通道方向上来回摆动。机器人可能在通道口左右抖动,无法通过。解决办法:增加斥力的方向性(只考虑最近障碍物的斥力)、或者在通道中用虚拟墙引导。

目标不可达:当机器人接近目标时,如果目标附近恰好有障碍物,斥力可能大于引力。机器人到不了目标——在目标附近徘徊。解决办法:修改引力函数(离目标近时引力用线性函数而不是二次函数),或者让斥力在目标距离很近时衰减。

# 解决目标不可达的改进引力函数 def attractive_force(pos, goal): d = distance(pos, goal) if d < threshold: return k_att * d # 线性引力(近处) else: return k_att * d**2 / 2 # 二次引力(远处)

三、势场法的工程应用

讲真,纯势场法在工程中用得不多——问题太多了。但势场法的思想被广泛借鉴。

DWA的评价函数中heading和clearance本质上就是引力和斥力。TEB的优化目标中也有避障项,思路类似。甚至深度强化学习中的奖励函数设计,也经常借鉴势场法的思想。

工程上如果要用势场法,一般做以下改进:

  • 结合全局规划器(A*或RRT给出粗略路径,势场法做局部避障)
  • 用虚拟子目标避免局部最小值
  • 斥力只考虑最近的一个障碍物(避免振荡)
  • 加入阻尼力(和速度方向相反的力,减少振荡)

势场法在机械臂中的应用:势场法最初就是为机械臂提出的(Khatib 1986)。在关节空间中,目标位姿产生引力,障碍物产生斥力。机械臂的关节沿着合力方向移动。这个思路在简单场景中效果不错——特别是障碍物少、空间开阔的场景。但在复杂cluttered环境中,关节空间的局部最小值问题很严重。

势场法与导航代价地图:在ROS导航中,代价地图(costmap)本质上就是一个势场——障碍物中心代价高,远处代价低。DWA和TEB在评价轨迹时都参考代价地图。所以可以说,代价地图就是势场法的一种离散化实现。

改进型势场法:学术界提出了很多改进版本。比如Harmonic Potential Field(调和势场)——用拉普拉斯方程求解势场,保证没有局部最小值(但计算量大,需要求解偏微分方程)。Navigation Potential Field——修改斥力函数,保证目标点是全局最小值。这些改进版在理论上解决了部分问题,但工程上因为计算复杂度太高,用得不多。

四、面试实战

Q:势场法的优缺点是什么?A:优点是计算极快,实现简单,路径平滑。缺点是局部最小值、狭窄通道振荡、目标不可达。工程上需要配合全局规划器和各种改进策略。

Q:势场法和DWA有什么区别?A:势场法在每个点算合力方向,沿合力方向走——没有速度概念,不考虑运动学约束。DWA在速度空间中采样,考虑了速度、加速度限制。DWA路径质量更好,但计算量更大。

Q:势场法在实际项目中用过吗?A:纯势场法没有直接用过。但势场法的思想在很多地方用到过——比如深度强化学习的奖励函数设计中,用距离目标的负值作为引力奖励,用碰撞惩罚作为斥力。另外在做路径平滑时,用类似势场法的力来把路径推离障碍物。

Q:怎么解决势场法的局部最小值问题?A:三种常见方法。一是加随机扰动——给合力加一个随机方向的小力,让机器人有机会跳出局部最小值。二是虚拟子目标——检测到机器人卡住时,临时设一个中间目标,引导机器人绕过障碍物。三是结合全局规划——用A*或RRT给出全局路径,势场法只负责局部避障。

Q:势场法的计算复杂度是多少?A:每个控制周期O(N),N是障碍物数量。计算每个障碍物的斥力是O(1),求和是O(N)。加上归一化和移动是O(1)。总复杂度O(N)。非常高效——即使有上千个障碍物,单次计算也在微秒级。

Q:势场法能处理动态障碍物吗?A:能。势场法天然支持动态障碍物——每个控制周期重新计算合力就行。障碍物的速度不影响势场计算(标准势场法不考虑障碍物速度)。但如果障碍物移动很快,机器人可能反应不过来——因为势场法没有预测能力。改进方案是加入速度势场——根据障碍物速度方向调整斥力方向。

Q:势场法的引力和斥力权重怎么调?A:k_att和k_rep的比值决定了机器人的行为。k_att大,机器人更积极地朝目标走,但可能撞障碍物。k_rep大,机器人更保守,但可能绕远路。工程上一般k_att取1.0,k_rep取100-200(斥力影响范围rho_0取0.5-1.0m)。具体数值需要根据机器人大小和速度调。

Q:势场法在面试中怎么回答比较好?A:先讲基本原理(引力+斥力),再讲三个经典问题(局部最小值、振荡、目标不可达)和解决方案,最后聊工程应用(DWA/TEB中的势场思想、代价地图的本质)。如果能提到Harmonic Potential Field和改进版本,面试官会觉得你理解得比较深。

小结

势场法的核心:目标产生引力,障碍物产生斥力,机器人沿合力方向移动。计算极快,但有局部最小值、振荡、目标不可达三个经典问题。

优势:计算快,实现简单,路径平滑。 劣势:局部最小值,狭窄通道振荡,目标不可达。

势场法虽然古老,但思想影响深远。DWA、TEB等现代方法中都能看到势场法的影子。在深度强化学习中,势场法的思想被用来设计奖励函数和课程学习策略。面试中势场法是基础考点——要能讲清楚原理和三个经典问题的解决方案。能聊到改进版本和工程应用就更好了。下一篇讲混合A*——结合A*搜索和非完整约束的规划算法。


如果这篇文章对你有帮助,欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。

「机器人软件开发面试·从入门到精通」连载系列

上一篇:第221篇 Lattice Planner——基于状态格子的局部规划

下一篇预告:第223篇 混合A*——结合A*搜索与非完整约束

有任何问题欢迎评论区留言,我会尽量回复。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 11:17:08

【毕设分享】SSM校园互助与闲置交易平台62145

源码获取 私信联系我即可~ 大家点赞、收藏、关注、评论啦 精彩专栏推荐订阅&#xff1a;在下方专栏&#x1f447;&#x1f3fb; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; java精品项目案例【2000套】 Python精品项目案例【500套】 Python精品…

作者头像 李华
网站建设 2026/8/21 11:12:52

大模型应用开发实战:从Prompt工程到RAG、Agent与MCP的完整指南

最近在尝试将大模型应用到实际业务中&#xff0c;从简单的对话到复杂的系统集成&#xff0c;踩了不少坑。我发现很多开发者&#xff0c;包括我自己&#xff0c;都卡在几个关键环节&#xff1a;如何让模型理解更复杂的指令&#xff08;Prompt&#xff09;、如何让模型访问外部知…

作者头像 李华
网站建设 2026/8/21 11:12:10

排查后端问题先拆哪段调用链

排查后端问题先拆哪段调用链在对复杂后端分布式系统进行可观测性重构与生产事故排障能力提升时&#xff0c;研发团队常面临“系统链路错综复杂、不知道从哪一部分开始补充 Metric 与 Trace”的混乱状态。 对可观测性核心链路进行重构拆解&#xff0c;必须遵循明确的优先级次序&…

作者头像 李华
网站建设 2026/8/21 11:12:04

SpringBoot校园招聘平台:智能匹配与高并发实践

1. 项目概述&#xff1a;SpringBoot驱动的校园招聘平台设计初衷 高校就业市场长期存在信息不对称的痛点——企业找不到合适人才&#xff0c;学生摸不清就业方向。去年帮某高校就业指导中心做系统升级时&#xff0c;他们的纸质登记表堆了半个仓库&#xff0c;企业HR要翻三天才能…

作者头像 李华
网站建设 2026/8/21 11:12:02

超时重试怎样避免拖垮服务

超时重试怎样避免拖垮服务在多 Agent 协作系统运行过程中&#xff0c;上游大模型 API 超时或工具 API 响应缓慢是常见的异常现象。若在多 Agent 交互网络中引入了缺乏控制的盲目重试&#xff0c;上游偶发的延迟抖动将会在 Agent 链路间被呈指数级放大&#xff0c;瞬间引发“Tok…

作者头像 李华
网站建设 2026/8/21 11:05:53

2026 PaperXie最全功能详解|8大核心功能,一篇搞定毕业论文全流程✅

现如今高校论文审核越来越严&#xff0c;重复率检测、AIGC人工智能检测双重筛查&#xff0c;让很多同学写论文、改论文处处踩坑。市面上工具繁杂、收费混乱、功能单一&#xff0c;很难一站式解决问题。 PaperXie作为国内垂直学术AI平台&#xff0c;依托千亿级论文专属大模型&a…

作者头像 李华