Lab Configuration
Platform Configuration (platform_config.yaml)
The file src/openlab_vu/laborchestrator/platform_config.yaml (mounted into the laborchestrator container as /opt/vu_lab/platform_config.yaml) defines the physical layout of the lab for the scheduler and orchestrator.
It has two sections:
sila_servers
Declares the devices available on the platform, grouped by type, with their capacity (how many plates they can hold simultaneously):
sila_servers:
storage:
hotel_1_d_pos_:
capacity: 8
movers:
robot_arm:
capacity: 1
shakers:
shaker_1_d_pos_1:
capacity: 1
# ... shaker_2 through shaker_10
The device names here (e.g. hotel_1_d_pos_, robot_arm, shaker_1_d_pos_1) must match:
- The node labels in the position graph (see Position graph)
- The resource names used in process definitions (see Orchestrator — Processes)
- The keys in
device_wrappersandsila_server_nameinworker_adaption.py(see Orchestrator — Worker)
pythonlab_translation
Maps the device type categories to PythonLab resource classes:
pythonlab_translation:
storage: LabwareStorageResource
movers: MoverServiceResource
shakers: ShakerServiceResource
This tells the PythonLab scheduling framework which resource type to use when allocating each category of device.
Adding a new device
- Add an entry under the appropriate category in
sila_serverswith acapacityvalue. - Add a matching entry to
device_wrappersandsila_server_nameinworker_adaption.py. - Add the device's positions to the position graph.
- Reference the device by the same name in your process definition.
For documentation on adapting this setup to a different lab entirely, see the OSLA lab automation tutorial.
Position Graph
The file src/openlab_vu/robot_arm/new_graphs/position_graph_VULabArm.gml is a GML graph that encodes the 3D coordinates the robot arm uses to reach every device in the lab.
Each device has:
- An entrypoint node — a safe intermediate position the arm moves through before approaching the device
- One or more path nodes (
_ppath_N) — waypoints for collision-free approach - A position node (e.g.
shaker_1_d_pos_1) — the final pick/place coordinate
Each node stores the arm's x, y, z position (in mm) and roll, pitch, yaw orientation (in degrees).
The graph was created using the site_parser tool, which provides a GUI for recording arm positions and exporting them as a GML file.
To update positions (e.g. after moving a device or adding a new one), use site_parser to record the new positions and export an updated GML file to src/openlab_vu/robot_arm/new_graphs/. The directory is bind-mounted into the robot arm container, so a restart is sufficient to pick up changes:
docker compose restart robot_arm
Converting positions from internal OSLA format
The positions for the robot arm have been converted from an internal OSLA positions file. This file has been generated by an alternate script used to set the initial positions. In order to convert a new file in this internal format to locations that can be used by GenericRoboticArm the tool site parser has been developed.