Orders and Tasks¶
This page describes the different types of orders and tasks that can be found in a trial configuration file.
Orders¶
An order is an intruction containing information on a task (kitting task, assembly task, or combined task). Each task consists of at least one part of a specific color and type. Orders are published on the topic /ariac/orders.
An order has the following specifications:
id(string): Each order in a trial has a unique id. If the trial is generated by the ARIAC GUI, the ids will be auto-generated. For competitors who write trial configuration files by hand, a unique id must be provided for each order in the trial file.type(string): Each order has a unique type which can take one of the following three values:kitting: Only kitting is to be performed.assembly: Only assembly is to be performed.combined: Both kitting and assembly are to be performed.
priority(boolean): Each order has a priority. When set tofalsethe order is a regular order and when set totrue, the order is of high priority.announcement: Orders are announced when one of the three following conditions is met:Time-based condition: This condition is used to announce an order when the competition time has reached the time provided in the condition. Note: The competition time is set when the competitor starts the competition. For each trial, the first order always uses a time-based condition with the value 0. This ensures the first order is announced as soon as the competitor starts the competition. The following snippet shows an example of a time-based condition:
announcement: time_condition: 0
Part place condition: When this condition is used, the order is announced as soon as a specific part is placed on a specific AGV. Note: This condition only applies to kitting and not assembly. The following snippet shows an example of a part place condition:
announcement: part_place_condition: agv: 2 type: 'pump' color: 'red'
Submission condition: When this condition is used, the order is announced as soon as another order is submitted. The following snippet shows an example of a submission condition:
announcement: submission_condition: order_id: 'MMB30H56'
Manufacturing task: Only one manufacturing task which can be one of the following options:
Kitting task: Only kitting is to be performed.
Assembly task: Only assembly is to be performed.
Combined task: Both kitting and assembly are to be performed.
Example¶
An example of an order with a kitting task is provided below.
orders:
- id: 'MMB30H56'
type: 'kitting'
announcement:
time_condition: 0
priority: false
kitting_task:
agv_number: 2
tray_id: 2
destination: 'warehouse'
products:
- type: 'battery'
color: 'blue'
quadrant: 1
- type: 'sensor'
color: 'red'
quadrant: 2
- type: 'regulator'
color: 'purple'
quadrant: 3
- type: 'pump'
color: 'orange'
quadrant: 4
Kitting Task¶
Kitting is the process which groups separate but related parts as one unit. For a kitting task, competitors are expected to:
Place a kit tray onto one of the four AGVs.
Place parts onto that kit tray in a specific quadrant.
Direct the AGV to the warehouse.
Evaluate the submitted kit for scoring.
An example of a kitting task in a trial configuration file is presented below with the following description:
This is a regular order (
priorityis set tofalse).This order consists of a kitting task (
typeis set tokitting).The kit must be built on AGV2 (
agv_numberis set to2).The kit try with id 2 must be used to build the kit (
tray_idis set to2).A blue battery must be place in quadrant 1 in the kit tray (
typeis set tobattery,coloris set toblue, andquadrantis set to1).Once the kit is built, the AGV must be directed to the warehouse (
destinationis set towarehouse).
orders:
- id: 'MMB30H2'
type: 'kitting'
announcement:
time_condition: 22
priority: false
kitting_task:
agv_number: 2
tray_id: 2
destination: 'warehouse'
products:
- type: 'battery'
color: 'blue'
quadrant: 1
Assembly Task¶
Assembly is a manufacturing process in which interchangeable parts are added to a product in a sequential manner to create an end product. In ARIAC, assembly is simplified by not “forcing” competitors to use a sequence during assembly. Competitors can place parts in an insert in any order.
For an assembly task, competitors are expected to use parts located on an AGV and assemble those parts at one of the four assembly stations. For a trial where assembly tasks are required, the ARIAC environment starts with parts already located on AGVs. Competitors first need to move the AGVs to the correct assembly stations and then start assembling those parts into inserts. Once the assembly is complete, competitors can submit the assembly via a ROS service call. The ARIAC environment will then evaluate the submitted assembly for scoring.
Example¶
An example of an assembly task in a trial configuration file is presented below with the following description:
This is a regular order (
priorityis set tofalse).This order consists of an assembly task (
typeis set toassembly).The assembly must be performed at assembly station 4 on AGV2 (
stationis set toas4).Parts required to do assembly can be found on AGV3 and AGV4 (
agv_numberis[4,3]).Each part needed for the assembly is specified under the
productsfield.type: The type of the part.color: The color of the part.assembled_pose: The pose of the part in the insert frame.assembly_direction: The direction in which the part should be inserted into the insert frame.
- id: 'MMB30H57'
type: 'assembly'
announcement:
time_condition: 5
priority: false
assembly_task:
agv_number: [4,3]
station: 'as4'
products:
- type: 'sensor'
color: 'green'
assembled_pose: # relative to insert frame
xyz: [0.405, 0.164, 0.110]
rpy: ['pi/2', 0, 0]
assembly_direction: [-1, 0, 0] # unit vector in insert frame
- type: 'battery'
color: 'red'
assembled_pose: # relative to insert frame
xyz: [0.12, 0.122, 0.1222]
rpy: ['pi/4', 0, 0]
assembly_direction: [-1, -1.1, -1.11] # unit vector in insert frame
- type: 'regulator'
color: 'purple'
assembled_pose: # relative to insert frame
xyz: [0.13, 0.133, 0.133]
rpy: ['pi', 0, 0]
assembly_direction: [-2, -2.2, -2.22] # unit vector in insert frame
- type: 'pump'
color: 'orange'
assembled_pose: # relative to insert frame
xyz: [0.14, 0.144, 0.144]
rpy: [0.2, 0, 0]
assembly_direction: [-3, -3.3, -3.33] # unit vector in insert frame
Combined Task¶
A combined task is a task which requires both kitting and assembly. For a combined task, competitors are expected to first perform a kitting task and then perform an assembly task. Note: Only information about the assembly task is provided in the trial configuration file. The kitting task information is left to the competitors to figure out based on the assembly task information.
Competitors can place part anywhere on AGVs and then move those AGVs to the station where assembly is to be performed. Once the assembly is complete, competitors can submit the assembly via a ROS service call. The ARIAC environment will then evaluate the submitted assembly for scoring. Kitting is not scored in a combined task.
Example¶
An example of a combined task in a trial configuration file is presented below. This example is similar to the assembly task example above, but the field agv_number is not provided. Besides the absence of the agv_number field, the following description applies to only a combined task:
type: 'combined'combined_taskfield.
- id: 'MMB30H58'
type: 'combined'
announcement:
time_condition: 25
priority: false
combined_task:
station: 'as2'
products:
- type: 'sensor'
color: 'red'
assembled_pose: # relative to insert frame
xyz: [0.405, 0.164, 0.110]
rpy: ['pi/2', 0, 0]
assembly_direction: [-1, 0, 0] # unit vector in insert frame
- type: 'battery'
color: 'red'
assembled_pose: # relative to insert frame
xyz: [0.12, 0.122, 0.1222]
rpy: ['pi/4', 0, 0]
assembly_direction: [-1, -1.1, -1.11] # unit vector in insert frame
- type: 'regulator'
color: 'red'
assembled_pose: # relative to insert frame
xyz: [0.13, 0.133, 0.133]
rpy: ['pi', 0, 0]
assembly_direction: [-2, -2.2, -2.22] # unit vector in insert frame
- type: 'pump'
color: 'red'
assembled_pose: # relative to insert frame
xyz: [0.14, 0.144, 0.144]
rpy: [0.2, 0, 0]
assembly_direction: [-3, -3.3, -3.33] # unit vector in insert frame