XR-RM75 双臂遥操作
基于 Ubuntu 22.04、ROS2 Humble、PICO 4 Ultra 和睿尔曼 RM75 的双臂 XR 遥操作 工作空间,支持单臂/双臂 Mock 与真机控制,以及 MuJoCo 运动学显示。
Warning
真机命令会连接并控制机械臂。首次运行必须从 Mock 和单臂低速验证开始,确保急停 可用且工作区无人。当前项目没有双臂碰撞检测或避障。
当前能力
- PICO/XR 双手柄 UDP 输入,相对位姿目标与 Placo QP 七关节控制。
- 单臂/双臂 Mock 与真机、手柄/话题夹爪控制,以及只读 MuJoCo 双臂显示。
- 工作空间/圆柱限位、速度限制、指令超时和安全慢停。
- 统一 launch、Tkinter 启动面板、调试话题和 Mock 输入工具。
尚未完成:D405/D435 视频流、数据记录、相机标定、目标检测、双臂碰撞避障、任务级状态机,以及 PICO 与 ROS 的完整时间同步和状态回传。
系统架构
PICO / XRoboToolkit
-> UDP JSON
-> xr_rm_input/udp_controller_receiver
-> /xr/left_controller、/xr/right_controller
-> xr_rm_teleop/single_arm_velocity_teleop
-> 相对 TCP 目标 + Placo QP
-> Mock 或 RM75 rm_movej_canfd
-> joint_states / 调试话题
-> 可选 xr_rm_mujoco/dual_arm_simulator
工作空间包含五个 ROS2 包:xr_rm_input 负责手柄输入,xr_rm_interfaces 定义消息,
xr_rm_teleop 实现遥操作与真机适配,xr_rm_bringup 提供启动和配置,
xr_rm_mujoco 负责只读运动学显示。
single_arm_velocity_teleop 每个实例只控制一台机械臂;双臂模式分别启动 left_arm_teleop 和 right_arm_teleop。
环境与构建
在工作空间根目录执行:
cd /home/robot/WS_xr
source /opt/ros/humble/setup.bash
rosdep update
rosdep install --from-paths src -y --ignore-src
colcon build --symlink-install
source install/setup.bash
遥操作和 MuJoCo 节点固定使用 /home/robot/miniconda3/envs/xr/bin/python,
其中固定 Placo 0.9.4、Pinocchio 3.7.0、NumPy 2.2.6 和 MuJoCo 3.10.0;不要从
用户或系统 Python 覆盖这些版本。
真机模式另需睿尔曼 Python API2;Mock 模式不依赖厂商 SDK。
快速开始
以下命令均在 /home/robot/WS_xr 执行,并先 source ROS2 与 install/setup.bash。
Mock
ros2 launch xr_rm_bringup arm_debug.launch.py arm:=both use_mock:=true
另开终端发送模拟手柄数据:
ros2 run xr_rm_input sample_udp_sender \
--hand both --host 127.0.0.1 --port 15000 \
--pattern axis_sweep --seconds 30
单臂调试时将 arm 改为 left 或 right。推荐先分别完成左右单臂
Mock,再进入双臂或真机验证。
MuJoCo
ros2 launch xr_rm_bringup arm_debug.launch.py \
arm:=both use_mock:=true use_mujoco:=true
MuJoCo 只订阅关节状态,不参与控制。真机显示可将 use_mock 改为 false,
但该命令会同时连接两台 RM75。
PICO 输入
只保留一个 UDP 输入源,然后启动 XRoboToolkit bridge:
ros2 run xr_rm_input xrobotoolkit_to_udp_bridge \
--host 127.0.0.1 --port 15000 --hz 90
确认左右 topic 持续接收数据:
ros2 topic hz /xr/left_controller
ros2 topic hz /xr/right_controller
图形启动面板可运行 python3 src/xr_rm_bringup/tools/launcher_ui.py,提供
Simulation、MuJoCo、Real Hardware 和 Diagnostics 模式。
真机
确认对应 YAML 中 move_to_initial_pose_on_connect: false,再从单臂开始:
ros2 launch xr_rm_bringup arm_debug.launch.py arm:=left use_mock:=false
ros2 launch xr_rm_bringup arm_debug.launch.py arm:=right use_mock:=false
单臂方向、限位、急停、超时停止和夹爪均验证后,才能启动双臂:
ros2 launch xr_rm_bringup arm_debug.launch.py arm:=both use_mock:=false
按住 grip 控制对应机械臂;松开后停止。点击 trigger 切换对应夹爪开/关。
左手 X、右手 A 会请求对应机械臂回到配置的初始位姿;真机使用前必须清空安全区。
Launch 参数
统一入口为 xr_rm_bringup/launch/arm_debug.launch.py:
| 参数 | 默认值 | 说明 |
|---|---|---|
arm |
right |
left、right 或 both |
use_mock |
true |
false 会连接真机 |
use_mujoco |
false |
仅支持 arm:=both |
udp_host |
0.0.0.0 |
UDP 监听地址 |
udp_port |
15000 |
UDP 监听端口 |
udp_timer_hz |
200.0 |
UDP receiver 轮询频率 |
配置
| 文件 | 用途 |
|---|---|
dual_arm_rm75.yaml |
双臂节点、网络、控制与安全参数 |
left_arm_rm75.yaml |
左臂单独调试 |
right_arm_rm75.yaml |
右臂单独调试 |
peripherals_rm75.yaml |
工具坐标、负载和末端执行器 |
dual_arm_mujoco.yaml |
MuJoCo 刷新频率 |
修改某一侧控制参数时,同时检查单臂和双臂 YAML 是否需要同步。必须保留工作空间/ 圆柱限位、线速度与角速度限制、关节速度/加速度限制、指令超时和安全停止逻辑。
configure_safety_limits 不得默认关闭;
move_to_initial_pose_on_connect 必须保持默认 false。
测试
在工作空间根目录执行:
source /opt/ros/humble/setup.bash
colcon build --symlink-install
colcon test --event-handlers console_direct+
colcon test-result --verbose
涉及遥操作姿态控制时,额外运行:
pytest src/xr_rm_teleop/test/test_orientation_control.py
真机验证不属于自动测试。默认使用 use_mock:=true,未经现场安全确认不要连接或
移动机械臂。