✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,
代码获取、论文复现及科研仿真合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab完整代码及仿真定制内容点击👇
🔥 内容介绍
随着科技的不断发展,机器人技术在各个领域得到了广泛的应用。在许多场景中,多个机器人需要在同一环境中进行路径规划和导航,以完成特定的任务。而在这种情况下,如何有效地规划机器人的路径,避免碰撞和冲突,成为了一个关键的问题。
基于面向vornoi单元的环境导航和搜索控制策略的多机器人路径规划,是一种新颖的路径规划方法,它能够有效地解决多机器人协同工作中的路径规划问题。本文将对这一方法进行详细的介绍和分析。
首先,我们来了解一下vornoi单元。vornoi单元是指在一个给定的有限点集合中,对于每一个点都有一个对应的区域,使得这个区域内的点都比其他点更接近这个点。在机器人路径规划中,vornoi图被用来将整个环境划分为不同的区域,每个区域对应一个机器人的运动空间。这样一来,每个机器人只需要考虑自己所在的区域,就可以避免与其他机器人发生碰撞。
基于vornoi单元的路径规划方法还结合了环境导航和搜索控制策略。环境导航是指机器人根据环境的特征和地图信息,选择最优的路径进行移动。而搜索控制策略则是指机器人在遇到障碍物或其他机器人时,能够灵活地调整路径,避免碰撞和冲突。
在多机器人路径规划中,基于vornoi单元的环境导航和搜索控制策略能够实现机器人之间的协同工作,有效地避免碰撞和冲突,提高整体的运动效率。同时,这种方法还能够适应复杂多变的环境,保证机器人能够在各种情况下安全地完成任务。
总的来说,基于vornoi单元的环境导航和搜索控制策略的多机器人路径规划是一种非常有效的路径规划方法,它能够解决多机器人协同工作中的路径规划问题,提高机器人的运动效率和安全性。随着机器人技术的不断进步,相信这种方法将会得到更广泛的应用,并为各个领域的机器人应用带来更大的便利和效益。
📣 部分代码
clc;
clearvars;
close all;
%% Map constants
wall_t = 1;
door = 4;
corridor = 4;
t=0;
sim_t = 50;
dt = 0.1;
n_r = 7;
rc = 10;
rs = rc/2;
n_obs = 5;
n_pointxm = 1000;
sizes = 50;
bots = Bot(0,0,0,0,0);
obstacles = {zeros(n_obs)};
poly_obstacles={zeros(n_obs,1)};
% obstacles{1} = build_obst(3.*[10,20,30,35,20;10,10,20,40,60],20);
% obstacles{2} = build_obst([120,160,160,120;100,100,160,160],20);
obstacles{1} = build_obst([0,0,sizes,sizes,sizes+5,sizes+5,-5,-5;5,sizes,sizes,5,5,sizes+5,sizes+5,5],n_pointxm);
obstacles{2} = build_obst([corridor,corridor,sizes/3,sizes/3,corridor+wall_t,corridor+wall_t;5,sizes/3,sizes/3,sizes/3-wall_t,sizes/3-wall_t,5],n_pointxm);
obstacles{3} = build_obst([sizes/3+door,2*sizes/3+wall_t,2*sizes/3+wall_t,2*sizes/3,2*sizes/3,sizes/3+door;sizes/3,sizes/3,5,5,sizes/3-wall_t,sizes/3-wall_t],n_pointxm);
obstacles{4} = build_obst([0;sizes/3+corridor]+[0,0,2*sizes/3+wall_t,2*sizes/3+wall_t,sizes/3+wall_t + door/2,sizes/3+wall_t + door/2,2*sizes/3,2*sizes/3,wall_t,wall_t,sizes/3+wall_t - door/2,sizes/3+wall_t - door/2;5,sizes/3,sizes/3,5,5,5+wall_t,5+wall_t,sizes/3-wall_t,sizes/3-wall_t,5+wall_t,5+wall_t,5],n_pointxm);
obstacles{5} = build_obst([-5,sizes+5,sizes+5,-5;5,5,0,0],n_pointxm);
for i=1:length(obstacles)
poly_obstacles{i} = polyshape(obstacles{i}(1,:),obstacles{i}(2,:));
end
% phi_exp = 10.* ones(sizes,sizes);
% grid_map = zeros(sizes,sizes,2);
% for i=1:sizes
% for j=1:sizes
% grid_map(i,j,:) = [i;j];
% end
% end
% P = repmat(polyshape, 1, length(poly_obstacles));
% for k = 1:length(P)
% P(k) = poly_obstacles{k} ;
% end
% for i=1:n_r
% bots(i) = Bot(dt,sizes,rs,rc,i);
% while isinterior(union(P), bots(i).pos(1,1),bots(i).pos(2,1))
% bots(i) = Bot(dt,sizes,rs,rc,i);
% end
% end
robot_init = [48 9; 45 9; 42 9; 48 12; 45 12; 42 12; 45 15];
for i=1:n_r
bots(i) = Bot(dt,sizes,rs,rc,i);
bots(i).pos = robot_init(i,:)';
bots(i).pos_est = bots(i).pos + bots(i).gps_noise_std.*randn(2,1);
end
%%
bots=update_neighbours(bots);
bots=update_obstacles(obstacles,bots);
iterate(bots,@vertex_unc2);
iterate(bots,@qt_qtnosi_update);
iterate(bots,@update_phi)
iterate(bots,@mass_centroid);
figure(1)
hold on
xlim([-5 sizes+5])
ylim([0 sizes+5])
iterate(bots,@plot_bot)
for j=1:length(obstacles)
plot(poly_obstacles{j},'FaceColor','black')
end
hold off
figure(2)
hold on
xlim([-5 sizes+5])
ylim([0 sizes+5])
% view(3)
surf(bots(1).mesh_map{1}, bots(1).mesh_map{2}, bots(1).mesh_map{3}, bots(1).mesh_map{3})
colorbar
hold off
i=0;
% pause(5)
%%
while(t<sim_t)
iterate(bots,@control_and_estimate);
bots=update_neighbours(bots);
bots=update_obstacles(obstacles,bots);
iterate(bots,@vertex_unc2);
iterate(bots,@qt_qtnosi_update);
iterate(bots,@update_phi);
iterate(bots,@mass_centroid);
if mod(i,1) == 0
figure(1)
clf,clc,hold on
xlim([-5 sizes+5])
ylim([0 sizes+5])
iterate(bots,@plot_bot)
for j=1:length(obstacles)
plot(poly_obstacles{j},'FaceColor','black')
end
text(0,sizes+2,"sim time: "+string(t)+" [s]",'Color','white')
drawnow
hold off
figure(2)
clf,clc,hold on
xlim([-5 sizes+5])
ylim([0 sizes+5])
% view(3)
surf(bots(1).mesh_map{1}, bots(1).mesh_map{2}, bots(1).mesh_map{3}, bots(1).mesh_map{3})
colorbar
drawnow
hold off
end
if mod(i,100) == 0
explored_plot(bots,n_r, poly_obstacles,sizes, 3)
end
i = i +1;
t = t+dt;
end
explored_plot(bots,n_r, poly_obstacles,sizes, 3)
%%
⛳️ 运行结果
🔗 参考文献
[1] 李婧,李艳萍.复杂多陷阱环境下机器人导航路径的蚁群规划策略[J].机械设计与制造, 2023(8):228-232.
[2] 王东,曹品钊,连捷,等.一种基于冲突搜索和速度障碍的多机器人路径规划方法:CN202210906238.5[P].CN202210906238.5[2023-12-13].
[3] 王东,曹品钊,连捷,等.一种基于冲突搜索和速度障碍的多机器人路径规划方法:202210906238[P][2023-12-13].