传统人工势场法---经典算法

article/2025/8/23 14:52:09

网上代码很多,这个可以直接使用。

Xo=[0 0];%起点位置
k=50;%计算引力需要的增益系数
K=0;%初始化
m=15;%计算斥力的增益系数,都是自己设定的。
Po=0.5;%障碍影响距离,当障碍和车的距离大于这个距离时,斥力为0,即不受该障碍的影响。也是自己设定。
n=6;%障碍个数
a=0.5;
l=0.2;%步长
J=200;%循环迭代次数
Xsum=[6 10;1 1.2;3 2.5;4 4.5;3 6;6 2;5.5 5.5;];%这个向量是(n+1)*2维,其中[10 10]是目标位置,剩下的都是障碍的位置。也可以用XGOAL重新另写一行
Xj=Xo;%j=1循环初始,将车的起始坐标赋给Xj
%***************初始化结束,开始主体循环******************
for j=1:J%循环开始Goal(j,1)=Xj(1);%Goal是保存车走过的每个点的坐标。刚开始先将起点放进该向量。Goal(j,2)=Xj(2);
%调用计算角度模块Theta=compute_angle(Xj,Xsum,n);%Theta是计算出来的车和障碍,和目标之间的与X轴之间的夹角,统一规定角度为逆时针方向,网上可以查具体函数Angle=Theta(1);%Theta(1)是车和目标之间的角度,目标对车是引力。angle_at=Theta(1);%为了后续计算斥力在引力方向的分量赋值给angle_at[Fatx,Faty]=compute_Attract(Xj,Xsum,k,Angle,0,Po,n);%计算出目标对车的引力在x,y方向的两个分量值。for i=1:nangle_re(i)=Theta(i+1);%计算斥力用的角度,是个向量,因为有n个障碍,就有n个角度。end
%调用计算斥力模块
[Frerxx,Freryy,Fataxx,Fatayy]=compute_repulsion(Xj,Xsum,m,angle_at,angle_re,n,Po,a);%计算出斥力在x,y方向的分量数组。
%计算出X,Y方向向量Fsumyj=Faty+Freryy+Fatayy;%y方向的合力Fsumxj=Fatx+Frerxx+Fataxx;%x方向的合力Position_angle(j)=atan(Fsumyj/Fsumxj);%合力与x轴方向的夹角向量
%计算车的下一步位置Xnext(1)=Xj(1)+l*cos(Position_angle(j));Xnext(2)=Xj(2)+l*sin(Position_angle(j));%保存车的每一个位置在向量中Xj=Xnext;%判断if ((Xj(1)-Xsum(1,1))>0)&&((Xj(2)-Xsum(1,2))>0)%这个地方可以修改一下,改成相等会避免超出目标点而继续迭代下去K=j;%记录迭代到多少次,到达目标。break;%记录此时的j值end%如果不符合if的条件,重新返回循环,继续执行。
end%大循环结束
K=j;
Goal(K,1)=Xsum(1,1);%把路径向量的最后一个点赋值为目标
Goal(K,2)=Xsum(1,2);
X=Goal(:,1);
Y=Goal(:,2);
x=[1 3 4 3 6 5.5 ];%障碍的x坐标
y=[1.2 2.5 4.5 6 2 5.5 ];
figure(1);
axis([0 10 0 10]);
plot(x,y,'ok',6,10,'vr',0,0,'ms');
hold on
for i=1:Kpause(0.1);plot(X(i),Y(i),'.r');    
end
% 添加坐标说明
xlabel('x轴坐标');
ylabel('y轴坐标');
title('人工势场法路径规划');
box off
grid on
function Y=compute_angle(X,Xsum,n)%角度向量计算for i=1:n+1%n是障碍数目deltaX(i)=Xsum(i,1)-X(1);deltaY(i)=Xsum(i,2)-X(2);r(i)=sqrt(deltaX(i)^2+deltaY(i)^2);if deltaX(i)>0theta=acos(deltaX(i)/r(i));elsetheta=pi-acos(deltaX(i)/r(i));endif i==1%表示是目标angle=theta;elseangle=theta;end     Y(i)=angle;%保存每个角度在Y向量里面,第一个元素是与目标的角度,后面都是与障碍的角度end
end
function [Yatx,Yaty]=compute_Attract(X,Xsum,k,angle,~,~,~)%输入参数为当前坐标,目标坐标,增益常数,分量和力的角度
%把路径上的临时点作为每个时刻的Xgoal
R=(X(1)-Xsum(1,1))^2+(X(2)-Xsum(1,2))^2;%路径点和目标的距离平方
r=sqrt(R);%路径点和目标的距离
Yatx=k*r*cos(angle);%angle=Y(1)   目标对车的X,Y方向的引力=引力系数*路径点和目标的距离*X/Y分量
Yaty=k*r*sin(angle);end
%斥力计算
function [Yrerxx,Yreryy,Yataxx,Yatayy]=compute_repulsion(X,Xsum,m,angle_at,angle_re,n,Po,a)%输入参数为当前坐标,Xsum是目标和障碍的坐标向量,增益常数,障碍,目标方向的角度
Rat=(X(1)-Xsum(1,1))^2+(X(2)-Xsum(1,2))^2;%路径点和目标的距离平方
rat=sqrt(Rat);%路径点和目标的距离
for i=1:nRrei(i)=(X(1)-Xsum(i+1,1))^2+(X(2)-Xsum(i+1,2))^2;%路径点和障碍的距离平方rre(i)=sqrt(Rrei(i));%路径点和障碍的距离保存在数组rrei中R0=(Xsum(1,1)-Xsum(i+1,1))^2+(Xsum(1,2)-Xsum(i+1,2))^2;r0=sqrt(R0);if rre(i)>Po%如果每个障碍和路径的距离大于障碍影响距离,斥力令为0Yrerx(i)=0;Yrery(i)=0;Yatax(i)=0;Yatay(i)=0;else%if r0<Poif rre(i)<Po/2Yrer(i)=m*(1/rre(i)-1/Po)*(1/Rrei(i))*(rat^a);%分解的Fre1向量Yata(i)=a*m*((1/rre(i)-1/Po)^2)*(rat^(1-a))/2;%分解的Fre2向量Yrerx(i)=(1+0.1)*Yrer(i)*cos(angle_re(i));%angle_re(i)=Y(i+1)Yrery(i)=-(1-0.1)*Yrer(i)*sin(angle_re(i));Yatax(i)=Yata(i)*cos(angle_at);%angle_at=Y(1)Yatay(i)=Yata(i)*sin(angle_at);elseYrer(i)=m*(1/rre(i)-1/Po)*1/Rrei(i)*Rat;%分解的Fre1向量Yata(i)=m*((1/rre(i)-1/Po)^2)*rat;%分解的Fre2向量Yrerx(i)=Yrer(i)*cos(angle_re(i));%angle_re(i)=Y(i+1)Yrery(i)=Yrer(i)*sin(angle_re(i));Yatax(i)=Yata(i)*cos(angle_at);%angle_at=Y(1)Yatay(i)=Yata(i)*sin(angle_at);endend%判断距离是否在障碍影响范围内
endYrerxx=sum(Yrerx);%叠加斥力的分量Yreryy=sum(Yrery);Yataxx=sum(Yatax);Yatayy=sum(Yatay);
end
总的来说就是先找出运动点,障碍点和目标点三者之间的关系,进而算出三者之间的X,Y方向的向量和,找出运动点下一位置,达成循环。运动点每一次运动都执行上述循环,直到运动到目标点。这个算法只能算简单的了解一下,早已经不能满足现在的需求

