任务编排之循环任务
之前有很多项目或展会中需要用到循环任务,但是兄弟们苦于无法正确配置出来,这里简单讲解一下循环任务的配置方法,如有问题欢迎指出!

循环任务大多用到像展会之类的需要稳定跑循环的场景中,指定次数的循环技术分享会已经介绍过了,这里不再多嘴= = 这里只介绍无限循环的配置方法。

我们以某展会的CTU的循环场景为例,假设CTU的循环路线为路线如下(初始状态下层为满,高层为空)

image20251105161400126.png

那么可以知道基本节点为4个平层搬运,实现四个搬运,1、2将料箱从下层搬运到高层,3、4将料箱从高层搬到底层回到初始状态,然后进行下一轮循环。模板如下:

image20251105161635715.png
这里的循环任务涉及到四个点位,所以下发任务需要给四个点位,R1-R4分别对应右下、左下、左上、右上四个仓位。

image20251105161801305.png
接下来看看平层搬运的点位设置----

平层搬运1:起点接口参数1,终点接口参数3

平层搬运2:起点接口参数2,终点接口参数4

到这里关键点就来了,因为我们前面两个平层搬运都是两个料箱的第一次搬运,已经申请到载具并且知道了载具的实际位置,我们后面两个平层搬运也只是复用载具对象,所以不必再次申请载具,直接使用前序节点输出的载具对象。我们每一个平常搬运输出的载具对象名称默认都是carrier,终点仓位都是slot,所以我们这里需要用到不同节点的载具和站点,所以需要区分一下
一定要先修改节点输出再去配置平层搬运3、4的点位信息(参照下文将carrier分别改为carrier1、carrier2…)

平层搬运3:起点是前序节点输出的载具变量(carrier2),终点是接口参数2

平层搬运4:起点是前序节点输出的载具变量(carrier1),终点是接口参数1

修改第一个平层搬运的输出,carrier改为carrier1,slot改为slot1

image20251105162833941.png

同理,第二个平层搬运carrier改为carrier2,slot改为slot2,第三个…

最后一个节点脚本逻辑用于去复制原始参数生成新的任务单,如果没有生成成功当前任务就不会结束,但是当前任务不结束,任务就会卡在第四个平层搬运,carrier4,slot4就不会被释放,陷入死循环了,所以我们需要手动释放一下,加入释放载具和释放站点

image20251105163219136.png
image20251105163235373.png

下面就是重头戏了,我们的脚本逻辑!把下面这一长段复制进行就ok了,这里任务下发了四个点位,所targetRouteList.add()方法调用了四次,用于去复制四个点位,如果只有两个点位,那就只用保留两次调用就可以了。

import robot.glory.tas.frame.model.task.dto.param.SubmitParam;

import robot.glory.tas.frame.model.task.dto.TargetRoute;

import robot.glory.framework.util.UuidUtil;

import robot.glory.tas.frame.msg.gbt.service.GbtTaskService;

import robot.glory.framework.core.context.SpringContext;

import java.util.List;

import com.google.common.collect.Lists;

SubmitParam submitParam = (SubmitParam)execution.getVariable(“submitParam”);

SubmitParam param = new SubmitParam();

String uuid = UuidUtil.genUuid();

param.setRobotTaskCode(uuid);

param.setHeaderParam(submitParam.getHeaderParam());

List < TargetRoute > targetRouteList = Lists.newArrayList();

targetRouteList.add(submitParam.getTargetRoute().get(0)); //复制第一个点

targetRouteList.add(submitParam.getTargetRoute().get(1)); //复制第二个点

targetRouteList.add(submitParam.getTargetRoute().get(2)); //复制第三个点

targetRouteList.add(submitParam.getTargetRoute().get(3)); //复制第四个点

param.setTargetRoute(targetRouteList);

param.setTaskType(submitParam.getTaskType());

param.setInitPriority(submitParam.getInitPriority());

param.setExtra(submitParam.getExtra());

param.setRobotCode(submitParam.getRobotCode());

param.setRobotType(submitParam.getRobotType());

param.setDeadline(submitParam.getDeadline());

param.setInterrupt(submitParam.getInterrupt());

param.setGroupCode(submitParam.getGroupCode());

param.getHeaderParam().setRequestId(uuid);

GbtTaskService gbtTaskService = SpringContext.getBean(“gbtTaskService”);

gbtTaskService.doSubmit(param);

param


PS:指定次数循环的配置方法:https://www.v-club.com/home/article/9952

版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇
已经是第一篇啦~
下一篇

【应用指南】二次开发回放指南

评论请先登录 登录
全部评论 1
作者

这里强调一下,有兄弟指出为什么不用指定循环次数的那种方式将循环次数设置的无限大来实现无限循环,指定次数的循环,所有搬运任务都在一个任务链里面,如果循环次数多了,就会导致数据越来越庞大,导致后面去查看这个任务链时会很卡,对系统性能也有影响,也不方便维护,所以不推荐

2025-11-05 16:55:14 浙江省
回复
  • 1
Lv.0
0
关注
0
粉丝
0
创作
0
获赞
相关阅读
  • 叉车效率优化
    2025-11-28 浏览 0
  • 细化梯度
    2025-11-26 浏览 0
  • 任务编排之循环任务
    2025-11-05 浏览 0
  • 移动机器人技术分享-25年11月
    2025-11-14 浏览 0
  • 【2D算法系列】基于投影分析的字符分割算法实现详解
    2025-11-11 浏览 0

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器