Skip to main content
The Send Pose (send_joint_commands) node commands a robot into a joint pose — a set of per-joint target angles. When the node runs it publishes a multi-joint message to the twin’s joint topic; the driver moves the robot to those positions.
Palette category: Actuation. Runs on both cloud and edge — in the cloud workflow runner, and compiled into the edge worker when the workflow is edge-targeted (so it still works with no cloud connection). It works in both live and simulation: when the workflow runs in simulation the pose moves the twin in the simulator; in live mode it drives the physical robot.

Requirements

The twin must expose independently commandable joints and have a runtime that accepts joint commands. Selecting a target preserves its existing control configuration; it does not assign a controller policy. Live execution checks edge health before publishing. Publishing a command does not prove that the robot reached its target.

Configuration flow

  1. Target Twin — pick the twin to control. Joint data from another robot does not change this selection. Only joint-controllable twins (robots with movable joints) appear in the list. Required.
  2. Choose a command source: Twin Poses for a saved/custom pose, or Connected joint values to map positions, velocities or efforts from another workflow node. Use Clear pose to use connected values alone.
A target and at least one enabled command source are required. A manual trigger alone does not supply joint values. Connected values override matching joints in a selected pose; they can also be used without a pose. Runtime validation rejects an empty command after filtering invalid values and unsupported joints.
  1. Advanced (optional) — under Control Settings, choose which channels to send with the Positions / Velocities / Efforts checkboxes (and set per-joint velocity/effort values); under Explicit Joint Update, restrict the message to specific joints.
The Message Preview shows the configured static values. Connected values are resolved when the workflow runs.

Poses

Poses are named joint snapshots stored on the twin/asset. The dropdown lists each pose with its joint values, plus a Custom Pose option:
  • The custom editor shows only the twin’s movable joints with a numeric field each (keyboard-editable).
  • Values are validated against each joint’s real limits — out-of-range values turn red and block saving.
  • Give the pose a name and save; it’s stored on the twin and can be reused (and edited later) from the dropdown.

Velocities & efforts

By default a Send Pose message carries just the pose’s positions. Velocities and efforts are included automatically only when the pose/inputs already provide those values; otherwise you enable them explicitly under Advanced → Control Settings (Velocities / Efforts). When a channel is enabled, set per-joint values (validated against the joint’s limits); any joint you leave unset is omitted from the channel (“not commanded”), not sent as 0. This keeps “no velocity/effort command” distinct from an explicit command of zero. Turning a channel off (or leaving it off) omits it from the message entirely.

Explicit (partial) joint update

By default the node sends a full joint update — every joint of the pose is included. Under Advanced → Explicit Joint Update, flip the switch to send only specific joints: a checklist of the twin’s movable joints appears, and only the ones you check are included in the message (across every enabled channel). Use this to command a subset of joints while leaving the rest untouched.

Inputs

Outputs

Example

Chain multiple Send Pose nodes to move a robot through a sequence of poses. On edge the whole sequence runs locally with no cloud round-trips.
  • Send Controller Command — issue a controller-policy command (e.g. a drive burst).
  • Virtual Controller — resolve a command dynamically from upstream input.
  • Get Pose — read a twin’s current pose.