
# 交互式数据采集
在接入并激活机器人后，用户需要部署首次模型训练作业产生的模型，修改DAgger配置后开始智能体调试，通过发送任务技能给机器人，同时使用DAGGER数据采集工具采集机械臂轨迹数据，两者协同使用直至交互式数据采集完成。
 #### 步骤1：部署模型服务
1. [登录CloudRobo控制台](https://console.huaweicloud.com/cloudrobo/)。
2. 在左侧导航栏选择"运行管理 \> 模型部署"，进入"模型部署"页面。
3. 单击"部署模型服务"，进入"部署模型服务"界面。
4. 请参考以下内容配置参数，其余参数保持默认或者按照实际自行调整。 
   **基础信息**
   - 服务名称：输入"SO101抓笔进笔筒"。
   
   - 描述：输入"SO101抓笔进笔筒"。
   
   
   **模型配置**
   - 模型：空间资产-模型，选择[创建模型训练作业（首次）](https://support.huaweicloud.com/bestpractice-cloudrobo/cloudrobo_05_0007.html)中保存的模型，模型版本为v0.0.1。
   
   - r2c协议配置：单击"本地上传"，上传本地准备的[r2c.json文件]。
   
   
   **环境配置**
   - 启动命令：在选择模型后会自动生成，无特殊情况不需要修改。
   
   
   **资源配置**
   - 运行时长：请按照预计采集轨迹时间选择运行时长，正常一小时可以采集约30条轨迹数据。
   
   - 资源池：选择"公共资源池"或"专属资源池"。
   
   - 实例规格：选择1 \* SNT9B2 \| 24 vCPUs \| 192 GiB，或者根据实际资源选择规格。
   
   
   
   
5. 完成后单击"立即部署"，即可开始部署模型。 
   在模型部署页面，查看已部署的模型服务，模型部署成功后，该模型服务状态为"运行中"。
   
   
 
#### 步骤2：修改DAgger配置
修改**/lerobot_dagger/config/dagger_cloud.yaml** 的num_episodes，即自定义测试次数，修改后请[启动DAgger后端脚本](https://support.huaweicloud.com/bestpractice-cloudrobo/cloudrobo_05_0011.html#ZH-CN_TOPIC_0000002658537505__section19378114133610)。
用户可通过修改num_episodes自定义测试次数。
```
dataset:
  ····
  num_episodes: 10 #自定义测试次数
  ·······
```
**num_episodes**是一次数据采集需要采集的轨迹条数，当达到目标轨迹条数时，DAgger后端数据采集脚本会自动终止。按照实际可以重复多次数据采集，最终数据采集完成后需要汇总所有采集的轨迹数据。
每一轮DAgger训练所需的轨迹条数总数需要根据任务难度确定，**简单抓放任务**一轮大概需要采集100条轨迹数据，因此num_episodes定义为100，用户可以一次性采集所需的轨迹数据，或者num_episodes定义为30，用户可以分3\~4次采集所需的轨迹数据。
#### 步骤3：智能体调试
1. [登录CloudRobo控制台](https://console.huaweicloud.com/cloudrobo/)。
2. 在左侧导航栏选择"运行管理 \> 机器人"，进入"机器人"页面。
3. 找到[接入并激活机器人](https://support.huaweicloud.com/bestpractice-cloudrobo/cloudrobo_05_0008.html)中的在线机器人，单击对应"操作"列的"智能体调试"。
4. 在"智能体调试"页面，首次进入请选择[步骤1：部署模型服务]的"SO101抓笔进笔筒"模型服务与泛化技能。
5. 在对话框输入"put pen in the cup"技能，单击![](https://support.huaweicloud.com/bestpractice-cloudrobo/figure/zh-cn_image_0000002658766575.png "点击放大")，即开始模型云端推理。
6. 在DAGGER数据采集工具的前端页面单击"开始策略控制"，会将端侧的观测数据通过r2c协议上传到云端，云端会下发推理的动作到机器人。 
   在DAGGER数据采集工具的前端页面会可视化展示机械臂运行实况。
   图1实时展示机械臂   
   ![](https://support.huaweicloud.com/bestpractice-cloudrobo/figure/zh-cn_image_0000002663516476.png "点击放大")
   智能体调试对话框会展示云端接收的观测结果。
   图2智能体调试示例   
   ![](https://support.huaweicloud.com/bestpractice-cloudrobo/figure/zh-cn_image_0000002659140587.png "点击放大")
   如果要了解完整的DAGGER数据采集控制界面与CloudRobo平台使用，请参见[协同使用DAGGER数据采集控制界面与CloudRobo平台](https://support.huaweicloud.com/bestpractice-cloudrobo/cloudrobo_05_0016.html)。
   
   
 
 #### r2c.json文件
下面为一个r2c.json文件内容示例，该json文件中**input_features的key根据需要可以修改** ，比如第三视角相机的名字可能是"observation.images.external"而不是"observation.images.front"，需要与**lerobot_dagger/config/dagger_cloud.yaml**的相机名字保持一致。
```
{
    "model_feature_mapping": {
        "input_features": {
            "observation.state": {
                "shape": [6],
                "dtype": "float32",
                "values": [
                    "observation.joint_states.position@{joint_1}",
                    "observation.joint_states.position@{joint_2}",
                    "observation.joint_states.position@{joint_3}",
                    "observation.joint_states.position@{joint_4}",
                    "observation.joint_states.position@{joint_5}",
                    "observation.joint_states.position@{joint_6}"
                ]
            },
            "observation.images.front": {
                "dtype": "float32",
                "value": "observations.images.color.front"
            },
            "observation.images.wrist": {
                "dtype": "float32",
                "value": "observations.images.color.wrist"
            },
            "task":{
                "type": "PROMPT"  
            }
        },
        "output_features": {
            "action": {
                "chunk_size": 50,
                "shape": [6],
                "values": [
                    "actions.joint_states.position@{joint_1}",
                    "actions.joint_states.position@{joint_2}",
                    "actions.joint_states.position@{joint_3}",
                    "actions.joint_states.position@{joint_4}",
                    "actions.joint_states.position@{joint_5}",
                    "actions.joint_states.position@{joint_6}"
                ]
            }
        }
    },
    "stop_condition": { 
        "max_iter_num": 60,
        "max_run_time": 5
    }
}
```
