本地连接调试
R2C SDK已适配本体
当前R2C SDK已内置有SO-ARM101等机械臂的相关配置,请将在CloudRobo平台下载的配置文件放置到r2c_sdk_python/config目录下,可快速接入机械臂。
- 进入r2c_sdk_python目录下。
- 进入conda的lerobot环境。
conda activate lerobot
- 配置so101机械臂参数。
- 查看Follower臂的port并记录。
lerobot-find-port
请根据界面提示拔出Follower臂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
- 查看Follower臂的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快速接入步骤
- 将已下载的R2C SDK中的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
机器人接入官方R2C SDK源码技术规范
机器人厂商可按该步骤提供机器人的适配代码,可预置于后续版本r2c_sdk源码中。
- 准备工作
在开始前,需准备两类文档,既作为Skill的输入源,也会在R2C官网的帮助中心页面展示。文档形式支持文本或在线链接:
- 机器人产品说明书
- 机器人SDK使用手册
依赖组件清单:手册需列出运行该SDK所需的额外依赖组件(如有),包括需通过Linux包管理器、Conda、PyPI或Git源码安装的组件,并提供相应的安装指引,如安装命令、后处理步骤、环境变量设置等。
Python最小可行示例:手册应提供可在机器人上运行的Python最小示例,其中包含3个安全的动作示例,涵盖状态观测获取与动作执行。若无现成Python示例,可使用其Python版本SDK编写;若无Python版本SDK,可通过Coding Agent以下述任一方式自动生成Python版本SDK:跨语言调用原SDK,或将原SDK重写为Python版本。
- 适配代码生成
依托上述文档,可使用Coding Agent,结合最新版r2c_sdk源码中的skill,自动生成以下三类适配代码文件:
- 机器人配置代码文件:config/robot_xxx_config.yaml
- 云适配器代码文件:examples/xxx_cloud_adapter.py
用于在本地启动Mock服务,模拟机器人接入平台后的数据收发与交互。
需包含机器人所在空间的三个安全坐标,确保在该坐标下机器人不会发生碰撞,且无奇异解的关节角或末端姿态。同时,云适配器中的坐标系需与机器人适配器保持一致。
- 机器人适配器代码文件:src/r2c_sdk/robots/xxx_adapter.py
若适配器代码量较大,可将其组织为src/r2c_sdk/robots/xxx目录,并将适配器代码文件命名为xxx_adapter.py。
代码需支持dry_run(空运行)模式;同时,机器人适配器代码中的坐标系需与云适配器保持一致。
上述三类适配代码文件生成后,可联系华为云官方团队将其预置于后续版本r2c_sdk源码中,随SDK一同发布,以便开发者通过R2C直接调用该预置机器人。