在这里插入图片描述


http://chatgpt.dhexx.cn/article/uE0DeRVt.shtml

相关文章

人工势场法(APF) —— Path Planning

版权声明&#xff1a;本文为博主原创博文&#xff0c;未经允许不得转载&#xff0c;若要转载&#xff0c;请说明出处并给出博文链接 维基百科说&#xff1a;“人工势场法&#xff08;Artificial Potential Field&#xff0c; APF&#xff09;是一种将机器人的外形视为势场中的一…

基于人工势场法的移动机器人路径规划研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 路径规划是移动机器人领域的热点研究方向&#xff0c;人工势场法已在工业机器人路径规划中得到广泛应用&#xff0c;近年来正逐…

11(0)-AirSim+四旋翼仿真-人工势场法避障

1.基本原理 人工势场法的基本原理为&#xff0c;根据地图内障碍物、目标点等的分布&#xff0c;构造一个人工势场&#xff0c;无人机由势能较高的位置向势能较低的位置移动。就好比是一个电场&#xff0c;电场内不同位置的电势能不同&#xff0c;对带电物体产生的力也不同&…

局部路径规划中的人工势场法

人工势场法是局部路径规划的一种比较常用的方法。这种方法假设机器人在一种虚拟力场下运动。 一、简介 如图所示&#xff0c;机器人在一个二维环境下运动&#xff0c;图中指出了机器人&#xff0c;障碍和目标之间的相对位置。 这个图比较清晰的说明了人工势场法的作用&#…

