Skip to main content
This guide connects your ROS 2 robot to an operator machine. When you’re done, moving the leader arm on one machine moves the robot on the other. Using SO-101 arms? Follow the SO-101 guide instead.

Prerequisites

  • Ubuntu 24.04 and ROS 2 Jazzy on both machines
  • An access token and a room id.

Install the SDK

On both machines:
Check the install: which zrt-teleops-ros2-leader should print a path.

Set your environment

Both machines need your token and the same room id (ZERORUNTIME_MEETING_ID). To create a room id, run this once on either machine and copy the result:
Then, on both machines:
Repeat this setup in every new terminal: source /opt/ros/jazzy/setup.bash, source ~/ros2-venv/bin/activate, and the two exports.

Create a params file

Create params.yaml on both machines, with your robot’s joints and topics:
params.yaml
Use the same joint_names, in the same order, on both machines. Set joint_min and joint_max for each machine’s own arm.joint_names must also be in the same order as your controller’s joints: the bridge sends a std_msgs/Float64MultiArray in that order.

Start the bridges

Start your drivers first, then one bridge on each machine:

Take control

In a new terminal on the operator machine:
Move the leader arm. The robot follows it.If it’s refused and names a joint, the two arms are too far apart. Move the leader to match the robot, or set max_misalignment: 0.0 to let the robot move to the leader.

Stop the robot

After clearing an emergency stop, run take_control again.

Troubleshooting

What’s next

Reference

Settings, services, recording, and more.

SO-101

Set up two SO-101 arms.