更新时间:2026-06-30 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 模拟摇杆控制

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

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指向正确的录制文件。

相关文档