3.4 KiB
ROS2 Distributed Teleoperation
This tutorial explains how to set up a distributed teleoperation system using ROS2, allowing a leader robot on one computer to control a follower robot on another computer over a network.
Prerequisites
- ROS2 (Foxy or newer) installed on both computers
- Network connectivity between the leader and follower computers
- lerobot package installed on both computers
Installation
Ensure you have the required ROS2 packages for sensor messages:
pip install sensor_msgs
Setup
1. Configure ROS2 Domain ID (optional but recommended)
To isolate your ROS2 network from others, set the same domain ID on both computers:
# On both leader and follower computers
export ROS_DOMAIN_ID=42 # Choose any number between 0-232
2. Network Configuration
Ensure both computers can communicate over the network:
- Connect both computers to the same network
- Verify they can ping each other
- Make sure any firewalls allow ROS2 communication (default ports)
Running the Distributed Teleoperation
1. Leader Robot Computer
On the computer connected to the leader robot:
python lerobot/scripts/run_ros2_leader.py \
--robot.type=koch \
--robot.leader_arms.main.port=/dev/ttyUSB0 \
--ros2_config.node_name=lerobot_teleop \
--ros2_config.topic_name=joint_states \
--ros2_config.publish_rate_hz=200.0
Replace /dev/ttyUSB0
with the actual port of your leader robot.
2. Follower Robot Computer
On the computer connected to the follower robot:
python lerobot/scripts/run_ros2_follower.py \
--robot.type=koch \
--robot.follower_arms.main.port=/dev/ttyUSB0 \
--ros2_config.node_name=lerobot_teleop \
--ros2_config.topic_name=joint_states
Replace /dev/ttyUSB0
with the actual port of your follower robot.
Note on Topic Names
Make sure both leader and follower use the same topic name (default is joint_states
).
Troubleshooting
1. Check ROS2 Discovery
Verify nodes can discover each other:
# On either computer
ros2 topic list
You should see /joint_states
in the list.
2. Monitor Message Flow
Check if messages are being published:
ros2 topic echo /joint_states
3. Network Issues
If nodes can't discover each other:
- Ensure both computers are on the same network
- Check if ROS_DOMAIN_ID is set to the same value on both computers
- Verify firewall settings
- Try using the ROS_LOCALHOST_ONLY=0 environment variable
4. Debug Node Status
ros2 node list
ros2 node info /lerobot_teleop_leader # or follower
Advanced Configuration
Quality of Service Settings
For teleoperation over unreliable networks, you can adjust QoS settings:
# Use reliable QoS instead of best effort (might increase latency but improve reliability)
--ros2_config.use_best_effort_qos=false
Publishing Rate
Adjust the rate at which joint states are published:
# On leader robot, set a lower rate for unreliable networks
--ros2_config.publish_rate_hz=100.0
Examples
Using with myCobot 280
For MyCobot robots, ensure you've set up the correct motor types:
Leader:
python lerobot/scripts/run_ros2_leader.py \
--robot.type=mycobot \
--robot.leader_arms.main.port=/dev/ttyUSB0 \
--ros2_config.publish_rate_hz=100.0
Follower:
python lerobot/scripts/run_ros2_follower.py \
--robot.type=mycobot \
--robot.follower_arms.main.port=/dev/ttyUSB0