复杂环境下多移动机器人路径规划研究附Matlab代码

简介: 复杂环境下多移动机器人路径规划研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测雷达通信 无线传感器

信号处理图像处理路径规划元胞自动机无人机 电力系统

⛄ 内容介绍

我们使用了本文[2]中描述的匈牙利赋值算法,并改编了[1]中的matlab实现。为了估计机器人团队的运行时间,我们计算了10条路径的平均值。然后我们将C-CAPT算法扩展到去中心化D-CAPT算法。我们在覆盖起始位置和目标位置的凸包中施加相同的无障碍消耗。在分散的假设所有机器人彼此相距足够远,以便机器人能够计算而不考虑与其他机器人的碰撞和交互。最初,所有机器人都是随机分配一个目标,然后我们假设机器人的数量与目标数量。假设机器人有一个可以发送和接收信息的视野来自其他机器人的消息。因此,当两个机器人进入彼此的领域时,它们会局部优化通过改变它们的目标位置,使它们在本地移动最小化平方距离损失函数。

⛄ 部分代码

function [desired_state,fret] = dcaptTrajGenerator(var,tc,state, qn)

%% The function which performs the dcapt computation and simulation

% var is a structure containing start goal f(assignment of goal) nbots

% bound vmax bound


%% Assign params

persistent tprev C_prev U_prev f coeff G


N = var.nbots;

tf = var.tf;


if(tc>=tf)

   desired_state.pos = G(f(qn),:)';

   desired_state.vel = zeros(3,1);

   desired_state.acc = zeros(3,1);

   desired_state.yaw = 0;

   desired_state.yawdot = 0;

   fret =f;

   return;

end


if isempty(tprev)

   G = var.goal;

   f = var.f;

   C_prev = computeNeighb(var.start, var.h);

   U_prev = C_prev;

   tprev = var.t0;

   %% TODO set the des

   X_V_0 = extractPosVel(state);

   coeff = computeCoeff(X_V_0, G(f,:), tc, var.tf, true(N,1));

   desired_state.pos = X_V_0(qn,1:3)';

   desired_state.vel = zeros(3,1);

   desired_state.acc = zeros(3,1);

   desired_state.yaw = 0;

   desired_state.yawdot = 0;

   fret = f;

   return;

end


%% Actual algorithm

X_V_prev = extractPosVel(state);

X_prev = X_V_prev(:,1:3);

isFC = false(N,1);

isFC(qn) = true;

C_t = computeNeighb(X_prev, var.h);


U_t = U_prev | (C_t & (~C_prev));

U_t = U_t & C_t;


while(any(isFC))

 

   %robots to check

   rtc = find(isFC);

   

   for i = 1:numel(rtc)

       

       ri = rtc(i);

       isFC(ri) = false;

       

       % neighb

       n_ind = find(U_t(ri,:));

       

       for j = 1:numel(n_ind)

           % neighb

           rj = n_ind(j);

           

           % any has to be swapped

           if isSwap(X_prev(ri,:), G(f(ri),:), X_prev(rj,:), G(f(rj),:))

               

               % swap fi fj

               tmp = f(ri);

               f(ri) = f(rj);

               f(rj) = tmp';

               

               % new neighb

               U_t(ri,:) = C_t(ri,:);

               U_t(ri,rj) = false;

               U_t(rj,:) = C_t(rj,:);

               U_t(rj,ri) = false;

               

               % recompute trajs

               r_inds = [ri;rj];

               coeff_ij = computeCoeff(X_V_prev, G(f,:), tprev, tf , r_inds );

               coeff.x([ri;rj],:) = coeff_ij.x;

               coeff.y([ri;rj],:) = coeff_ij.y;

               coeff.z([ri;rj],:) = coeff_ij.z;

               

               isFC(ri) = true;

               isFC(rj) = true;

               

           end

           U_t(ri,rj) = false;

       end

   end

end

%plotSim(X_c, var, var.start, var.goal, var.scale)

tprev = tc;

C_prev = C_t;

U_prev = U_t;


fret=f;

[Xc,Vc,Ac] = computeState(tc, coeff, qn);

desired_state.pos = Xc;

desired_state.vel = Vc;

desired_state.acc = Ac;

desired_state.yaw = 0;

desired_state.yawdot = 0;

end


function C = computeNeighb(X, h )

%% X = N by ndim position

% C = N by N sparse matrix 1 for points which are less than h dist

% btw them

N = size(X,1);

C = pdist2(X,X)<=h;

% make diag zeros

C(logical(eye(N))) = 0;

end


function [Xnext,Vnext,Anext] = computeState(tc, coeff, qn)

%% Given the current state and current goals and the

% current time, the time to estimate the next state

% and the end time compute Xnext


tpos = [ 1; tc; tc^2;   tc^3;    tc^4;    tc^5;     tc^6;     tc^7];

tvel = [ 0;  1; 2*tc; 3*tc^2;  4*tc^3;  5*tc^4;   6*tc^5;   7*tc^6];

