更新时间:2026-06-29 GMT+08:00
分享

端侧配置

R2C SDK已适配本体

当前R2C SDK已内置有SO-ARM101等机械臂的相关配置,请将在CloudRobo平台下载的配置文件放置到r2c_sdk_python/config目录下,可快速接入机械臂。

  1. 进入r2c_sdk_python目录下。
  2. 进入conda的lerobot环境。

    conda activate lerobot

  3. 配置so101机械臂参数。

    • 查看Follow臂的port并记录。
      lerobot-find-port 

      请根据界面提示拔出Follow臂USB信号线并在界面单击“Enter”键,可查看到Follower臂的端口号。

      Linux系统下,端口类似:

      /dev/ttyACM0

      Windows系统下,端口类似:

      COM1
    • 查看相机的设备号并记录。在当前运行命令的路径下会生成outputs/captured_images文件夹,可查看图片确定相机对应端口号。
      lerobot-find-cameras opencv

      Linux系统下,端口类似:

      /dev/video0

      Windows系统下,端口类似:

      0
    • 在R2C SDK主目录下,打开机器人配置文件config/robot_so101_lerobot_config.yaml,修改机器人当前相机设备号和so101从臂的id和port。
      Linux系统下:
      hardware:
         lerobot_config:
           type: so101_follower
           id: my_follower_arm         --修改成标定时设备的机械臂id
           calibration_dir: null
           # Replace with the actual serial device used by your SO101 robot.
          port: /dev/ttyACM0           --修改成查到的port
           cameras:
             front:
               type: opencv
               index_or_path: /dev/video0       --修改成查到顶部相机的设备号
               width: 640
               height: 480
               fps: 30       --修改为相机实际的fps,如不知道或没显示就保持默认30
            wrist:
               type: opencv
               index_or_path: /dev/video2         --修改成查到的腕部相机的设备号
               width: 640
               height: 480
               fps: 30       --修改为相机实际的fps,如不知道或没显示就保持默认30

      Windows系统下:

      hardware:
         lerobot_config:
           type: so101_follower
           id: my_follower_arm          --修改成标定时设备的机械臂id
           calibration_dir: null
           # Replace with the actual serial device used by your SO101 robot.
          port: COM1           --修改成查到的port
           cameras:
             front:
               type: opencv
               index_or_path: 0      --修改成查到顶部相机的设备号
               width: 640
               height: 480
               fps: 30       --修改为相机实际的fps,如不知道或没显示就保持默认30
            wrist:
               type: opencv
               index_or_path: 2         --修改成查到的腕部相机的设备号
               width: 640
               height: 480
               fps: 30       --修改为相机实际的fps,如不知道或没显示就保持默认30

  4. 执行如下命令完成机器人接入。

    python -m r2c_sdk.cloudroboclient --bundle config/配置文件名.zip --robot-config config/robot_so101_lerobot_config.yaml

    如无报错,即表示机器人接入CloudRobo平台成功,在CloudRobo平台的机器人列表页,可查看到该机器人状态变为在线。

使用skills适配本体

场景介绍

使用Coding Agent可以实现将任意机器人接入R2C。

前提条件

  1. 已经安装任意Coding Agent(如码道等)。
  2. python的最小样例(包括观测获取与动作执行),并能在机器人上运行,且提供三个安全的action样例。
    • 如果无最小样例,可以使用厂商提供的SDK示例让Coding Agent写一个。
    • 如果无python版本的SDK或最小样例,可以让Coding Agent使用python重写。

通过skills快速接入步骤

  1. 将skills/r2c添加到项目级skills文件夹(项目根目录/.codeartsdoer/skills)或个人级skills文件夹(~/.codeartsdoer/skills)。
  2. 使用接入SKILL根据最小样例生成完整的R2C接入代码。(建议显式调用技能:/r2c根据@robot_minimal_test.py的样例来适配机械臂,机械臂的型号为{厂商的SDK或用户自定义型号})

    Coding Agent新增或修改文件应包含:

    • config/robot_{机械臂型号}_config.yaml。
    • examples/{机械臂型号}_cloud_adapter.py。
    • src/r2c_sdk/robots/{机械臂型号}_hardware_adapter.py。

  3. 打开调试开关。

    为了避免Coding Agent代码有问题导致机器人发生碰撞,在测试前请确认config/robot_{机械臂型号}_config.yaml中的dry_run字段为True。

    图1 dry_run字段

  4. 订阅观测验证,该流程用于验证机器人能正确执行动作。

    打开两个终端,并依次分别执行下列命令:

    python examples/observation_subscriber.py --project-id test_project --device-id {机械臂型号} --client-id obs_sub  --endpoints tcp/127.0.0.1:7447 --endpoint-role  listen
    python -m r2c_sdk.cloudroboclient --project-id test_project --device-id {机械臂型号} --robot-config config/robot_{机械臂型号}_config.yaml

  5. 发布动作测试,该流程用于验证机器人能正确执行动作。

    python examples/flexiv_cloud_adapter.py --project-id test_project --device-id {机械臂型号} --client-id obs_sub
    python -m r2c_sdk.cloudroboclient --project-id test_project --device-id {机械臂型号} --robot-config config/robot_{机械臂型号}_config.yaml

  6. 测试完成后,关闭dry_run模式,然后启动机器人客户端(接入cloudrobo平台)。

    python -m r2c_sdk.cloudroboclient --bundle config/cert_xxx.zip --robot-config config/robot_{机械臂型号}_config.yaml

