更新时间:2026-07-13 GMT+08:00
分享

R2C SDK已支持的机器人

R2C SDK通过RobotFactory统一创建和管理机器人硬件适配器,所有适配器实现IRobotHardwareAdapter接口(connect/disconnect/get_observation/send_action),通过YAML配置文件驱动。

表1 已支持的适配器

适配器类型

hardware.type

适用硬件

关键依赖

配置样例

Dummy仿真模拟器

dummy

无(纯软件)

DummyRobot:Dummy仿真模拟器

LeRobot驱动

lerobot

SO101

lerobot,draccus

LeRobot(SO101)

UR5e RTDE直驱

ur5e_rtde

UR5e+DH夹爪+RealSense

ur-rtde,pyserial,pyrealsense2

UR5e RTDE(Universal Robots UR5e直驱)

Flexiv Rizon4

flexiv

非夕Flexiv Rizon4机器人

非夕Flexiv RDK

非夕Flexiv Rizon4机器人

五八智能 天狼Q25 模拟摇杆控制

custom

五八智能 天狼Q25

五八智能 天狼Q25 模拟摇杆控制

优艾智合 隙锋

custom

优艾「隙锋 2.0」人形轮臂机器人

pypilot

隙锋人形机器人

华沿机械臂

custom

华沿 S05机械臂

华沿机械臂

拓斯达X5机械臂

custom

拓斯达X5机械臂

拓斯达X5机械臂

千寻智能moz1人形机器人

custom

千寻智能moz1人形机器人

mozrobotSDK

千寻智能moz1人形机器人

Zenoh ROS1通用

zenoh_ros1

星海图GALAXEA R1、任何ROS1平台

zenoh-python

Zenoh ROS1:通用ROS1机器人(Zenoh Bridge)

ROS2通用

ros2

Jaka Mini2、任何ROS2平台

rclpy

ROS2:通用ROS2机器人平台

回放

playback

无(数据回放)

Playback:回放录制数据

通用环境要求

R2C SDK运行的软件环境如表2所示。

表2 基础系统要求

项目

要求

Python

>= 3.10(推荐3.12+)

架构

x86_64

操作系统

Linux(推荐Ubuntu 22.04/24.04)

通用CLI启动方式

所有适配器都通过统一的CloudRobo client命令行入口启动:

python -m r2c_sdk.cloudroboclient --bundle config/cert_xxx.zip --robot-config config/robot_xxx_config.yaml 
  • cert_xxx.zip接入配置文件是在CloudRobo平台控制台上“运行管理 >机器人”页面中,创建接入机器人后,可下载该接入配置文件。
  • 机器人的配置文件robot_xxx_config.yaml在R2C SDK软件包中的config目录下。
表3 常用CLI参数

参数

说明

默认值

--client-config

客户端通信配置YAML

config/client_config.yaml

--robot-config

机器人硬件配置YAML

config/robot_dummy_config.yaml

--bundle

平台证书包(zip或目录路径)

--duration

运行时长(秒),0=无限运行

0.0

--record

录制观测数据到指定.r2cr文件

--log-level

日志级别:DEBUG/INFO/WARNING/ERROR

INFO

--log-file

日志文件路径(轮转100MB×5)

--hardware-class

自定义适配器类路径(覆盖配置)

--translator-class

自定义翻译器类路径(覆盖配置)

DummyRobot:Dummy仿真模拟器

适用场景: 无真实硬件时进行端到端链路联调(cloudroboclient ↔ cloudrobo(policy server)),或CI自动化测试。

硬件要求: 无。

依赖: 无需额外安装(仅使用numpy,SDK已包含)。

请参考config/robot_dummy_config.yaml文件的配置。

下面是该配置文件中的部分配置内容:

表4 dummy_config部分

参数

类型

说明

默认值

joint_names

List[str]

关节名称列表

6 个SO101样式的默认名

initial_joint_positions

List[float]

初始关节位置

全零

max_joint_speed_rad_s

float

最大关节速度 (rad/s)

2.5

image_specs

Dict

虚拟相机规格 {name: {h, w, c}}

1个480×640×3 的front相机

Dummy adapter生成数据:

  • 关节位置:从initial_joint_positions开始,收到action后向目标移动(受max_joint_speed_rad_s限制)。
  • 图像:根据image_specs生成随机像素的numpy数组。
    # 启动 Dummy 机器人
    python -m r2c_sdk.cloudroboclient  --bundle config/cert_xxx.zip --robot-config config/robot_dummy_config.yaml 

