Robot interface · repose-robot-interface

Available bridges

Hardware bridges live in the repose-bridges repository, outside the core workspace. The MuJoCo bridge lives in the core repo. All of them implement the standard channels.

Safety gates

Hardware bridges never move a robot by accident. Two independent opt-ins are needed:

  1. Build: the control cargo feature. Without it the bridge has no Tx channels at all and is a read-only monitor.
  2. Config: "allow_control": true for session commands, and additionally "allow_motion": true for motion. Both default to false.

The robot-app template turns both on for you, because its purpose is to move the robot. Your own graphs should keep them off until you need them.

igus ReBeL: repose-igus-cri

6-axis igus ReBeL over CRI (TCP). Default address 192.168.3.11:3920.

Typerepose_igus_cri::CuIgusCriBridge
ChannelsRx joint_state, session_state, cri_status (vendor). Tx session, joint_command with control.
ModesVelocity streaming (CRI jog with position-error feedback) and position moves (Move Joint). Effort is refused.
addressNumeric socket address of the controller (no DNS lookup).
allow_control, allow_motionThe config opt-ins above.
velocity_percentSpeed cap for joint moves, 0–25 %.
max_jog_percent, jog_full_scaleVelocity streaming: jog cap and the joint speed at 100 % jog (measured 60 °/s on a V980-14).
position_gainPosition-error feedback added to streamed velocities, 1/s.
command_timeoutVelocity commands older than this become zero jog.
goal_tolerance, max_stepPer-joint "reached" tolerance, and an optional largest step between target and measured angle.
stale_after, connect_timeoutObservation age limit and startup timeout.

Universal Robots & URSim: repose-ur

UR e-Series with PolyScope 5 over RTDE (feedback), the dashboard server (session) and a resident URScript loop (motion). Default address 127.0.0.1:30004, which is URSim on the same machine. Physical UR, CB3 and PolyScope X are not yet validated.

Typerepose_ur::CuUrBridge
ChannelsRx joint_state, session_state, ur_status (vendor). Tx session, joint_command with control.
ModesVelocity streaming (feed-forward joint velocity plus position-error feedback). Position mode for individual movej commands. Effort is refused.
address, script_port, dashboard_portController address and service ports.
allow_control, allow_motionThe config opt-ins.
speed, accelerationLeading-axis limits for movej.
frequency, position_gain, command_timeoutStreaming loop rate, feedback gain, command age limit.
max_step, goal_tolerance, move_timeoutStep limit, "reached" tolerance, move timeout.

See Run on URSim for the simulator setup (Docker, Remote Control, power-on).

MuJoCo: repose-mujoco-sim

A TCP client to a MuJoCo sidecar process, one JSON line each way per Copper cycle. Fixed at 6 joints (the ReBeL). Position commands only.

ChannelsTx joint_command, Rx joint_state. No session.
host = "127.0.0.1"Sidecar address.
port = 8765Sidecar port.
read_timeout = 0.25 sSocket read, connect and write timeout. A silent sidecar can't hang the runtime.
wire protocol
→ {"type":"command","q":[q0,q1,q2,q3,q4,q5]}
← {"type":"state","q":[…],"qd":[…],"time":<sim seconds>}

Enable it through the umbrella crate's mujoco-sim feature. See Simulation.

Swapping bridges

one entry changes, nothing else does
bridges: [
    (id: "robot", type: "repose_ur::CuUrBridge",
     config: {"address": "127.0.0.1:30004", "allow_control": true, "allow_motion": true},
     channels: [Rx(id: "joint_state"), Rx(id: "session_state"), Tx(id: "joint_command"), Tx(id: "session")]),
],

Exact type paths and full config examples are in each bridge's README. The robot-app template generates the right entry from robot.ron.