matlab箭头梯度方向场,局部路径规划算法——人工势场法

人工势场法是由Khatib于1986年提出,其方法是将移动机器人所处的环境用势场来定义,通过位置信息来控制机器人的避障行驶,基本思想是构造目标位姿引力场和障碍物周围斥力场共同作用的人工势场,搜索势函数的下降方向来寻找无碰撞路径。人工势场法避障技术使得机器人的移动能很…

基于人工势场法的车辆编队轨迹规划matlab仿真验证

给出了完整的MATLAB代码仿真&#xff1b;基于人工势场法编队的基本原理&#xff1a;通过构建车辆相对目标点的引力势场和斥力势场构建车辆所处地图下的整体势场&#xff0c;设置如图所示的势场图&#xff0c; 图中圆心为我们参考的目标点&#xff0c;其可以提供引力方向&#x…

基于人工势场法的二维平面内无人机的路径规划的matlab仿真,并通过对势场法改进避免了无人机陷入极值的问题

目录 1.算法描述 2.matlab算法仿真效果 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 人工势场法原理是&#xff1a;首先构建一个人工虚拟势场&#xff0c;该势场由两部分组成&#xff0c;一部分是目标点对移动机器人产生的引力场&#xff0c;方向由机器人指向目标点&#xf…

matlab人工势场法三维演示图,运动规划入门 | 5. 白话人工势场法,从原理到Matlab实现...

如何利用人工势场进行运动规划? 1.1 引力势场(Attractive Potential Field) 人工势场这个特殊的势场并不是一个单一的场,其实它是由两个场叠加组合而成的,一个是引力场,一个是斥力场。 顾名思义引力势场是具有吸引的性质,会将机器人从起点处朝着终点处吸引,所以引力场的存…

路径规划算法3 改进的人工势场法(Matlab)

目录 传统人工势场 引力势场 斥力势场 合力势场 传统人工势场法存在的问题 改进的人工势场函数 Matlab代码实现 参考链接&#xff1a; [1]朱伟达. 基于改进型人工势场法的车辆避障路径规划研究[D]. 江苏大学, 2017. 1986年Khatib首先提出人工势场法&#xff0c;并将其应用在…

【控制】人工势场法及人工势场函数

目录 人工势场法-维基百科路径规划-人工势场法&#xff08;Artifical Potential Field&#xff09;引力场 (attractive/gravitation field)斥力场 (repulsive field)总场 【机器人路径规划】人工势场法PaperMatlab 代码自己编写的 Matlab1. 仅考虑引力的情况 人工势场法-维基百…

移动机器人路径规划:人工势场法