可用的Dummy预设配置:

  • config/robot_dummy_config.yaml — SO101样式(6关节,front+wrist相机)。
  • config/robot_ur5e_dummy_config.yaml — UR5e样式(7维状态:x/y/z/rx/ry/rz/gripper_position,wrist+third_person相机)。
  • config/robot_jaka_dummy_config.yaml — JAKA样式(7关节,top+wrist相机)。

LeRobot(SO101)

适用场景: 使用LeRobot库驱动的SO101系列机械臂(Follower臂)等。

硬件要求:
  • SO101系列机械臂(或其他LeRobot兼容硬件)。
  • 通过USB串口 (/dev/ttyACM0或类似) 连接。
  • USB相机(可选,用于观测)。
表5 系统/软件要求

项目

要求

操作系统

Linux(推荐Ubuntu 22.04/24.04)/ Windows 11

Python

>= 3.10

LeRobot

pip install lerobot

draccus

pip install draccus(LeRobot依赖)

opencv-python

pip install opencv-python(相机采集)

# 安装 LeRobot 核心库
pip install lerobot draccus  
# 如使用 USB 相机
pip install opencv-python 

请参考config/robot_so101_lerobot_config.yaml文件的配置。

下面是该配置文件中的部分配置内容:

表6 lerobot_config部分

参数

类型

说明

type

str

Robot类型,如so101_follower, koch_follower, omx_follower, bi_so_follower。

id

str

Robot实例标识符。

port

str

串口设备路径(如 /dev/ttyACM0)。

calibration_dir

str/null

标定数据目录,null表示不加载标定。

cameras

Dict

相机配置,每项包含 {type, index_or_path, width, height, fps}。

runtime.robot_connect

Dict

可选,传递给robot.connect(**kwargs)的额外参数。

runtime.robot_calibrate

bool

是否在连接时运行标定。

# Step 1: 确认串口设备
ls /dev/ttyACM* /dev/ttyUSB*  
# Step 2: 确认相机设备
ls /dev/video*  
# Step 3: 修改配置中的port和相机路径
vim config/robot_so101_lerobot_config.yaml  
# Step 4: 启动
python -m r2c_sdk.cloudroboclient --bundle config/cert_xxx.zip --robot-config  config/robot_so101_lerobot_config.yaml

UR5e RTDE(Universal Robots UR5e直驱)

适用场景: 通过RTDE(Real-Time Data Exchange)协议直接控制UR5e机械臂,无需ROS2。适用于需要低延迟、高频控制的研究与工业场景。

硬件要求:
  • Universal Robots UR5e机械臂(CB3/e-Series控制器)。
  • DH Robotics夹爪(AG-95或兼容型号,通过USB-RS485连接)。
  • Intel RealSense D400系列相机(D435/D435I,通过USB连接)。
  • 所有设备需在同一局域网。
表7 系统/软件要求

项目

要求

操作系统

Linux (Ubuntu 22.04/24.04)

Python

>= 3.10

ur-rtde

pip install ur-rtde>=1.5

pyserial

pip install pyserial>=3.5

pyrealsense2

pip install pyrealsense2>=2.56

# 安装 UR5e 可选依赖
pip install -e ".[ur5e]"  
# 或手动安装
pip install ur-rtde>=1.5 pyserial>=3.5 pyrealsense2>=2.56 
  • UR5e机械臂
    • UR5e控制器IP:192.168.5.152(默认,可在配置中修改)。
    • RTDE端口:默认30004。
    • 确认控制器已启动,示教器显示 "RUNNING" 状态。
  • DH夹爪
    • 通过USB转RS485适配器连接。
    • 设备路径:/dev/ttyUSBDH_(默认,可在配置中修改)。
  • RealSense相机
    • D435I(腕部):序列号045322075954。
    • D435(第三人称):序列号134222076113。
    • 通过USB 3.0连接。

请参考config/robot_ur5e_config.yaml文件的配置。

下面是该配置文件中的部分配置内容:

表8 ur5e_config.robot部分

参数

类型

说明

默认值

robot_ip

str

UR5e控制器IP

"192.168.5.152"

frequency

int

RTDE控制循环频率 (Hz)

500

