Two machines, each running your own ROS 2 drivers, joined by one bridge node each.

Before you start

  • ROS 2 on both machines, and your own drivers working locally
  • A VideoSDK token, and one room id both machines will join

Install

The bridge node ships in a pip package, and ROS needs a small package of its own to launch it by name.
If that last line prints nothing, build once more. The first build does not always write the environment hook that makes the package findable.

Configure

Copy the example config and change two things: the joint names your driver uses, and this machine’s own joint travel.
params.yaml
Ask your own drivers what they publish and subscribe to, rather than guessing:
joint_names must match on both machines, in the same order. joint_min and joint_max must not: each machine uses its own arm’s travel, and copying one to the other gives an arm that tracks but overshoots near the ends.

Run

Start your own drivers first, so the topics exist before the bridges look for them. Then, on both machines:
Each logs the topics it resolved and warns after five seconds if one is silent. Read those lines first: a name that does not match your driver looks like a dead session rather than an error.

Take control

Nothing moves until you ask. From the operator’s machine:
Move the leader. The follower follows.
Releasing an emergency stop happens on the robot’s machine, deliberately:

If it does not work

Runnable example

A params file, an env script with a shortcut per command, and the full walkthrough.

Reference

Every parameter, topic and service, and what the bridge does about safety.

SO-101

Joint travel read from a LeRobot calibration instead of typed in.