Conditions, Orders, and Tasks

This page describes the different types of conditions, orders and tasks that can be found in a trial configuration file.

Conditions

Orders and challenges are announced under some conditions. There are 3 types of conditions in ARIAC 2023:

  • 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 with the service call /ariac/start_competition. This is different from the simulation time which is set when Gazebo starts.

    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. Listing 1 shows an example of a time-based condition where an ordered is announced at 10.5 seconds into the competition.

    Listing 1 Time-based condition.
    announcement:
      time_condition: 10.5
    
  • Part placement condition: When this condition is used, an order or a challenge is announced as soon as a specific part is placed on a specific AGV. Note: This condition only applies to kitting and not assembly. Listing 2 shows an example of a part placement condition which announces an order or a challenge when a red pump is placed on AGV 2.

    Listing 2 Part placement condition.
    announcement:
      part_place_condition:
        agv: 2
        type: 'pump'
        color: 'red'
    
  • Submission condition: When this condition is used, an order or a challenge is announced as soon as another order is submitted. Listing 3 shows an example of a submission condition which announces an order or a challenge when the order 'MMB30H56' is submitted.

    Listing 3 Submission condition.
    announcement:
      submission_condition:
        order_id: 'MMB30H56'
    

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: One of the 3 Conditions.

  • Manufacturing task: Only one of the manufacturing tasks below must be provided:

Setup

Listing 4 shows an example of an order description which consists of a kitting task,

Listing 4 Example of an order description.
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, the CCS is 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.

Setup

An example of a kitting task in a trial configuration file is presented in Listing 5. The kitting task in this example is described as follows:

  • The kit must be built on AGV 2 (agv_number: 2).

  • The kitting tray with id 2 must be used to build the kit (tray_id: 2).

  • A blue battery must be place in quadrant 1 in the kitting tray (type: 'battery', color: 'blue', and quadrant: 1).

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

Listing 5 Example of a kitting task description.
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. The CCS can place parts in an insert in any order. For a trial where assembly tasks are required, the ARIAC environment starts with parts already located on AGVs. The CCS is expected to:

  1. Lock the AGV trays.

  2. Move the AGVs to the correct assembly station.

  3. Call the pre-assembly poses service.

  4. Assemble the parts into an insert.

  5. Submit the assembly for scoring.

Caution

This pre-assembly poses service can be called only once for each order ID. The AGVs need to be at the correct assembly station for the service to work.

Setup

An example of an assembly task in a trial configuration file is presented in Listing 6 with the following description:

  • Assembly is required to be performed at assembly station 4 (station: 'as4').

  • Parts required to do assembly can be found on AGV 3 and AGV 4 (agv_number: [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 (Note: These are bogus numbers).

    • assembly_direction: The direction in which the part should be inserted into the insert frame (Note: These are bogus numbers).

Listing 6 Example of an assembly task description.
- 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, the CCS is expected to first perform a kitting task followed with an assembly task.

Note

The kitting task information is left to the competitors to figure out based on the assembly task information. The CCS can place part sanywhere on AGVs and then move those AGVs to the station where assembly is to be performed. Once the assembly is complete, the CCS can submit the assembly via a ROS service call (see Table 1). The AM will then evaluate the submitted assembly for scoring (kitting task is not scored).

Setup

An example of a combined task in a trial configuration file is presented in Listing 7. This example is similar to the assembly task from Listing 6, except for the field agv_number which is not used.

Listing 7 Example of a combined task description.
- 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