尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
APF 人工势场:把“走向目标”和“远离障碍”写成一组力
APF 人工势场把“走向目标”和“远离障碍”写成一组力摘要本文介绍人工势场法在移动机器人局部规划中的基本思想结合 MATLAB 实现解析吸引力、排斥力、目标点选择、速度控制与运动学更新并讨论局部极小和参数敏感性等实际问题。前言全局规划解决的是“从起点到终点大体应该走哪条路”局部规划更关心机器人下一时刻应该怎么动。人工势场法Artificial Potential FieldAPF就是一种非常直观的局部规划思想把目标点看成一个持续吸引机器人的“引力源”把障碍物看成会推开机器人的“斥力源”机器人最终沿着合力方向不断运动。这种方法的优势是结构简单、计算量小而且和“避障”这件事的直觉非常一致。它也有明显短板例如局部极小、目标附近障碍引起的振荡以及参数对轨迹形态影响较大。理解这些优缺点以后再看 DWA、RPP 等算法会更容易明白为什么后续局部规划方法需要引入速度空间、曲率约束或预测模型。原理讲解1. 吸引势场与吸引力设机器人当前位置为局部目标点为最简单的吸引势函数可以写成其中 为吸引增益。对势函数取负梯度就得到指向目标的吸引力当前实现没有直接使用距离大小而是先把方向向量归一化attr_force tgt_pos - cur_pos; if ~all(attr_force 0) attr_force attr_force ./ norm(attr_force); end这样做意味着吸引项主要提供“方向”而不是让距离越远、吸力越大。2. 排斥力设机器人到某个障碍点的距离为 障碍影响半径为 。经典人工势场常使用相应排斥力大小与有关。代码中的getRepulsiveForce正是按照这一形式计算所有障碍点贡献只保留影响半径d_0内的障碍再把各方向排斥力求和并归一化。最终合力写成当前参数为zeta 1.0; eta 0.8; d_0 1.5;这意味着吸引项权重略高于排斥项障碍物只有进入 1.5 个地图距离单位以内才会产生排斥作用。3. 为什么还需要全局路径这份 APF 实现并不是直接始终把最终 goal 当作唯一吸引源而是读取全局规划器输出的path再沿路径向前寻找一个局部目标点。代码使用p_window 0.5;当当前路径点距离机器人已经小于窗口范围时plan_idx会继续向前移动直到找到一个更合适的跟踪点。这样做很重要因为纯 APF 如果只看最终终点遇到大型障碍时很容易被障碍势场带入不理想区域引入全局路径后局部控制只需要在全局路线附近完成跟踪和避障。4. 从“力”转换成速度方向合力不是直接当作控制量而是先和机器人当前速度矢量相加随后归一化并限制到最大线速度max_v 0.4;再通过得到期望朝向。因此 APF 实际上完成的是“给出下一步应该朝哪个方向走”而最终的线速度、角速度仍由两个简单控制器生成。代码详解1. 输入接口函数接口为function [pose, traj, flag] apf_plan(start, goal, varargin)其中start、goal不只是二维坐标而是包含姿态角的三维状态[x, y, theta]额外参数需要提供path, global_path map, grid_map这里的path来自全局规划map用于提取障碍物。2. 障碍物坐标提取代码通过obs_index find(map2);找到障碍栅格再转换成二维坐标集合obstacle。后续排斥力并不是针对障碍轮廓计算而是对所有障碍栅格中心计算距离。这会带来一个实际影响障碍物越大附近参与排斥力叠加的栅格点越多因此障碍几何尺寸本身会间接影响排斥方向。3. 速度控制并不是完整 PID虽然linearController和angularController都写出了 P、I、D 三项但当前参数中线速度控制实际为k_v_p 1.00; k_v_i 0.00; k_v_d 0.00;因此线速度部分本质上是比例控制。角速度部分为k_w_p 1.00; k_w_i 0.00; k_w_d 0.01;只有很小的微分项。这说明 APF 决定的是“运动方向”低层速度跟踪只是相对简单的辅助控制。4. 大角度误差时先原地转向如果abs(theta_d - robot.theta) pi / 2机器人不会继续向前而是u [0, w];先原地旋转。这一逻辑可以避免机器人在朝向误差过大时一边快速前进一边急转从而减小明显的横向偏离。5. 运动学模型代码采用差速/独轮车式二维运动模型因此控制器最终输出始终是u [v, w]即线速度与角速度。完整 MATLAB 实现说明对应源码文件为local_planner/apf_plan.m核心函数包括apf_plan ├─ getAttractiveForce ├─ getRepulsiveForce ├─ linearController ├─ angularController └─ f阅读时建议重点关注getRepulsiveForce、局部路径点选择逻辑以及从合力到theta_d的转换过程。本文说明依据当前apf_plan.m的实际实现展开。总结与思考APF 最大的优点是直觉清楚目标负责“拉”障碍负责“推”最终方向由合力决定。它也说明了局部规划的一个基本问题——机器人不是只要知道路径就够了还必须在当前姿态、障碍分布和速度限制下不断生成下一步控制量。但人工势场并不天然保证全局收敛。吸引力和排斥力可能在某些位置相互抵消形成局部极小在狭窄通道或目标附近有障碍时也可能出现往复振荡。因此 APF 更适合作为理解局部避障的起点而不是所有场景下的万能方案。
RELATED

