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 to false the order is a regular order and when set to true, 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:

  1. Place a kit tray onto one of the four AGVs.

  2. Place parts onto that kit tray in a specific quadrant.

  3. Direct the AGV to the warehouse.

  4. 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 (priority is set to false).

  • This order consists of a kitting task (type is set to kitting).

  • The kit must be built on AGV2 (agv_number is set to 2).

  • The kit try with id 2 must be used to build the kit (tray_id is set to 2).

  • A blue battery must be place in quadrant 1 in the kit tray (type is set to battery, color is set to blue, and quadrant is set to 1).

  • Once the kit is built, the AGV must be directed to the warehouse (destination is set to warehouse).

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 (priority is set to false).

  • This order consists of an assembly task (type is set to assembly).

  • The assembly must be performed at assembly station 4 on AGV2 (station is set to as4).

  • Parts required to do assembly can be found on AGV3 and AGV4 (agv_number is [4,3]).

  • Each part needed for the assembly is specified under the products field.

    • 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_task field.

- 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