【路径规划】基于模糊控制结合人工势场求解二维障碍路径规划问题matlab代码

350 阅读3分钟

1 简介

传统人工势场法在路径规划中存在局部极小值问题,而且不能满足动态环境中移动机器人路径规划对实时性,安全性和可达性的要求.针对传统人工势场法存在的问题,通过引入速度矢量,改势场力函数,并与模糊控制方法相结合,实时调节斥力势场系数,克服人工势场法的缺陷.在MATLAB平台中验证了方法的有效性,实验结果表明,该方法优于人工势场法模型的路径规划.

2 部分代码

clear;
Fuzzy = readfis('Fuzzy2');%读取模糊控制算法模块
%障碍和目标,起始位置都已知的路径规划,意图实现从起点可以规划出一条避开障碍到达目标的路径。
%初始化车的参数
Xo=[0 0];%起点位置
K=15;%计算引力需要的增益系数
m=5;%计算斥力的增益系数,都是自己设定的。
Po=1;%障碍影响距离,当障碍和车的距离大于这个距离时,斥力为0,即不受该障碍的影响。也是自己设定。
n=7;%障碍个数
a=0.5;
l=0.2;%步长
J=500;%循环迭代次数

%给出障碍和目标信息
Xsum=[10 10;1 1.3;3 2.5;4 4.5;3 6;6 2;5.5 5.5;8 8.5];%这个向量是(n+1)*2维,其中[10 10]是目标位置,剩下的都是障碍的位置。
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:n
      angle_re(i)=Theta(i+1);%计算斥力用的角度,是个向量,因为有n个障碍,就有n个角度。
    end
%调用计算斥力模块
 
%画出路径
X=Goal(:,1);
Y=Goal(:,2);
%路径向量Goal是二维数组,X,Y分别是数组的x,y元素的集合,是两个一维数组。
%x=[1 3 4 3 6 5.5 8];%障碍的x坐标
%y=[1.2 2.5 4.5 6 2 5.5 8.5];
%x=[0.5 1 1.5 2 2.5 3 3.5 4];%障碍的x坐标
x=[1 3 4 3 6 5.5 8];%障碍的x坐标
y=[1.3 2.5 4.5 6 2 5.5 8.5];
plot(x,y,'*',Xsum(1,1),Xsum(1,2),'v',0,0,'ms',X,Y,'.r');

3 仿真结果

4 参考文献

[1]李宇昊, 赵又群, and 杜宜燕. "一种基于逃逸力模糊控制的人工势场路径规划方法.", CN110879592A. 2020.

[2]孟蕊, 苏维均, 连晓峰. 基于动态模糊人工势场法的移动机器人路径规划[J]. 计算机工程与设计, 2010(7):4.​

**部分理论引用网络文献,若有侵权联系博主删除。**