手动适配本体

本文档以接入SO100为示例。

  1. 选硬件接入路径(最重要的技术决策)。

    基于您的SO100现有软件栈选择:

    • 已有LeRobot兼容对象→选hardware.type: lerobot;
    • 已有ROS2话题接口→选hardware.type: ros2;
    • 只有厂商私有SDK/串口API→选hardware.type: raw_sdk;

  2. 实现get_observation()/send_action()。

    无论选哪条路径,本质都要保证:

    • get_observation()返回Mapping/dict;
    • send_action(command)能执行设备动作;

  3. 写device_to_r2c与r2c_to_device映射。

    该操作为“协议对齐”阶段:

    • 上行:把硬件数据映射为R2C Observation features;
    • 下行:把R2C Action features解包成设备命令;

  4. 补齐相机、夹爪、安全回退。

    先通关节,再补图像和高级feature,最后完善fallback。

  5. 用python -m r2c_sdk.cloudroboclient端到端验证。

    通过CLI加载--client-config/bundle + --robot-config验证完整链路。

必须准备的配置项

适配需要云上机器人配置文件和一份设备配置yaml文件:

  • 通信连接配置

    这是SDK连接云侧的基础配置,在CloudRobo平台上创建机器人并下载其配置文件即可。

  • robot_so100_config.yaml(设备适配的配置文件,文件名唯一即可)

重点字段如下:

表1 边缘适配核心配置

配置信息

参数及说明

基础元信息

schema_version

runtime

  • publish_hz:控制/发布频率
  • max_duration_s:最长运行时长

hardware(核心)

  • type: lerobot | ros2 | raw_sdk
  • 以及对应子配置(lerobot_config / ros2_config / raw_sdk_config)

device_to_r2c.mappings(上行映射)

  • target_key:R2C features键名
  • source_path:从硬件observation提取路径
  • modality:vector/image
  • dtype、encode、quality等

r2c_to_device.mappings(下行动作解包)

  • source_key:Action中的feature key
  • target:映射到硬件的字段名称

三种硬件适配路径

  • 路径A:lerobot

    适用场景:SO100在你的工程里已经能通过LeRobot风格对象直接读取状态和下发动作。

    你需要做:

    1. 在hardware.type设为lerobot;
    2. 填hardware.lerobot_config(如串口、相机等);
    3. 调通observations_to_r2c / r2c_to_action;

    优点:最快,几乎不用写新适配器类。

    风险:受LeRobot对SO100支持度约束。

  • 路径B:ros2(ROS生态首选)

    适用场景:SO100驱动已经有ROS2 topic/service/action。

    你需要做:

    1. hardware.type: ros2;
    2. 在ros2_config中定义:
      • 订阅(subscriptions或兼容字段joint_states_topic);
      • 控制发布(command_publishers或兼容字段action_topic);
      • default_command_publisher / action_targets;
    3. 确保send_action产出的command能转换为目标ROS消息结构。

    优点:与ROS2现有系统耦合最小。

    风险:消息类型、字段名、QoS不匹配会导致“看似连接成功但无数据”。

  • 路径C:raw_sdk(厂商SDK / 串口 / 私有协议)

    适用场景:SO100只有厂商Python SDK或自研底层控制API。

    你需要做:

    1. hardware.type: raw_sdk;
    2. 填raw_sdk_config(如串口、波特率、IP、控制模式);
    3. 在启动时传入raw_sdk_robot_factory,由它根据配置构造真实robot对象;
    4. 使用VendorSDKHardwareAdapter(直接用或继承);

    优点:灵活、可控。

    风险:需要你自己定义/约束机器人对象API一致性。

相关文档