目前,小弟是一位在读电子信息专业的硕士研究生,主要的研究方向是多机器人任务分配。接下来,我会利用这个平台发布一些关于多机器人任务分配的文章,有代码干货、算法原理、结果仿真、算法对比等内容,欢迎大家关注小吴~
本人的多机器人任务分配研究方向主要是卡车和无人机协同工作算法的研究,例如,一辆卡车协同一架或者多架无人机进行包裹投递、多辆卡车协同无人机进行包裹投递等。
什么是任务分配呢?
按照小弟的理解,在我的研究方向中,就是在满足约束的情况下,如何把需要进行包裹投递的客户分配给合适的机器人(卡车或者无人机),同时需要确定每一个机器人执行任务的顺序(先分配包裹给哪个客户)。
介绍一下研究问题总概:环境中,分布着多分散的客户点和停靠点,有一辆卡车协同一架或者多架无人机从仓库出发,为指定区域内的客户停供物流服务(包裹投递)。卡车只能在停靠点之间行驶,无人机只能在停靠点处起飞或者降落。无人机会受到飞行距离和载荷(包裹重量)的约束。当无人机完成一次飞行任务后,都必须返回到卡车上进行包裹补给和充电。问题的目标函数是,最小化卡车和无人机的路程成本,或者最小化服务时间。
下面这个就是我长期的一个仿真环境(350*250)。
环境说明:其中位于(0,0)点的是仓库,也是卡车和无人机的出发点。
其它蓝色的方块代表的是卡车停靠点,红色圆圈代码客户点(包裹投递点)。其中,客户的坐标位置是随机产生的,停靠点的坐标是可以自己设计的。卡车只能在停靠点之间行驶;无人机只能在停靠点处起飞和降落。
例如一辆卡车协同三架无人机的仿真结果,如下图所示。
今天先分享生成环境的Matlab代码吧。
function data = GenData(xRange,yRange,customerNum,interval,maxFlightRange,payload,vt,vd,UAV_Nums)
rand('twister', sum(100*clock));
x_range = xRange/interval;
y_range = yRange/interval;
m = x_range*y_range+1;
data.customerPos(1,:)=(xRange-50)*rand(1,customerNum)+50;%一列代表一个坐标位置
data.customerPos(2,:)=(yRange-50)*rand(1,customerNum)+50;
% Request = round(rand(1,customerNum));%产生需求序列,0-收取,1-派发
%产生Pw和dw
Pw = 5*rand(1,customerNum);
Dw = 5*rand(1,customerNum);
for i=1:x_range
for j=1:y_range
data.stoppingPos(1,(i-1)*y_range+j)=interval*i;
data.stoppingPos(2,(i-1)*y_range+j)=interval*j;
end
end
data.depotPos = [0;0];
data.stoppingPos = [data.depotPos,data.stoppingPos];
data.allPos = [data.stoppingPos,data.customerPos];
data.allKdtree = KDTreeSearcher(data.allPos');
data.stoppingKdtree = KDTreeSearcher(data.stoppingPos');
data.customerKdtree = KDTreeSearcher(data.customerPos');
data.stoppingNum = length(data.stoppingPos(1,:));
data.customerNum = length(data.customerPos(1,:));
data.maxFlightRange = maxFlightRange;
data.payload = payload;
data.vt = vt;
data.vd = vd;
data.UAVNum = UAV_Nums;
% data.Request = Request;
data.Pw = Pw;
data.Dw = Dw;
num = length(data.allPos(1,:));
for i=1:num
for j=i:num
if i~=j
dist = norm(data.allPos(:,i)-data.allPos(:,j));
data.disMatrix(i,j) = dist;
data.disMatrix(j,i) = dist;
else
data.disMatrix(i,j) = 0.0;
end
end
end
end
以后,小吴会在CSDN这个平台上分享各种任务分配的算法代码,带大家手写多机器人任务分配算法代码,欢迎关注小吴~