lookahead_time

float

servoL前瞻时间 (s)

0.1

gain

int

servoL增益

300

max_pos_speed

float

最大位置速度 (m/s)

0.25

max_rot_speed

float

最大旋转速度 (rad/s)

0.6

tcp_offset

float

工具中心点偏移 (m)

0.21

init_joints

List[float]

可选初始关节位置

verbose

bool

打印状态信息

true

action_mode:

  • “absolute”: 命令值即为目标具体值。
  • “delta”: 命令值为相对于当前状态的偏移量。
表9 ur5e_config.gripper部分

参数

类型

说明

默认值

port

str

串口设备路径

"/dev/ttyUSBDH_"

baudrate

int

波特率

115200

max_width

float

最大开度 (m)

0.08

max_speed

float

最大速度 (m/s)

0.07273

max_force

float

最大力 (N)

140.0

ur5e_config.cameras: 每项为{name, serial, width, height, fps}。serial值为RealSense相机序列号。

# Step 1: 确认 UR5e 控制器可达
ping 192.168.5.152  
# Step 2: 确认串口设备
ls /dev/ttyUSBDH_* /dev/ttyUSB*  
# Step 3: 确认 RealSense 相机连接(可选)
rs-enumerate-devices  
# Step 4: 修改配置中的 IP、串口、相机序列号
vim config/robot_ur5e_config.yaml  
# Step 5: 启动
python -m r2c_sdk.cloudroboclient --bundle config/cert_xxx.zip --robot-config config/robot_ur5e_config.yaml 
  • 启动前确保机械臂周围无障碍物。
  • 首次运行建议设置较小的max_pos_speed和max_rot_speed。
  • 随时可通过键盘e键或Ctrl+C紧急停止。
  • 示教器上的急停按钮始终可用。
  • 建议首次使用dry_run: true验证数据流,再切换为false运行物理动作。

非夕Flexiv Rizon4机器人

硬件设备

  • 仅在ubuntu22.04测试,使用Flexiv RDK作为底层实现。
  • 使用opencv-python的VideoCapture捕获/dev/video6和/dev/video14两个相机。
  • 夹爪为Flexiv-GN01。

配置

hardware:
  type: "custom"
  class_path: "r2c_sdk.robots.flexiv_hardware_adapter.FlexivHardwareAdapter"
  custom_config:
    # Flexiv 机器人序列号
    robot_sn: "Rizon4-062833"
    # dry_run: true
    # 夹爪配置(从配置读取,不硬编码)
    gripper_name: "Flexiv-GN01"  # 夹爪类型
    gripper_open_width: 0.09    # 夹爪完全打开宽度 (m)
    gripper_close_width: 0.012  # 夹爪完全闭合宽度 (m)
    gripper_velocity: 0.10
    gripper_force_limit: 20.0
    # 力传感器
    zero_ft_on_start: false
    force_limit_n: 20.0
    # 摄像头配置
    cameras:
      wrist:
        source: 6
        width: 640
        height: 480
        fps: 30
      third:
        source: 14
        width: 640
        height: 480
        fps: 30

前置安装命令

pip install numpy spdlog flexivrdk

启动命令

python -m r2c_sdk.cloudroboclient --bundle config/cert_xxx.zip --robot-config config/robot_flexiv_config.yaml

测试命令

在开始测试前,请务必在配置中设置runtime.dry_runtrue,这样只会打印action日志而不运行实际动作,在确认链路正常后再改为false

  • 机器人启动指令
    python -m r2c_sdk.cloudroboclient --project-id test_project --device-id flexiv --client-id robot --robot-config config/robot_flexiv_config.yaml
  • 观测订阅指令
    python examples/observation_subscriber.py --project-id test_project --device-id flexiv --client-id obs_sub --target-device-id robot
  • 动作发布指令
    python examples/flexiv_cloud_adapter.py --project-id test_project --device-id flexiv  --client-id obs_sub

五八智能 天狼Q25 模拟摇杆控制

硬件设备

  • 仅在ubuntu 22.04测试,使用UDP直接与Q25交互,基于58智能开放的SDK(C++)重写。
  • 使用摄像头RTSP流捕获main_cam、front_cam和back_cam三个相机。

配置

