
# 本地连接调试
#### R2C SDK已适配本体
当前R2C SDK已内置有SO-ARM101等机械臂的相关配置，请将在CloudRobo平台下载的配置文件放置到r2c_sdk_python/config目录下，可快速接入机械臂。
1. 进入r2c_sdk_python目录下。
2. 进入conda的lerobot环境。 
   ```
   conda activate lerobot
   ```
   
   
3. 配置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,如不知道或没显示就保持默认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** （如[码道](https://codearts.huaweicloud.com/)等）。
2. python的最小样例（包括观测获取与动作执行），并能在机器人上运行，且提供三个安全的action样例。
   - 如果无最小样例，可以使用厂商提供的SDK示例让**Coding Agent**写一个。
   
   
   
   - 如果无Python版本的SDK或最小样例，可以让**Coding Agent**使用python重写。
    
**通过skills快速接入步骤**
1. 将已下载的[R2C SDK](https://support.huaweicloud.com/sdkreference-cloudrobo/cloudrobo_03_0002.html#section1)中的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。
   图1dry_run字段   
   ![](https://support.huaweicloud.com/usermanual-cloudrobo/zh-cn_image_0000002743931463.png "点击放大")
   
   
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
   ```
   
   
 
#### 机器人接入官方R2C SDK源码技术规范
机器人厂商可按该步骤提供机器人的适配代码，可预置于后续版本r2c_sdk源码中。
- 准备工作 在开始前，需准备两类文档，既作为Skill的输入源，也会在R2C官网的帮助中心页面展示。文档形式支持文本或在线链接：
  1. 机器人产品说明书
  
  2. 机器人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，自动生成以下三类适配代码文件：
  1. 机器人配置代码文件：config/robot_xxx_config.yaml
  
  2. 云适配器代码文件：examples/xxx_cloud_adapter.py 用于在本地启动Mock服务，模拟机器人接入平台后的数据收发与交互。
     需包含机器人所在空间的三个安全坐标，确保在该坐标下机器人不会发生碰撞，且无奇异解的关节角或末端姿态。同时，云适配器中的坐标系需与机器人适配器保持一致。
     
  
  3. 机器人适配器代码文件：src/r2c_sdk/robots/xxx_adapter.py 若适配器代码量较大，可将其组织为src/r2c_sdk/robots/xxx目录，并将适配器代码文件命名为xxx_adapter.py。
     代码需支持dry_run（空运行）模式；同时，机器人适配器代码中的坐标系需与云适配器保持一致。
     
   
上述三类适配代码文件生成后，可联系华为云官方团队将其预置于后续版本r2c_sdk源码中，随SDK一同发布，以便开发者通过R2C直接调用该预置机器人。
