Configuration Files

Configuration files are described in the YAML format. YAML is a human-readable data serialization format. It is commonly used for configuration files and in applications where data is being stored or transmitted. For more information on YAML, see the YAML website.

ARIAC consists of two main configuration files, which are described below in the following subsections.

Sensor Configuration File

The sensor configuration file describes the location of the sensors in the workcell. One example of sensor configuration file (sensors.yaml) is provided in the test_competitor package.

Below is a description of the different fields in the sensor configuration file. This file contains 4 sensors which have to be described under the field sensors and each sensor consists of:

  1. A name (e.g. right_bins_camera). This name has to be unique among all sensors in the same configuration file.

  2. A type (e.g. type: advanced_logical_camera). This type has to be one of the types defined in the sensor_types field.

    • break_beam

    • proximity

    • laser_profiler

    • lidar

    • rgb_camera

    • rgbd_camera

    • basic_logical_camera

    • advanced_logical_camera

  3. A pose (defined in the world frame with the field pose):

    • Position (e.g. xyz: [-2.286, 2.96, 1.8]).

    • Orientation (e.g. rpy: [pi, pi/2, 0]). The orientation is defined using the roll-pitch-yaw convention. The orientation is defined in radians and can be defined using floating-point values or with the pi constant (pi, pi/2, pi/4, etc.).

Listing 8 shows an example of a sensor configuration file. The field visualize_fov is optional and can be used to visualize the field of view of the sensor. The field visualize_fov can be set to true or false. If the field visualize_fov is not defined, the field of view will not be visualized.

Listing 8 An example of a sensor configuration file.
sensors:
  breakbeam_0:
      type: break_beam
      visualize_fov: true
      pose:
          xyz: [-0.35, 3, 0.95]
          rpy: [0, 0, pi]

  proximity_sensor_0:
      type: proximity
      visualize_fov: true
      pose:
          xyz: [-0.573, 2.84, 1]
          rpy: [pi/2, pi/6, pi/2]

  laser_profiler_0:
      type: laser_profiler
      visualize_fov: true
      pose:
          xyz: [-0.573, 1.486, 1.526]
          rpy: [pi/2, pi/2, 0]

  lidar_0:
      type: lidar
      visualize_fov: false
      pose:
          xyz: [-2.286, -2.96, 1.8]
          rpy: [pi, pi/2, 0]

  rgb_camera_0:
      type: rgb_camera
      visualize_fov: false
      pose:
          xyz: [-2.286, 2.96, 1.8]
          rpy: [pi, pi/2, 0]

  rgbd_camera_0:
      type: rgbd_camera
      visualize_fov: false
      pose:
          xyz: [-2.286, 4.96, 1.8]
          rpy: [pi, pi/2, 0]

  basic_logical_camera_0:
      visualize_fov: false
      type: basic_logical_camera
      pose:
          xyz: [-2.286, 2.96, 1.8]
          rpy: [pi, pi/2, 0]

  advanced_logical_camera_0:
      visualize_fov: false
      type: advanced_logical_camera
      pose:
          xyz: [-2.286, -2.96, 1.8]
          rpy: [pi, pi/2, 0]

Placing Sensors in the Environment

To add sensors in the environment, one can start the simulation environment and use Gazebo’s GUI to add sensors. The sensors can be added by clicking on the Insert button and then selecting the desired sensor type. The sensors can be placed in the environment by clicking on the Move button and then clicking on the desired location in the environment. The sensors can be rotated by clicking on the Rotate button and then clicking on the desired orientation in the environment. The sensors can be deleted by clicking on the Delete button and then clicking on the desired sensor in the environment. Once the sensors are placed in the environment, the sensor configuration file can be updated with the new sensor information.

Another way to place sensors is to add them in the sensor configuration file and then run the simulation environment. The sensors will be added to the environment automatically. They can the been moved and rotated in the environment. Once the sensors are placed in the environment, the sensor configuration file can be updated with the new sensor information.

Trial Configuration File

Trials are the main way to test your robot’s performance. Multiple trials are used during the qualifiers and the finals. The results of each trial are recorded and then used to rank competitors.

Graphical User Interface

A graphical user interface (GUI) for creating trial configuration yaml files was developed for ARIAC2023. The use of this tool is demonstrated in this youtube video.

To run the GUI, build and source the workspace using the installation instructions and run:

ros2 run ariac_gui gui

A trial configuration file (sample.yaml) is provided in the ariac_gazebo package. Below is a description of the different sections in the trial configuration file.

Time Limit

The time limit is defined with the time_limit field. The time limit is defined in (simulation) seconds and can be defined using floating-point values. A time limit of -1 means that there is no time limit (infinite) for this trial. Competitors can set no time limit during testing.

Attention

During the qualifiers and the finals, a finite time limit will be set for each trial.

Kitting Trays

Kitting trays are defined with the kitting_trays field. Information in this field is used to spawn kitting trays in the environment. The tray IDs are provided in a list of integers and set with the field tray_ids. Kitting tray IDs range from 0 to 9. The location of kitting trays in the environment is defined in the field slots, which are slots located on the tray tables. Each tray table has 3 slots. Slots 1-3 for one tray table and slots 4-6 for the other tray table (see Fig. 2).

kittraytables

Fig. 2 Tray tables with slots.

Listing 9 describes 2 kitting trays which are located in slots 2 and 4 on the tray tables. The tray IDs are 1 and 6 respectively.

Listing 9 Example of kit tray locations.
kitting_trays: # Which kitting trays will be spawn
  tray_ids: [1, 6]
  slots: [2, 4]

Part Locations

Parts can be found in 3 different location types: Bins, conveyor belt, and AGVs. The locations of parts in the environment are defined with the parts field. This field can have three subfields: bins, agvs, conveyor_belt.

