本人研究方向:多机器人任务分配的简单介绍

目前,小弟是一位在读电子信息专业的硕士研究生,主要的研究方向是多机器人任务分配。接下来,我会利用这个平台发布一些关于多机器人任务分配的文章,有代码干货、算法原理、结果仿真、算法对比等内容,欢迎大家关注小吴~

本人的多机器人任务分配研究方向主要是卡车和无人机协同工作算法的研究,例如,一辆卡车协同一架或者多架无人机进行包裹投递、多辆卡车协同无人机进行包裹投递等。

什么是任务分配呢?

按照小弟的理解,在我的研究方向中,就是在满足约束的情况下,如何把需要进行包裹投递的客户分配给合适的机器人(卡车或者无人机),同时需要确定每一个机器人执行任务的顺序(先分配包裹给哪个客户)

介绍一下研究问题总概:环境中,分布着多分散的客户点和停靠点,有一辆卡车协同一架或者多架无人机从仓库出发,为指定区域内的客户停供物流服务(包裹投递)。卡车只能在停靠点之间行驶,无人机只能在停靠点处起飞或者降落。无人机会受到飞行距离和载荷(包裹重量)的约束。当无人机完成一次飞行任务后,都必须返回到卡车上进行包裹补给和充电。问题的目标函数是,最小化卡车和无人机的路程成本,或者最小化服务时间。

下面这个就是我长期的一个仿真环境(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这个平台上分享各种任务分配的算法代码,带大家手写多机器人任务分配算法代码,欢迎关注小吴~

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小吴伴学者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值