hardware:
  type: "custom"
  class_path: "r2c_sdk.robots.q25.q25_hardware_adapter.Q25HardwareAdapter"
  custom_config:
    # Q25 Ultra 四足机器人配置
    robot_ip: "192.168.3.20"       # 机器人控制指令IP
    camera_ip: "192.168.1.102"     # 摄像头RTSP流IP
    robot_port: 43893
    listen_port: 43893
    # 观测数据发布频率 (Hz)
    observation_rate_hz: 10.0
    # 摄像头配置
    camera_enabled: true
    camera_locations: ["main_cam", "front_cam", "back_cam"]  # 启用的摄像头列表
    rtsp_port: 8554  # RTSP流端口
    camera_timeout_ms: 5000  # 摄像头连接超时 (毫秒) 
    # 调试模式:只接受并打印action,不运行实际动作
    dry_run: true

安装命令

pip install numpy

启动命令

python -m r2c_sdk.cloudroboclient --bundle config/cert_xxx.zip --robot-config config/robot_q25_config_joystick.yaml

测试命令

在开始测试前,请务必在配置中设置runtime.dry_runtrue,这样只会打印action日志而不运行实际动作,在确认链路正常后再改为false

  • 机器人启动指令
    python -m r2c_sdk.cloudroboclient --project-id test_project --device-id q25 --client-id robot --robot-config config/robot_q25_config_joystick.yaml
  • 观测订阅指令
    python examples/observation_subscriber.py --project-id test_project --device-id q25 --client-id obs_sub --target-device-id robot
  • 动作发布指令
    python examples/q25_cloud_adapter_joystick.py --project-id test_project --device-id q25  --client-id obs_sub

隙锋人形机器人

硬件设备

  • 优艾「隙锋 2.0」人形轮臂机器人(私有 `pypilot` Python SDK)
  • 隙锋 2.0 标准硬件配置不含相机,观测暂不包含RGB数据流

配置

hardware:
  type: "custom"
  class_path: "r2c_sdk.robots.xifeng.xifeng_adapter.XifengHardwareAdapter"
  custom_config:
    # source: mock | real
    #   mock - 合成数据,无需隙锋真机或 pypilot wheel
    #   real - 调 pypilot.PilotSDK 直连隙锋机器人
    source: "mock"
    # dry_run: true 时只打印 observation/action 日志,不向真机下发动作。
    # 接入真机首次联调务必保持 true,比对关节名/数据无误后再改为 false。
    # (见 skills/r2c/references/r2c-custom-robot.md §7 测试流程)
    dry_run: true
    real:
      robot_host: "192.168.1.100"
      request_connection_ip: "192.168.1.100"
      arm_local_ip: "192.168.1.10"
      arm_ip: "192.168.1.200"
      arm_port: 8080
      left_arm_id: 1
      right_arm_id: 2
      joint_poll_hz: 30.0
      # RGB 相机:目前隙锋**不支持 RGB 数据推流**,桥不采集图像(observation 只含关节+夹爪)。
    mock:
      max_joint_speed_rad_s: 1.5

安装命令

pip install pypilot-<version>-cp<py>-cp<py>m-linux_<arch>.whl

文件名中的 `<version>`、`<py>`、`<arch>`(如 `x86_64`)以交付物为准。更多说明见SDK使用指南-Python.md。示例:

pip install pypilot-2.0.0.260612.0-cp310-cp310-linux_x86_64.whl

启动命令

python -m r2c_sdk.cloudroboclient --bundle config/cert_xxx.zip --robot-config config/robot_xifeng_config.yaml

测试命令

在开始测试前,请务必在配置中设置runtime.dry_runtrue,这样只会打印action日志而不运行实际动作,在确认链路正常后再改为false

  • 机器人启动指令
    python -m r2c_sdk.cloudroboclient --project-id test_project --device-id xifeng --client-id robot --robot-config config/robot_xifeng_config.yaml
  • 观测订阅指令
    python examples/observation_subscriber.py --project-id test_project --device-id xifeng --client-id obs_sub --target-device-id robot
  • 动作发布指令
    python examples/xifeng_cloud_adapter.py --project-id test_project --device-id xifeng  --client-id obs_sub

华沿机械臂

硬件设备

  • 华沿 S05机械臂

配置

