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
- 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.
- 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.
- 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.
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 as0. 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
Related nodes
- 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.