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:
A name (e.g.
right_bins_camera
). This name has to be unique among all sensors in the same configuration file.A type (e.g.
type: advanced_logical_camera
). This type has to be one of the types defined in thesensor_types
field.break_beam
proximity
laser_profiler
lidar
rgb_camera
rgbd_camera
basic_logical_camera
advanced_logical_camera
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 thepi
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.
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).

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.
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
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 differentbinX
subfields whereX
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 inbin1
and 6 purple regulators inbin3
. The way part locations are defined inbin3
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 inbin1
are flipped and all the blue batteries inbin1
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
, andagv4
. 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.
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.
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. Theparts_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.