相关推荐

【Java面试八股】Java基础篇|数据类型、面向对象、关键字、反射、注解、异常、新特性、序列化、设计模式、IO

【Java面试八股】Java基础篇|数据类型、面向对象、关键字、反射、注解、异常、新特性、序列化、设计模式、IO

Java 文章目录Java基础篇数据类型面向对象关键字浅拷贝深拷贝反射注解异常Objectjava新特性序列化设计模式I/ONative基础篇 java的特点 平台无关性面向对象内存管理 Java的优点缺点 优点 跨平台支持面向对象拥有强大的生态系统内存管理:自动垃圾回收机制多线程支持…

📅 2026/9/15 8:44:23
《基于协同过滤算法的劳动纠纷法律援助推荐系统》

《基于协同过滤算法的劳动纠纷法律援助推荐系统》

一、前言 劳动纠纷高发,普通劳动者找律师难、维权成本高、信息不对称。本系统围绕管理员、用户、律师三角色,基于协同过滤算法为用户智能推荐匹配律师,支持在线聊天咨询、线下预约、文书模板下载、AI 智能问答、数据可视化等完整功能。亮点在…

📅 2026/9/15 8:44:23
SpringBoot+Vue母婴商城:前后端分离毕设项目设计与实战解析

SpringBoot+Vue母婴商城:前后端分离毕设项目设计与实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/15 8:44:23
MORE NEWS

更多资讯

📰

2026论文AI写作软件怎么选?亲测20款后给出选型思路与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

用 DeepSeek 翻译 MATLAB 半桥变换器帮助文档的完整实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Spring Boot+Vue心理咨询管理系统设计与实现:从数据库到前后端分离实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

棒板电极氩气流注放电的COMSOL仿真建模与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

QML 自定义按钮:用着色器做鼠标跟随的光晕效果

目录 最终效果 拆开讲讲 ShaderEffect 基本结构 MouseArea 只追踪不拦截 片元着色器 几个可以调的参数 什么时候用 小结 完整代码 工程下载 上一篇用分段动画做了果冻回弹,这篇换个完全不同的思路,用 ShaderEffect 自定义片元着色器,让按钮表面产生一个跟随鼠标位置移动的光…

📰

DeepSeek Harness 入门很简单(三)——DeepSeek Harness接入工具、MCP、Skill

前言 上篇文章 全面解析了 DeepSeek Harness 的通用配置与 Agent 预设机制。通用设置涵盖权限策略、模型接入及插件系统三大模块;预设方面详细对比了 DeepSeek 内置的四种 Agent 模式——标准模式、极简模式、PTC 模式和创造模式。尤其值得一提的是,创造…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