Work in progress: this documentation is still being written and reviewed. Check details against the source code.

Poses and saved runs

A pose is a named arm position stored as six joint angles in degrees. A saved run is a task sequence you can load, edit, and execute again.

Registry and inline poses

Choose where to store a pose based on how it should be reused:

Storage

Use it for

Effect of later changes

Shared registry

Calibrated positions used by several tasks. The beamline’s poses_file selects this YAML file.

Tasks that refer to the pose by name use the updated values when planned again.

Inline pose

Coordinates stored under poses in one task’s JSON.

The task keeps these values, even if the shared pose changes.

Inline values take priority when both locations contain the same name.

For example, the CMS registry at src/cms/poses.yaml includes:

safe_sample_transport: [79.72, -69.5, -81.91, -117.92, -268.05, -157.15]

Values follow robot.arm_joints in the selected beamline configuration. For CMS, the order is shoulder pan, shoulder lift, elbow, wrist 1, wrist 2, wrist 3. Use calibrated values for your installation.

The ePick task example stores this pose inline. See pose-name resolution for field-specific rules, including vision retreat poses.

Use the GUI pose panel

  1. Open Poses and use Filter poses to find a shared pose.

  2. Single-click it to inspect its six joint values.

  3. Double-click it, or drag it into the sequence, to add a named Move To step.

The panel lists the shared registry, not the task’s inline poses. Use ↻ to reload after editing the registry outside the GUI.

Save the current position

  1. With live joint data available, press Save Current Pose.

  2. Enter a descriptive name and choose Pose registry or Inline (this task only), then press Save. Reusing a name replaces that stored pose.

  3. If you chose inline storage, save the task with File → Save JSON or save it in Runs to keep the change.

Use Manage Poses to add, edit, delete, or import shared poses. Each change is written immediately; closing the dialog does not undo it. Registry writes do not preserve YAML comments. Saving a pose records coordinates without checking reachability or collision clearance.

Keep a task linked to a shared pose

When a named Move To resolves to six known joint values, its editor opens in Joint values mode. Saving in that mode copies the coordinates into the task as an inline pose.

To keep using the shared position, choose Named target before saving. If an inline override already exists, remove its entry from the task JSON’s poses mapping and reload the file.

Save and load runs

  1. Build the sequence and check Start Gripper.

  2. Open Runs, press Save, and enter a display name and filename.

  3. To reuse a run, double-click it. This replaces the active sequence, so save unfinished edits first. Check Start Gripper after loading. Loading does not execute the run.

Rename changes the display name. Delete removes the saved file after confirmation. ↻ refreshes the list.

Runs are stored in src/cms/runs, including when another beamline configuration is selected. Use File → Save JSON to choose a different location.

After changing poses or calibration

Review any inline poses saved with the run before expecting it to use updated shared coordinates.

Reload the registry in the GUI, then generate and inspect a fresh preview for sequences that support Dry Run. Resolved registry values are included in the plan-cache key, so a changed pose referenced by the task produces a different key. Inline overrides still take priority. See cache behavior and preview limits.