人工势场法是一种原理比较简单的移动机器人路径规划算法&#xff0c;它将目标点位置视做势能最低点&#xff0c;将地图中的障碍物视为势能高点&#xff0c;计算整个已知地图的势场图&#xff0c;然后理想情况下&#xff0c;机器人就像一个滚落的小球&#xff0c;自动避开各个障…

人工势场法matlab讲解_【机器人路径规划】人工势场法

阅读本文需要的基础知识为: 理解机器人的构型空间。建议阅读:机器人运动规划中的C space怎样理解?为什么不直接在笛卡尔坐标系下运算呢? 本文的实现程序与使用说明见我的学习工具箱:小明工坊:【个人开源】机器人运动规划学习工具箱使用说明 基本原理 1.概述 我们打两个比…

学习笔记:人工势场法

一、算法简介 1986年Khatib首先提出人工势场法&#xff0c;并将其应用在机器人避障领域&#xff0c;而现代汽车可以看作是一个高速行驶的机器人&#xff0c;所以该方法也可应用于汽车的避障路径规划领域。 二、算法思想 1、人工势场法的基本思想是在障碍物周围构建障碍物斥力…

人工势场法matlab讲解,传统人工势场法(matlab)

【实例简介】 人工势场法路径规划是由Khatib提出的一种虚拟力法(Oussama Khatib,Real-Time obstacle Avoidance for Manipulators and Mobile Robots. Proc of The 1994 IEEE.)。它的基本思想是将机器人在周围环境中的运动,设计成一种抽象的人造引力场中的运动,目标点对移动…

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

人工势场法是局部路径规划的一种比较常用的方法。这种方法假设机器人在一种虚拟力场下运动。 一、简介 如图所示&#xff0c;机器人在一个二维环境下运动&#xff0c;图中指出了机器人&#xff0c;障碍和目标之间的相对位置。 这个图比较清晰的说明了人工势场法的作用&#…

人工势场法

文章目录 前言一、人工势场法二、简要理解 1.示例2.代码总结 前言 路径规划是移动机器人领域的一个重要组成部分&#xff0c;传统的路径规划代表算法包括 A*算法、Dijkstra 算法、人工势场法以及仿生学的蚁群算法。人工势场法是机器人路径规划算法中一种简单有效的方法。人工势…

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

人工势场法是局部路径规划的一种比较常用的方法。这种方法假设机器人在一种虚拟力场下运动。 1. 简介 如图所示&#xff0c;机器人在一个二维环境下运动&#xff0c;图中指出了机器人&#xff0c;障碍和目标之间的相对位置。 这个图比较清晰的说明了人工势场法的作用&#xf…

路径规划算法3.1 人工势场法APF

路径规划算法3.1 人工势场法APF 前言电场与电势场人工势场人工势场的构建梯度下降与局部最小问题后记 前言 人工势场法APF(Artificial Potential Field)&#xff0c;是非场经典的寻路方法&#xff0c;常用于移动机器人的局部路径规划&#xff0c;其主要思想是通过目标的引力与…

【路径规划】局部路径规划算法——人工势场法(含python实现 | c++实现)

文章目录 参考资料1. 算法简介2. 算法精讲2.1 引力势场2.2 斥力势场2.3 合力势场 3. 引力斥力推导计算4. 算法缺陷与改进4.1 目标不可达的问题4.2 陷入局部最优的问题4.3 解决方案4.3.1 改进障碍物斥力势场函数4.3.2 道路边界斥力势场 5. python实现6. c实现 参考资料 路径规划…

人工势场法路径规划算法(APF)

本文主要对人工势场法路径规划算法进行介绍&#xff0c;主要涉及人工势场法的简介、引力和斥力模型及其推导过程、人工势场法的缺陷及改进思路、人工势场法的Python与MATLAB开源源码等方面 一、人工势场法简介 人工势场法是由Khatib于1985年在论文《Real-Time Obstacle Avoidan…