人工势场路径规划-matlab代码

一、人工势场算法原理

人工势场法是广泛应用于机器人、智能车领域中的一种路径规划算法,其原理是将智能车在行驶环境中的运动转化为智能车在人为设定的抽象势场中的运动,抽象势场由引力、斥力两大势场组成。 将引力势场和斥力势场进行叠加即为合力势场,智能车在合力势场的作用下行驶,行驶方向即为势能下降的方向。

二、matlab代码实现效果(圆形障碍物附代码)

步长未调整,所以路径并不光滑

clc
clear
close all
%% 输入障碍物坐标、起始点、目标点,图1是示意图
ob=[25 27];
q_start=[1 1];
q_end=[49 49];
Z1=[25 27];
Z1_R=5;
%% 传统人工势场
k=2;                                           %引力增益系数
m=3;                                          %斥力增益系数
L=1;                                          %机器人步长
P0=20;                                           %障碍物的影响距离
t_max=1000;                              %最大搜索步数
deta=5;                                    %停止搜索条件
n=size(ob,1);                               %n是障碍数目
Q=q_start;                                   %将第一步放入路径中
for i=1:t_max
    disp(['迭代次数',num2str(i),'迭代进度',num2str(i/t_max*100),'%'])
    X=Q(end,:);                             %X是当前点坐标,第i步
    R=sqrt((X(1)-q_end(1,1))^2+(X(2)-q_end(1,2))^2);                    %路径点和目标的距离
    U1=q_end-X;
    F_Y=k*R*U1/sqrt(U1(1)^2+U1(2)^2);                                            %计算引力F_Y
   
    F_C=[0,0];
    for j=1:n                                                                                               %所有斥力的总合F_C
       F_C=F_C+F_c{j};        
    end
    F_Z=F_Y+F_C;                                                                              %计算合力,即前进方向
    X_new=X+F_Z/sqrt(F_Z(1)^2+F_Z(2)^2)*L;                                  %沿合力行走步长L
    Q=[Q;X_new];                                                                                    %将新节点加入路径Q中
    if sqrt((q_end(1)-X_new(1))^2+(q_end(2)-X_new(2))^2)<deta     %新节点与终点距离小于步长L即跳出
        Q=[Q;q_end];
        plot(Q(:,1),Q(:,2),'-r');
        break
    end
    plot(q_start(:,1),q_start(:,2),'.b','MarkerSize',20);
    hold on
    plot(q_end(:,1),q_end(:,2),'.g','MarkerSize',20);
    hold on
    plot(ob(:,1),ob(:,2),'.k','MarkerSize',20);
    hold on
    plot(Q(:,1),Q(:,2),'-r');
    pause(0.1)
    r=Z1_R;%设置半径为20
    theta=0:pi/100:2*pi;%以pi/100为圆心角画圆
    x=Z1(1)+r*cos(theta);%圆心横坐标为40
    y=Z1(2)+r*sin(theta); %圆心纵坐标为40
    plot(x,y,'k:');%画圆
end
%% 画出最终路径
plot(Z1(:,1),Z1(:,2),':b')
hold on

Z1=[Z1;Z1(end,:)];
set(legend,'Position',[0.6958 0.7151 0.2071 0.2095])
title('传统人工势场算法')
axis([0,50,0,50])

三、matlab代码实现效果(矩形障碍物)

代码人工势场矩形障碍物代码.rar_人工势场法matlab代码-讲义文档类资源-CSDN下载

  • 14
    点赞
  • 161
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
路径规划是机器人技术中的重要内容,人工势场法是一种常用的路径规划方法之一。它模拟了物体运动中受力的过程,利用人工设定的势场函数来引导机器人沿着安全、合理的路径移动。 在Matlab中,可以通过以下代码实现人工势场法路径规划: 1. 首先,定义机器人的起始位置和目标位置以及环境地图: start = [x_start, y_start]; goal = [x_goal, y_goal]; obstacles = [obstacle1; obstacle2; ...; obstacleN]; % 定义环境中的障碍物 2. 设置人工势场参数,包括吸引因子和斥力因子: k_att = 0.5; % 吸引因子 k_rep = 0.5; % 斥力因子 rep_range = 5; % 斥力范围 3. 创建一个循环,计算机器人在每个时间步上的速度和位置: current_position = start; while norm(current_position - goal) > threshold % 当机器人与目标位置的距离小于阈值时,停止循环 att_force = k_att * (goal - current_position); %计算吸引力 rep_force = zeros(1, 2); % 初始化斥力为0 for i = 1:size(obstacles, 1) % 遍历每个障碍物 distance = norm(current_position - obstacles(i, :)); % 与障碍物的距离 if distance < rep_range % 当距离小于斥力范围时,计算斥力 rep_force = rep_force + k_rep * (1/distance - 1/rep_range) * (current_position - obstacles(i, :))/distance^3; end end total_force = att_force + rep_force; % 总受力 velocity = total_force / norm(total_force); % 速度方向 current_position = current_position + velocity; % 更新机器人位置 % 可以在此处绘制机器人的位置 end 以上就是使用Matlab实现人工势场法路径规划代码。通过设置合适的参数和环境地图,机器人可以自主规划路径并避开障碍物,最终到达目标位置。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

墨叔叔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值