tacc = [ 0;  0;    2;   6*tc; 12*tc^2; 20*tc^3;  30*tc^4;  42*tc^5];

Xnext = [coeff.x(qn,:)*tpos; coeff.y(qn,:)*tpos; coeff.z(qn,:)*tpos];

Vnext = [coeff.x(qn,:)*tvel; coeff.y(qn,:)*tvel; coeff.z(qn,:)*tvel];

Anext = [coeff.x(qn,:)*tacc; coeff.y(qn,:)*tacc; coeff.z(qn,:)*tacc];


end


function toSwap = isSwap(x_i, g_i, x_j, g_j)

%% checks if u'*w <0; where u = xj_c - xj_c

% checks if u'*w <0; where w = xj_tf - xj_tf


U = x_j - x_i; % 1 by n

W = g_j - g_i; % 1 by n


toSwap = U*W' < 0; % 1 by n x n by 1


end


function X = extractPosVel(state)

%% extract pos and vel

   X = cell2mat(state);

   X = X(1:6,:)';

end


function coeff = computeCoeff(X_V, G, tprev, tf , rob_ind)

%% Compute the coefficients of the septic for all the

% robots if rob_ind is not passed

X_V_int = X_V(rob_ind,:)';

G_int = G(rob_ind,:)';


zrs = zeros(size(X_V_int(1,:)));

x0= X_V_int(1,:);

vx0= X_V_int(4,:);

y0= X_V_int(2,:);

vy0= X_V_int(5,:);

z0= X_V_int(3,:);

vz0= X_V_int(6,:);

xf = G_int(1,:);

yf = G_int(2,:);

zf = G_int(3,:);


% computeSeptic(x0,v0,a0,j0,xf,vf,af,jf, t0,tf)

coeff.x = computeSeptic(x0,vx0,zrs,zrs,xf,zrs,zrs,zrs, tprev,tf)';

coeff.y = computeSeptic(y0,vy0,zrs,zrs,yf,zrs,zrs,zrs, tprev,tf)';

coeff.z = computeSeptic(z0,vz0,zrs,zrs,zf,zrs,zrs,zrs, tprev,tf)';


end

⛄ 运行结果

⛄ 参考文献

[1] James Munkres. Algorithms for the Assignment and Transportation Problems. Journal of the Society for Industrial and Applied Mathematics, 5(1):32–38, 1957.

[2] Matthew Turpin, Nathan Michael, and Vijay Kumar. Capt: Concurrent assignment and planning of trajectories for multiple robots. Int. J. Rob. Res., 33(1):98–112, January 2014.

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
3月前
|
人工智能 算法 机器人
机器人版的斯坦福小镇来了,专为具身智能研究打造
【8月更文挑战第12天】《GRUtopia:城市级具身智能仿真平台》新论文发布,介绍了一款由上海AI实验室主导的大规模3D城市模拟环境——GRUtopia。此平台包含十万级互动场景与大型语言模型驱动的NPC系统,旨在解决具身智能研究中的数据稀缺问题并提供全面的评估工具,为机器人技术的进步搭建重要桥梁。https://arxiv.org/pdf/2407.10943
211 60
|
3月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
195 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
3月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
127 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【人工智能】自然语言处理(NLP)的突破,关注NLP在机器翻译、情感分析、聊天机器人等方面的最新研究成果和应用案例。
自然语言处理(NLP)作为人工智能的一个重要分支,近年来取得了显著的突破,特别在机器翻译、情感分析、聊天机器人等领域取得了显著的研究成果和广泛的应用。以下是对这些领域最新研究成果和应用案例的概述,并附带相应的代码实例。
101 1
|
3月前
|
机器学习/深度学习 算法 机器人
【2023年第十三届APMCM亚太地区大学生数学建模竞赛】A题 水果采摘机器人的图像识别 Python代码解析
本文介绍了2023年第十三届APMCM亚太地区大学生数学建模竞赛A题的Python代码实现,详细阐述了水果采摘机器人图像识别问题的分析与解决策略,包括图像特征提取、数学模型建立、目标检测算法使用,以及苹果数量统计、位置估计、成熟度评估和质量估计等任务的编程实践。
78 0
【2023年第十三届APMCM亚太地区大学生数学建模竞赛】A题 水果采摘机器人的图像识别 Python代码解析
|
3月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
88 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
4月前
|
数据采集 传感器 监控
LabVIEW在机器人研究所中的应用
LabVIEW在机器人研究所中的应用
44 0
|
5月前
|
机器学习/深度学习 数据可视化 算法
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
53 0
|
6月前
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
5天前
|
机器学习/深度学习 传感器 算法
智能机器人在工业自动化中的应用与前景###
本文探讨了智能机器人在工业自动化领域的最新应用,包括其在制造业中的集成、操作灵活性和成本效益等方面的优势。通过分析当前技术趋势和案例研究,预测了智能机器人未来的发展方向及其对工业生产模式的潜在影响。 ###
31 9