端侧配置
R2C SDK已适配本体
当前R2C SDK已内置有SO-ARM101等机械臂的相关配置,请将在CloudRobo平台下载的配置文件放置到r2c_sdk_python/config目录下,可快速接入机械臂。
- 进入r2c_sdk_python目录下。
- 进入conda的lerobot环境。
conda activate lerobot
- 配置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,如不知道或没显示就保持默认30Windows系统下:
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
- 查看Follow臂的port并记录。
- 执行如下命令完成机器人接入。
python -m r2c_sdk.cloudroboclient --bundle config/配置文件名.zip --robot-config config/robot_so101_lerobot_config.yaml
如无报错,即表示机器人接入CloudRobo平台成功,在CloudRobo平台的机器人列表页,可查看到该机器人状态变为在线。
使用skills适配本体
场景介绍
使用Coding Agent可以实现将任意机器人接入R2C。
前提条件
- 已经安装任意Coding Agent(如码道等)。
- python的最小样例(包括观测获取与动作执行),并能在机器人上运行,且提供三个安全的action样例。
- 如果无最小样例,可以使用厂商提供的SDK示例让Coding Agent写一个。
- 如果无python版本的SDK或最小样例,可以让Coding Agent使用python重写。
通过skills快速接入步骤
- 将skills/r2c添加到项目级skills文件夹(项目根目录/.codeartsdoer/skills)或个人级skills文件夹(~/.codeartsdoer/skills)。
- 使用接入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。
- 打开调试开关。
为了避免Coding Agent代码有问题导致机器人发生碰撞,在测试前请确认config/robot_{机械臂型号}_config.yaml中的dry_run字段为True。
图1 dry_run字段
- 订阅观测验证,该流程用于验证机器人能正确执行动作。
打开两个终端,并依次分别执行下列命令:
python examples/observation_subscriber.py --project-id test_project --device-id {机械臂型号} --client-id obs_sub --endpoints tcp/127.0.0.1:7447 --endpoint-role listenpython -m r2c_sdk.cloudroboclient --project-id test_project --device-id {机械臂型号} --robot-config config/robot_{机械臂型号}_config.yaml - 发布动作测试,该流程用于验证机器人能正确执行动作。
python examples/flexiv_cloud_adapter.py --project-id test_project --device-id {机械臂型号} --client-id obs_subpython -m r2c_sdk.cloudroboclient --project-id test_project --device-id {机械臂型号} --robot-config config/robot_{机械臂型号}_config.yaml - 测试完成后,关闭dry_run模式,然后启动机器人客户端(接入cloudrobo平台)。
python -m r2c_sdk.cloudroboclient --bundle config/cert_xxx.zip --robot-config config/robot_{机械臂型号}_config.yaml
手动适配本体
本文档以接入SO100为示例。
- 选硬件接入路径(最重要的技术决策)。
基于您的SO100现有软件栈选择:
- 已有LeRobot兼容对象→选hardware.type: lerobot;
- 已有ROS2话题接口→选hardware.type: ros2;
- 只有厂商私有SDK/串口API→选hardware.type: raw_sdk;
- 实现get_observation()/send_action()。
无论选哪条路径,本质都要保证:
- get_observation()返回Mapping/dict;
- send_action(command)能执行设备动作;
- 写device_to_r2c与r2c_to_device映射。
该操作为“协议对齐”阶段:
- 上行:把硬件数据映射为R2C Observation features;
- 下行:把R2C Action features解包成设备命令;
- 补齐相机、夹爪、安全回退。
先通关节,再补图像和高级feature,最后完善fallback。
- 用python -m r2c_sdk.cloudroboclient端到端验证。
通过CLI加载--client-config/bundle + --robot-config验证完整链路。
必须准备的配置项
适配需要云上机器人配置文件和一份设备配置yaml文件:
重点字段如下:
| 配置信息 | 参数及说明 |
|---|---|
| 基础元信息 | schema_version |
| runtime |
|
| hardware(核心) |
|
| device_to_r2c.mappings(上行映射) |
|
| r2c_to_device.mappings(下行动作解包) |
|
三种硬件适配路径
- 路径A:lerobot
适用场景:SO100在你的工程里已经能通过LeRobot风格对象直接读取状态和下发动作。
你需要做:
- 在hardware.type设为lerobot;
- 填hardware.lerobot_config(如串口、相机等);
- 调通observations_to_r2c / r2c_to_action;
优点:最快,几乎不用写新适配器类。
风险:受LeRobot对SO100支持度约束。
- 路径B:ros2(ROS生态首选)
适用场景:SO100驱动已经有ROS2 topic/service/action。
你需要做:
- hardware.type: ros2;
- 在ros2_config中定义:
- 订阅(subscriptions或兼容字段joint_states_topic);
- 控制发布(command_publishers或兼容字段action_topic);
- default_command_publisher / action_targets;
- 确保send_action产出的command能转换为目标ROS消息结构。
优点:与ROS2现有系统耦合最小。
风险:消息类型、字段名、QoS不匹配会导致“看似连接成功但无数据”。
- 路径C:raw_sdk(厂商SDK / 串口 / 私有协议)
适用场景:SO100只有厂商Python SDK或自研底层控制API。
你需要做:
- hardware.type: raw_sdk;
- 填raw_sdk_config(如串口、波特率、IP、控制模式);
- 在启动时传入raw_sdk_robot_factory,由它根据配置构造真实robot对象;
- 使用VendorSDKHardwareAdapter(直接用或继承);
优点:灵活、可控。
风险:需要你自己定义/约束机器人对象API一致性。