Bins

Listing 10 Parts in bins.
bins: # bin params - 8 total bins each bin has nine total slots (1-9)
  bin1:
  - type: 'pump'
      color: 'red'
      slots: [1, 5, 9]
      rotation: 'pi/6'
      flipped: true
  - type: 'battery'
      color: 'blue'
      slots: [4, 2]
      rotation: 'pi/2'
  bin3:
  - type: 'regulator'
      color: 'purple'
      slots: [1, 2]
      rotation: 'pi/2'
  - type: 'regulator'
      color: 'purple'
      slots: [3, 4]
      rotation: 'pi/6'
      flipped: true
  - type: 'regulator'
      color: 'purple'
      slots: [5, 6]
      rotation: 0
      flipped: true
  • The bins field can have 8 different binX subfields where X is the bin number. The bin numbers range from 1 to 8.

    • The type field describes the part type in a bin. There can be multiple parts of different types in a bin and multiple parts of the same type. In Listing 10, there are 3 pumps and 2 batteries in bin1 and 6 purple regulators in bin3. The way part locations are defined in bin3 allows for the same part type and color with different orientations and flipped states to be placed in the same bin.

    • The color field describes the part color in a bin.

    • The slots field describes the slots in a bin where the part can be found. Each bin has 9 slots. The slots are numbered from 1 to 9 (see environment.md for more information on bin slots).

    • The rotation field describes the rotation of the part in a bin.

    • The flipped field describes whether the parts are flipped in a bin. In the provided example, all red pumps in bin1 are flipped and all the blue batteries in bin1 are not flipped. See Flipped Parts for more information about flipped parts.

Automated Guided Vehicles (AGVs)

In trials where assembly is required, the environment starts with parts already located on the AGVs.

  • The field agvs specifies each AGV in the environment that has parts located on their back at the start of the simulation.

    • The agvs field can have 4 subfields: agv1, agv2, agv3, and agv4. Each one of these subfields contains a tray ID and a list of parts.

    • The tray_id field describes the tray ID located on the AGV. By convention, tray IDs located on AGVs at the start of the environment are 0.

    • The parts field describes the parts on the AGV.

      • The type field describes the part type on the AGV.

      • The color field describes the part color on the AGV.

      • The quadrant field describes the quadrant of the AGV where the part is located.

      • The rotation field describes the rotation of the part on the AGV.

      • The flipped field describes whether the part is flipped on the AGV.

Listing 11 shows an example of how to start the simulation with 2 parts located on AGV 4.

Note

In all trials, AGVs are always located at their respective kitting stations. Competitors have to move the AGVs to the assembly station to assemble the parts.

Listing 11 Parts on AGVs.
parts:
  agvs:
      agv4:
      tray_id: 0
      parts:
          - type: 'pump'
          color: 'green'
          quadrant: 1
          rotation: 0
          flipped: true
          - type: 'sensor'
          color: 'green'
          quadrant: 3
          rotation: 'pi'

Conveyor Belt

The conveyor belt is the third location where parts can be found.

  • Parts on the conveyor belt travel at a constant speed of 0.2 m/s.

  • When a part reaches the end of the conveyor belt, it is removed from the environment.

Listing 12 shows an example of how to spawn parts on the conveyor belt.

Listing 12 Parts on the conveyor belt.
conveyor_belt:
  active: true
  spawn_rate: 3.0
  order: 'random'
  parts_to_spawn:
  - type: 'battery'
      color: 'red'
      number: 2
      offset: 0.15 # between -1 and 1
      flipped: false
      rotation: 'pi/6'
  - type: 'sensor'
      color: 'green'
      number: 2
      offset: 0.1 # between -1 and 1
      flipped: true
      rotation: 'pi'
  - type: 'regulator'
      color: 'blue'
      number: 3
      offset: -0.2 # between -1 and 1
      flipped: false
      rotation: 'pi/2'
  - type: 'pump'
      color: 'orange'
      number: 1
      offset: -0.15 # between -1 and 1
      flipped: true
      rotation: 'pi/3'
  • The top level field conveyor_belt specifies the parameters for the conveyor belt.

    • The active field specifies whether the conveyor belt is active. If the conveyor belt is active, parts will spawn on the conveyor belt. If the conveyor belt is not active, no parts will spawn on the conveyor belt.

    • The spawn_rate field specifies the rate at which parts spawn on the conveyor belt. The spawn rate is measured in seconds. In the provided example, parts spawn on the conveyor belt every 3 seconds.

    • The order field specifies the order in which parts spawn on the conveyor belt. The order can be either 'random' or 'sequential'.

    • The parts_to_spawn field specifies the parts that spawn on the conveyor belt. The parts_to_spawn field can have multiple part types. In the provided example, there are 2 red batteries, 2 green sensors, 3 blue regulators, and 1 orange pump that spawn on the conveyor belt.

      • The type field specifies the part type that spawns on the conveyor belt.

      • The color field specifies the part color that spawns on the conveyor belt.

      • The number field specifies the number of parts that spawn on the conveyor belt.

      • The offset field specifies the offset of the parts that spawn on the conveyor belt. The offset is measured in meters and ranges from -1 to 1. The offset is the distance between the center of the part and the center of the conveyor belt. In the provided example, the red batteries spawn 0.15 meters to the left of the center of the conveyor belt, the green sensors spawn 0.1 meters to the right of the center of the conveyor belt, the blue regulators spawn 0.2 meters to the left of the center of the conveyor belt, and the orange pump spawns 0.15 meters to the right of the center of the conveyor belt.

      • The flipped field specifies whether the parts that spawn on the conveyor belt are flipped.

      • The rotation field specifies the rotation of the parts that spawn on the conveyor belt.