Configuration and deployment boundaries
EROBS separates installation settings from session options. A beamline YAML defines the robot, tools, camera, poses, and scene. Launch arguments select which components run. Robot models, controllers, and planning settings come from the selected ROS packages.
Select the installation
Set BEAMBOT_BEAMLINE_CONFIG before starting EROBS. For example, from the repository root:
export BEAMBOT_BEAMLINE_CONFIG="$(realpath src/beambot/config/cms_drylab.yaml)"
Use the same selection in each terminal that starts the runtime, GUI, or another configuration-dependent client. Beamline selection is an environment variable; it is not a beambot_bringup.launch.py argument.
The repository includes these files under src/beambot/config/:
File |
Purpose |
|---|---|
|
CMS beamline robot settings |
|
Dry-lab robot endpoint; currently shares CMS tool, pose, scene, and model settings |
|
Preliminary LIX configuration; requires completion before use |
The dry-lab file does not enable mock hardware. Select use_mock_hardware:=true separately, as shown in Run your first task.
Load and apply settings
config_loader.py, under src/beambot/beambot/, provides load_beamline_config(). It reads the selected YAML, validates configured tool payloads and voltages, and returns the settings and source path. Every configured tool needs a finite positive payload_mass and finite payload_cog.x/y/z. tool_voltage accepts 0, 12, or 24 V; omitting it means 0 V. Invalid values are reported together and stop the load.
This is a targeted check, not validation of the entire deployment. Missing selection, missing files, and YAML errors also fail loading; other required fields are checked by their consumers.
A successful load is cached within each process. Callers in that process share the dictionary and must treat it as read-only. The runtime and GUI do not share a live configuration object.
Restart affected processes after changing the YAML or selecting a different file. Editing the file or exporting a new value does not refresh running processes. The cache-reset helper clears only the loader’s cache, not settings already held by callers.
The GUI also reads beamline settings at startup. It can open without a usable configuration to inspect task JSON, but its robot address and pose registry will be unavailable. Some helper functions supply defaults for isolated use; those fallbacks do not replace the runtime’s required configuration.
See the configuration reference for tool states, payloads, offsets, camera settings, and other fields.
Choose the session components
src/beambot/launch/beambot_bringup.launch.py starts the orchestrator and core task servers. The orchestrator starts the selected robot and MoveIt stack when a task needs it.
Launch argument |
Default |
Effect |
|---|---|---|
|
|
Select mock robot control in the managed robot launch. Camera, pipettor, and other device behavior remain separately configured. |
|
|
Start Zivid, |
|
|
Start the pipettor task server. |
|
|
Plan compatible consecutive steps in one MTC task. |
The sample pick/place server is part of the vision launch group, so disabling vision also removes its use_vision: false pick/place endpoints. The launch reference covers joystick, tracing, and logging options.
Resolve pose and scene paths
resolve_beamline_path() expands ~ and handles resource paths as follows:
Absolute path: use the normalized path directly.
Relative path: search upward from the configuration directory, checking up to ten directories for one containing
src/. Resolve against that workspace root; if none is found, use the configuration directory.
For example, poses_file: src/cms/poses.yaml resolves from the workspace root when the YAML is under src/beambot/config/. Moving the YAML outside the workspace can change that result. The resolver constructs a path; it does not check that the resource exists.
Consumer |
Lookup behavior |
|---|---|
Orchestrator and MCP pose registry; MoveIt and GUI scene loading |
Use the shared resolver above |
GUI pose panel |
Searches upward for an existing file matching |
GUI saved runs |
Searches upward for |
Use full absolute resource paths for a configuration stored outside the workspace, and verify both GUI and runtime loading. Saved runs retain their CMS-specific lookup. See poses and saved runs.
Model and planner configuration
Three package settings serve different consumers:
Setting |
Used for |
|---|---|
|
Shared planning parameters, kinematics, and joint limits |
|
The |
|
Robot descriptions used by the GUI viewer |
Keep these packages consistent with the selected tool. The main launch forwards OMPL, Pilz, and optional STOMP settings to the task servers and orchestrator. Stage planning selects STOMP when its parameters are present, otherwise OMPL. Velocity and acceleration scaling come from the beamline’s robot block, with 0.2 fallbacks.
Adapting another installation
Selecting a different YAML does not replace every site-specific choice:
Camera launch: main bringup explicitly starts Zivid with
zivid_optical_frameand presets undersrc/beambot/config/zivid/. Changingcamera.typeorcamera.framealone does not change that launch.Robot launch: CMS bringup still selects CMS packages and contains tool-specific controller and driver branches.
Site data: poses, tool geometry, payloads, camera calibration, and scene geometry must match the installation. The current LIX file lacks active payload values and fails configuration loading, including for mock sessions.
Follow beamline adaptation for the remaining site work and tool and MoveIt lifecycle for how configuration becomes a running robot model.