hardware:
  type: "custom"
  class_path: "r2c_sdk.robots.s05_hardware_adapter.S05HardwareAdapter"
  custom_config:
    dry_run: false                         # 连接真实硬件
    s05_config:
      robot_ip: "192.168.0.10"
      robot_port: 10003
      gripper_slave_id: 3
    sdk_paths:
      cps_sdk: "doc/hardware/CPS.py"
      gripper_control: "doc/hardware/gripper_control.py"
    cameras:
      width: 640
      height: 480
      fps: 30

安装命令

pip install pyrealsense2>=2.54.0 opencv-python>=4.8.0 numpy>=1.24.0 h5py>=3.8.0 keyboard>=0.13.5

随后按照华沿客服提供的python库文档安装相关驱动。

启动命令

python -m r2c_sdk.cloudroboclient --bundle config/cert_xxx.zip --robot-config config/robot_s05_config.yaml

测试命令

在开始测试前,请务必在配置中设置runtime.dry_runtrue,这样只会打印action日志而不运行实际动作,在确认链路正常后再改为false

  • 机器人启动指令
    python -m r2c_sdk.cloudroboclient --project-id test_project --device-id hys05 --client-id robot --robot-config config/robot_s05_config.yaml
  • 观测订阅指令
    python examples/observation_subscriber.py --project-id test_project --device-id hys05 --client-id obs_sub --target-device-id robot
  • 动作发布指令
    python examples/s05_cloud_adapter.py --project-id test_project --device-id hys05 --client-id obs_sub

拓斯达X5机械臂

硬件设备

  • 拓斯达X5机械臂

配置:

hardware:
  type: custom
  class_path: r2c_sdk.robots.tsd.tsd_hardware_adapter.TSDHardwareAdapter
  custom_config:
    ip: ${TSD_IP:-168.168.80.90}
    default_speed: 30
    reconnect_max_retries: 3
    reconnect_delay_s: 1.0
    auto_enable_servo: true
    auto_set_mode: true
    auto_mode_value: 100
    auto_set_speed: true
    dry_run: false
    # mock_mode: true  # Set to true to skip real robot connection and use mock observations for testing

安装命令

pip install xapi-<version>-cp<py>-cp<py>m-<platform>_<arch>.whl

文件名中的 `<version>`、`<py>`、`<platform>`、`<arch>`(如 `x86_64`)咨询拓斯达科技客服人员。

启动命令

python -m r2c_sdk.cloudroboclient --bundle config/cert_xxx.zip --robot-config config/robot_tsd_config.yaml

测试命令

在开始测试前,请务必在配置中设置runtime.dry_runtrue,这样只会打印action日志而不运行实际动作,在确认链路正常后再改为false

  • 机器人启动指令
    python -m r2c_sdk.cloudroboclient --project-id test_project --device-id tsdx5 --client-id robot --robot-config config/robot_tsd_config.yaml
  • 观测订阅指令
    python examples/observation_subscriber.py --project-id test_project --device-id tsdx5 --client-id obs_sub --target-device-id robot
  • 动作发布指令
    python examples/tsd_cloud_adapter.py --project-id test_project --device-id tsdx5 --client-id obs_sub

千寻智能moz1人形机器人

硬件设备

  • 千寻智能moz1人形机器人

配置:

hardware:
  type: "moz1"
  moz1_config:
    # Moz1 机器人配置(与 MozDriverConfig 字段对应)
    structure: "wholebody"             # dualarm / wholebody_without_base / wholebody
    robot_control_hz: 120
    camera_mode: "on"                 # off / on / visualize  — ON 时三路相机启用
    realsense_serials: "000000000, 000000000, 000000000"  # 需要修改为实际的相机序列号
    camera_resolutions: "320*240, 320*240, 320*240"
    enable_soft_realtime: false
    # bind_cpu_idxs: [5]
    # disabled_cameras: ["cam_high"]

安装命令

参考:mozrobotSDK

启动命令

python -m r2c_sdk.cloudroboclient --bundle config/cert_xxx.zip --robot-config config/robot_moz1_real_config.yaml

测试命令

在开始测试前,请务必在配置中设置runtime.dry_runtrue,这样只会打印action日志而不运行实际动作,在确认链路正常后再改为false

  • 机器人启动指令
    python -m r2c_sdk.cloudroboclient --project-id test_project --device-id moz1 --client-id robot --robot-config config/
    robot_moz1_real_config.yaml
  • 观测订阅指令
    python examples/observation_subscriber.py --project-id test_project --device-id moz1 --client-id obs_sub --target-device-id robot
  • 动作发布指令
    python examples/moz1_real_cloud_adapter.py --project-id test_project --device-id moz1 --client-id obs_sub

