【路径规划】人工势场算法车辆避障路径规划【含Matlab源码 3637期】

在这里插入图片描述

⛄一、人工势场算法车辆避障路径规划简介

1 人工势场算法
人工势场法是由Khatib于1985年在论文《Real-Time Obstacle Avoidance for Manipulators and Mobile Robots》中提出的一种虚拟力法。它的基本思想是将机器人在周围环境中的运动,设计成一种抽象的人造引力场中的运动,目标点对移动机器人产生“引力”,障碍物对移动机器人产生“斥力”,最后通过求合力来控制移动机器人的运动。应用势场法规划出来的路径一般是比较平滑并且安全,但是这种方法存在局部最优点问题。

算法思想
(1)人工势场法的基本思想是在障碍物周围构建障碍物斥力势场,在目标点周围构建引力势场,类似于物理学中的电磁场。

(2)被控对象在这两种势场组成的复合场中受到斥力作用和引力作用,斥力和引力的合力指引着被控对象的运动,搜索无碰的避障路径。

(3)更直观而言,势场法是将障碍物比作是平原上具有高势能值的山峰,而目标点则是具有低势能值的低谷。

2 人工势场算法车辆避障路径规划
人工势场算法是一种基于势能场的路径规划方法,它通过构建势能场来实现车辆的避障和路径规划。具体来说,它将车辆看作一个带电粒子,将障碍物看作一个带同性电荷的粒子,通过计算粒子间的相互作用力,来实现车辆的避障和路径规划。以下是人工势场算法车辆避障路径规划的步骤:
(1)构建势能场
首先,需要构建势能场,将车辆和障碍物看作带电粒子,通过计算粒子间的相互作用力,来构建势能场。其中,车辆的势能为负,障碍物的势能为正。

(2)计算合力
根据势能场,可以计算出车辆所受到的合力,即车辆所处位置的梯度方向。合力的方向指向势能下降最快的方向。

(3)更新车辆位置
根据车辆所受到的合力,可以更新车辆的位置,使车辆向势能下降最快的方向移动。

(4)重复上述步骤
重复上述步骤,直到车辆到达目标点或者无法到达目标点。

⛄三、部分源代码

clear % Initialize memory

xmin=[0; 0]; % Set edges of region want to search in
xmax=[30;30];

Nsteps=500; % Maximum number of steps to produce

% Next set the parameters of the vehicle:

lambda=0.1; % Step size to take in chosen direction at each move
Ns=16; % Number of points on circular pattern to sense
r=1; % Sensing radius
xs=0ones(2,Ns); % Initialize
Jo(:,1)=0
ones(Ns,1);
Jg(:,1)=0ones(Ns,1);
J(:,1)=0
ones(Ns,1);
theta(:,1)=0ones(Ns,1);
for m=2:Ns % Compute the angles to be used around the circle
theta(m,1)=theta(m-1,1)+(pi/180)
(360/Ns);
end

% Goal position of vehicle
xgoal=[25; 25];

% Initial vehicle position
x=[5; 5];

% Weighting parameters for planning (sets priority for being aggresive
% in the direction of the goal vs. avoiding obstacles
w1=1;
w2=1.0000e-04;

% Allocate memory

x(:,2:Nsteps)=0*ones(2,Nsteps-1);

% The obstacles:

figure(1)
clf
% Plot initial and final positions
plot(5,5,‘s’,25,25,‘x’)
axis([0 30 0 30])
hold on
xlabel(‘x’);
ylabel(‘y’);
title(‘Obstacles (o), initial vehicle (square) and goal (x) positions’);
hold on
% Plot obstacle positions (sets obstaclefunction)
plot(20,15,‘o’,8,10,‘o’,10,10,‘o’,12,10,‘o’,24,20,‘o’,18,20,‘o’)
hold off

⛄四、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]吕春峰.基于人工势场法机器人小车避障的研究[J].昆明理工大学学报(自然科学版) .2005

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

  • 18
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是一个简单的人工势场避障编队代码的Matlab实现: ``` clc; clear all; close all; % 定义机器人数量和初始位置 n = 3; x = [0, 5, 10]; y = [0, 5, 0]; % 定义目标位置 target = [10, 10]; % 定义速度和最大速度 v = ones(1, n); v_max = 1; % 定义人工势场参数 k_att = 0.5; k_rep = 5; d_0 = 1; % 定义循环次数和步长 T = 100; dt = 0.1; % 循环迭代 for t = 1:T % 计算每个机器人的速度 for i = 1:n % 计算机器人与目标的距离 d_target = sqrt((x(i) - target(1))^2 + (y(i) - target(2))^2); % 计算吸引力 f_att_x = -k_att * (x(i) - target(1)); f_att_y = -k_att * (y(i) - target(2)); % 计算斥力 f_rep_x = 0; f_rep_y = 0; for j = 1:n if j ~= i d_ij = sqrt((x(i) - x(j))^2 + (y(i) - y(j))^2); if d_ij <= d_0 f_rep_x = f_rep_x + k_rep * (1/d_ij - 1/d_0) * (x(i) - x(j)); f_rep_y = f_rep_y + k_rep * (1/d_ij - 1/d_0) * (y(i) - y(j)); end end end % 计算总力和速度 f_x = f_att_x + f_rep_x; f_y = f_att_y + f_rep_y; f = sqrt(f_x^2 + f_y^2); if f > v_max v_x = (v_max/f) * f_x; v_y = (v_max/f) * f_y; else v_x = f_x; v_y = f_y; end % 更新位置 x(i) = x(i) + v_x * dt; y(i) = y(i) + v_y * dt; end % 绘图 figure(1); clf; plot(target(1), target(2), 'ro', 'MarkerSize', 10, 'LineWidth', 2); hold on; plot(x, y, 'b.', 'MarkerSize', 30); axis equal; axis([0, 12, 0, 12]); xlabel('x'); ylabel('y'); title(['t = ', num2str(t*dt)]); drawnow; end ``` 其中,`n`是机器人数量,`x`和`y`是机器人初始位置,`target`是目标位置,`v`是机器人初始速度,`v_max`是机器人最大速度,`k_att`是吸引力系数,`k_rep`是斥力系数,`d_0`是斥力作用距离,`T`是循环次数,`dt`是步长。 代码中,首先定义了机器人数量、初始位置、目标位置、速度和最大速度等参数,然后在循环迭代中,计算每个机器人的速度,并更新机器人的位置。在计算速度时,先计算机器人与目标的距离,根据距离计算吸引力;然后计算机器人之间的距离,如果距离小于一定值,就计算斥力,否则斥力为0;最后根据吸引力和斥力计算总力,并根据总力和最大速度更新速度。在更新位置时,根据速度和步长计算新的位置。 在绘图部分,先绘制目标位置,然后绘制机器人的位置,最后绘制坐标轴和标题,使用`drawnow`命令实时更新图像。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Matlab领域

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

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

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

打赏作者

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

抵扣说明:

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

余额充值