二维平面内无人机的路径规划——势场法-改进

目录

1.场势法的基本原理

2.场势法的MATLAB程序

3.仿真结果


1.场势法的基本原理

       在二维平面内,通过势场法可以实现无人机的路径规划。势场法是一种在机器人领域中广泛应用的路径规划方法,它通过给终点添加引力,对障碍物增加斥力,使无人机能够避开障碍物并顺利到达终点。

        首先,定义一个二维平面,其中存在已知的障碍物和无人机。然后,通过给无人机终点添加引力,给障碍物添加斥力,模拟出无人机在二维平面内的运动情况。

重复以上步骤,直到无人机到达目标点或者达到设定的终止条件为止。

       需要注意的是,为了避免无人机陷入局部最优解,可以在算法中加入一些随机因素,例如随机扰动和随机加速度等。此外,为了提高算法的效率和精度,还可以采用一些优化算法和搜索算法。

       通过这一算法可以实现二维平面内无人机的路径规划。在该平面内存在已知的障碍,势场法通过给终点添加引力,对障碍增加斥力,使得无人机能够顺利的避障并到达终点。通过对传统势场法的改进,避免了无人机容易陷入极值的问题,使搜索更易实现。

2.场势法的MATLAB程序

clear all;


x=[1 3 4 7 6 5.5 8 9.5];%???x??
y=[1.5 2.2 4.5 6 2 6 7.8 7];
plot(x,y,'O',10,10,'v',0,0,'ms');
hold on

%??????????????????,??????????????????????????
%???????
Xo=[0 0];%????
k=20;%???????????
K=0;%???
m=5;%??????????????????
Po=2;%??????????????????????????0??????????????????
n=8;%????
a=0.5;
l=0.05;%??
J=500;%??????
%???????????????????????Po?????????
%end
%?????????
Xsum=[10 10;1 1.5;3 2.2;4 4.5;7 6;6 2;5.5 6;8 7.8;9.5 7];%?????(n+1)*2????[10 10]?????????????????
Xj=Xo;%j=1??????????????Xj

[x,y]=meshgrid(-1:0.5:12,-1:0.5:12);
z=0.5*k./(sqrt((x-10).^2+(y-10).^2+0.09))-0.5*m*(1./(sqrt((x-1).^2+(y-1.5).^2+0.09))-1/3.5).^2-0.5*m*(1./(sqrt((x-3).^2+(y-2.2).^2+0.09))-1/3.5).^2 ...
    -0.5*m*(1./(sqrt((x-4).^2+(y-4.5).^2+0.09))-1/3).^2-0.5*m*(1./(sqrt((x-7).^2+(y-6).^2+0.09))-1/3).^2-0.5*m*(1./(sqrt((x-6).^2+(y-2).^2+0.09))-1/3.5).^2 ...
    -0.5*m*(1./(sqrt((x-5.5).^2+(y-6).^2+0.09))-1/4).^2-0.5*m*(1./(sqrt((x-8).^2+(y-7.8).^2+0.09))-1/3).^2-0.5*m*(1./(sqrt((x-9.5).^2+(y-7).^2+0.09))-1/3).^2;
% contour(x,y,z,[-50:20:1000]);
[C,h]=contour(x,y,z,[-80:10:300]);
set(h,'ShowText','on','TextStep',get(h,'LevelStep')*2)
colormap cool
[px,py]=gradient(z);%????x,y??????????
quiver(x,y,px,py,'k') %???????????
p=sqrt(px.^2+py.^2);
%%??
t=1;
M(t)=getframe;
t=t+1;

%***************????????????******************
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
%????????
    [Frerxx,Freryy,Fataxx,Fatayy]=compute_repulsion(Xj,Xsum,m,angle_at,angle_re,n,Po,a);%??????x,y????????
%????????????????????j???????????????????????????????????????????????
    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;
    X=Goal(:,1);
    Y=Goal(:,2);
    plot(X,Y,'.r');
    M(t)=getframe;t=t+1;
    %??
    if ((Xj(1)-Xsum(1,1))>0)&((Xj(2)-Xsum(1,2))>0)%??????????????????????????????????????
       K=j;%??????????????
       break;
       %?????j?
    end%?????if????????????????
end%?????

3.仿真结果

D130

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值