ROS2:通用ROS2机器人平台

适用场景: 任何通过ROS2(Humble/Jazzy/Rolling)运行的机器人平台,包括JAKA Mini2、SO101,仿真MetaEngine提供的仿真机器人等。

硬件要求:

  • 任何运行ROS2的机器人平台。
  • ROS2 topics发布关节状态和相机图像。
表10 系统/软件要求

项目

要求

操作系统

Linux (Ubuntu 22.04/24.04)

ROS2

Humble (22.04), Jazzy (24.04), 或Rolling

Python

>= 3.10

rclpy

随ROS2一起安装

message_filters

可选,需pip install message_filters(时间同步观测)

# ROS2 依赖由系统 ROS2 安装提供,无需额外 pip 安装
# 确认 rclpy 可用:
python3 -c "import rclpy; print('rclpy OK')" 
# 可选:时间同步订阅
pip install message_filters 

使用ros2 control list_controllers查看可用的控制器列表。

ros2_config.subscriptions:

表11 每项定义订阅一个ROS2 topic参数说明

参数

类型

说明

必需

topic

str

ROS2 topic名称

msg_type

str

ROS2消息类型(如sensor_msgs.msg.JointState)

qos

int

QoS队列深度

store_as

str

在observation dict中的存储键名

max_update_hz

float

最大更新频率 (Hz),用于降采样

include_fields

list[str]

仅提取消息中的指定字段

field_aliases

store_raw_message

dict[str,str]

bool

字段名重命名映射

是否存储原始ROS2消息对象

ros2_config.command_publishers:

表12 每项定义发布一个ROS2 topic参数说明

参数

类型

说明

topic

str

发布的目标topic

msg_type

str

ROS2消息类型

qos

int

QoS队列深度

ROS2 命令通道选择:

  • Publisher(推荐):直接发布topic,延迟最低。使用default_command_publisher指定。
  • Service :使用command_services和default_command_service指定。
表13 命令通道参数说明

配置文件

机器人

订阅Topics

发布Topics

robot_so101_ros_config.yaml

SO101(仿真场景)

/joint_states, /top/camera_image_color, /wrist/camera_image_color

/position_controller/commands(Float64MultiArray)

robot_mini2_ros_config.yaml

JAKA Mini2

/jaka_driver/joint_position, /gripper_state, /camera_top/image_raw/compressed, /camera_wrist/image_raw/compressed

/robot_command_servo_j(JointState), /motor_control(step_motor/Motor)

Zenoh ROS1:通用ROS1机器人(Zenoh Bridge)

Zenoh ROS1适配器适用于任何通过zenoh-bridge-ros1接入网络的ROS1机器人,并无需在上位机安装rospy或任何ROS1依赖,该适配器直接通过Zenoh数据平面订阅/发布ROS1消息。

Zenoh ROS1适配器硬件要求:

  • 任意运行ROS1的机器人平台,如R1 (HDAS)双臂机器人等。
  • 机器人端运行zenoh-bridge-ros1实例。
  • 网络可达Zenoh peer或router。
    表14 上位机系统/软件要求

    要求

    操作系统

    Linux(推荐Ubuntu 22.04/24.04)

    Python

    >= 3.10

    zenoh-python

    pip install zenoh

    opencv-python

    可选,用于解码CompressedImage(pip install opencv-python)

适配器通过zenoh-bridge-ros1与ROS1系统通信,工作流程为:

ROS1 机器人 ←→ zenoh-bridge-ros1 ←→ Zenoh 网络 ←→ ZenohRos1HardwareAdapter 

需确保机器人端zenoh-bridge-ros1正常运行,且其Zenoh配置(mode、router address)与适配器一致。

