Files
acRealman_xr/README.md
T

229 lines
7.7 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# XR-RM75 双臂遥操作
基于 **Ubuntu 22.04、ROS2 Humble、PICO 4 Ultra 和睿尔曼 RM75** 的双臂 XR 遥操作
工作空间,支持单臂/双臂 Mock 与真机、MuJoCo 显示和右臂番茄采摘 ACT 数据采集。
> [!WARNING]
> 真机命令会连接并控制机械臂。首次运行必须从 Mock 和单臂低速验证开始,确保急停
> 可用且工作区无人。当前项目没有双臂碰撞检测或避障。
## 当前能力
- PICO/XR 双手柄 UDP 输入,相对位姿目标与 Placo QP 七关节控制。
- 单臂/双臂 Mock 与真机、夹爪开合,以及只读 MuJoCo 双臂显示。
- 工作空间/圆柱限位、速度限制、指令超时和安全慢停。
- 三路 RealSense 链路测试与右臂 ACT/ALOHA 风格 HDF5 采集。
尚未完成:左腕 D405 的 ACT 接入、相机 ROS launch/TF/标定、目标检测、双臂碰撞避障、任务级状态机,以及 PICO 与 ROS 的完整时间同步和状态回传。
## 系统架构
```text
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
└── ActControlSample + D455/D405
-> act_episode_recorder
-> episode_<编号>.hdf5
```
工作空间包含五个 ROS2 包:`xr_rm_input` 负责手柄输入,`xr_rm_interfaces` 定义消息,
`xr_rm_teleop` 实现控制与 ACT 录制,`xr_rm_bringup` 提供启动和配置,
`xr_rm_mujoco` 负责只读运动学显示。
`single_arm_velocity_teleop` 每个实例只控制一台机械臂;双臂模式分别启动 `left_arm_teleop``right_arm_teleop`
## 环境与构建
在工作空间根目录执行:
```bash
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 和 ACT 节点固定使用 `/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。ACT 采集需要 `h5py``pyrealsense2`
三相机测试还需要 OpenCV。Mock 模式不依赖厂商 SDK。
## 快速开始
以下命令均在 `/home/robot/WS_xr` 执行,并先 source ROS2 与 `install/setup.bash`
### Mock
```bash
ros2 launch xr_rm_bringup arm_debug.launch.py arm:=both use_mock:=true
```
另开终端发送模拟手柄数据:
```bash
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
```bash
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
```bash
ros2 run xr_rm_input xrobotoolkit_to_udp_bridge \
--host 127.0.0.1 --port 15000 --hz 90
```
确认左右 topic 持续接收数据:
```bash
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`,再从单臂开始:
```bash
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
```
单臂方向、限位、急停、超时停止和夹爪均验证后,才能启动双臂:
```bash
ros2 launch xr_rm_bringup arm_debug.launch.py arm:=both use_mock:=false
```
按住 `grip` 控制对应机械臂;松开后停止。点击 `trigger` 切换对应夹爪开/关。
## RealSense 与 ACT 采集
### 三相机测试
连接两台 D405 和一台 D455 后执行:
```bash
/home/robot/miniconda3/envs/xr/bin/python \
src/xr_rm_bringup/tools/realsense_multi_camera_test.py
```
默认将序列号 `260322272273` 识别为左腕 D405,另一台 D405 为右腕,D455 为
全局相机。按 `S` 保存三路快照,按 `Q``Esc` 退出并打印链路汇总。
快照目录为 `src/xr_rm_bringup/test/camera_test_output/`
### ACT episode
ACT 目前仅支持右臂真机。以下命令会连接并控制右侧 RM75:
```bash
ros2 launch xr_rm_bringup arm_debug.launch.py \
arm:=right use_mock:=false record_act:=true
```
`record_act:=true` 启动后默认显示全局 D455 和右腕 D405 双路画面,并显示实时
FPS、真实丢帧率、帧龄、双相机时间差、录制状态、episode 编号和样本数。按
`Q``Esc` 或关闭窗口只会停止预览,ACT 相机采集和录制继续运行;没有桌面环境
或 OpenCV 显示失败时也不会影响录制。
相机采集线程观察到的真实掉帧仍会拒绝 episode。独立 `30 Hz` 控制和相机时钟
造成的 ACT 样本重复/跨帧只写入 HDF5 质量指标,不再误报为相机丢包。
默认配置位于 `xr_rm_bringup/config/act_tomato_pick.yaml`D455 序列号
`234222303366`,右腕 D405 序列号 `412622272532`90 Hz 控制数据下采样为
30 Hz。输出位于 `/home/robot/ACT_Data/tomato_pick/`,状态发布到
`/act/recording_status`
录制流程:
1. 打开夹爪并松开右手 `grip`
2. 点击右手 B 完成预检并进入 `ARMED`
3. 按住右手 `grip` 开始遥操作和录制。
4. 松开 `grip`,点击右手 B 保存。
`ARMED` 或录制期间长按左手 Y 一秒可丢弃当前 episode。录制期间点击右手 A
会触发初始化位姿并使当前数据无效。
预检和保存会检查控制连续性、反馈有效性、夹爪状态、磁盘空间、相机帧率/掉帧、
帧龄和双相机时间差。不合格或中断的数据保存在 `rejected/`
## Launch 参数
统一入口为 `xr_rm_bringup/launch/arm_debug.launch.py`
| 参数 | 默认值 | 说明 |
| --- | --- | --- |
| `arm` | `right` | `left``right``both` |
| `use_mock` | `true` | `false` 会连接真机 |
| `use_mujoco` | `false` | 仅支持 `arm:=both` |
| `record_act` | `false` | 仅支持 `arm:=right use_mock:=false` |
| `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 刷新频率 |
| `act_tomato_pick.yaml` | ACT 相机、存储与质量阈值 |
修改某一侧控制参数时,同时检查单臂和双臂 YAML 是否需要同步。必须保留工作空间/
圆柱限位、线速度与角速度限制、关节速度/加速度限制、指令超时和安全停止逻辑。
`configure_safety_limits` 不得默认关闭;
`move_to_initial_pose_on_connect` 必须保持默认 `false`
## 测试
在工作空间根目录执行:
```bash
source /opt/ros/humble/setup.bash
colcon build --symlink-install
colcon test --event-handlers console_direct+
colcon test-result --verbose
```
涉及遥操作姿态控制时,额外运行:
```bash
pytest src/xr_rm_teleop/test/test_orientation_control.py
```
真机验证不属于自动测试。默认使用 `use_mock:=true`,未经现场安全确认不要连接或
移动机械臂。