表15 支持的订阅消息类型(内置

消息类型

用途

sensor_msgs/CompressedImage

相机图像(自动解码为JPEG bytes)

sensor_msgs/Image

相机图像(解码为numpy数组)

sensor_msgs/JointState

关节状态

std_msgs/Float32

单精度浮点(如夹爪位置)

std_msgs/Float32MultiArray

浮点数组

表16 支持的发布消息类型(内置

消息类型

encoder

用途

hdas_msg/motor_control

motor_control

电机控制(含位置/速度/力矩参数)

std_msgs/Float32

float32

浮点控制(如夹爪位置)

任意自定义

raw_bytes

透传原始字节(非标准消息)

自定义消息类型: 可通过ros1_type_overrides注册新的ROS1消息类型,需提供datatype和md5值。

请参考config/robot_r1_zenoh_ros1_config.yaml文件的配置。

下面是该配置文件中的配置参数说明

表17 zenoh_ros1_config顶层参数

参数

类型

说明

默认值

mode

str

Zenoh连接模式:"peer"(P2P)或"client"(连接router)

"peer"

connect_endpoints

List[str]

client模式下的router地址列表

[]

namespace

str

Zenoh key中的命名空间段(与bridge默认行为一致)

""

rate

float

控制循环目标频率(Hz)

30.0

表18 scouting部分

参数

类型

说明

默认值

multicast.enabled

bool

是否启用组播发现(client模式建议禁用)

true

表19 subscriptions每项

参数

类型

说明

必需

ros_topic

str

ROS1 topic名称

msg_type

str

ROS1消息类型

store_as

str

在observation dict中的存储键名

否(默认使用订阅名)

表20 publishers每项

参数

类型

说明

必需

ros_topic

str

发布的ROS1 topic名称

msg_type

str

ROS1消息类型

encoder

str

序列化方式:motor_control/float32/raw_bytes

ros1_type_overrides(可选):

用于注册内置类型表之外的ROS1消息类型。每项为:

ros1_type_overrides:  
  "custom_msgs/MyMessage":  
    datatype: "custom_msgs/MyMessage"  
    md5: "abc123..."

使用步骤

# Step 1: 安装依赖
pip install zenoh opencv-python  
# Step 2: 确保机器人端zenoh-bridge-ros1正常运行
# (在机器人端启动bridge,确认其Zenoh配置与本适配器一致) 
# Step 3: 修改配置文件中的connect_endpoints、subscriptions、publishers
vim config/robot_r1_zenoh_ros1_config.yaml  
# Step 4: 启动适配器
python -m r2c_sdk.cloudroboclient --bundle config/cert_xxx.zip --robot-config config/robot_r1_zenoh_ros1_config.yaml 

适配其他ROS1机器人

Zenoh ROS1适配器高度可配置,更换机器人时只需修改subscriptions和publishers中的ros_topic:
  • 修改订阅: 将subscriptions中的ros_topic改为目标机器人实际的topic名称(如/joint_states、/camera/rgb/image_raw/compressed)。
  • 修改发布: 将publishers中的ros_topic改为目标机器人接受的控制topic。
  • 自定义消息类型: 如使用了非内置类型,通过ros1_type_overrides注册。
  • 调整translator映射: 修改device_to_r2c和r2c_to_device中的source_path/target以匹配新的数据字段名。

Playback:回放录制数据

Playback适配器适用于离线调试cloudroboclient ↔ cloudrobo(policy server)链路,不需要真实硬件,通过回放之前录制的观测数据来模拟机器人。

该适配器无需额外安装(使用SDK内置的safe_serialization)依赖,请参考config/robot_playback_config.yaml文件的配置。

表21 robot_playback_config.yaml部分配置内容

参数

类型

说明

默认值

recording_file

str

录制文件的路径(.r2cr格式)

必需

loop

bool

播完后是否循环回开头

true

  • Playback adapter的send_action()是空操作(no-op),收到cloud的action也不会运行。
  • device_to_r2c和r2c_to_device的映射配置需与被录制的真实机器人的配置保持一致。

录制与回放

R2C SDK支持将观测数据录制为.r2cr二进制文件(安全格式,JSON结构 + 原始numpy字节,无代码运行风险),用于后续离线回放和调试。

  • 录制:在cloudroboclient启动时添加--record参数。
    python -m r2c_sdk.cloudroboclient --client-config config/client_config.yaml --robot-config config/robot_ur5e_config.yaml --record recordings/ur5e_demo.r2cr 

    正常运行时按Ctrl+C停止,录制文件会自动保存。

  • 回放:使用robot_playback_config.yaml配置回放已录制的数据。
    python -m r2c_sdk.cloudroboclient --client-config config/client_config.yaml --robot-config config/robot_playback_config.yaml 

    确保配置文件中playback_config.recording_file指向正确的录制文件。

相关文档