亚马逊AWS官方博客
LeRobot机械臂端到端全流程指南:从数据采集、云端训练到边缘推理
摘要:本文旨在引导开发者走通一个从机械臂配置开始,经过数据采集,云端模型训练,最终部署到开发板上运行的端到端闭环流程
1. 引言
浏览本文需要约 10 分钟,建议按照章节分段阅读。
随着具身智能大模型的浪潮席卷学术界与工业界,越来越多的开发者希望以更低门槛参与真实机器人系统的训练与部署。在这一背景下,开源的 LeRobot 机械臂以其低成本、易获取的优势,成为体验与研究具身智能的理想平台。
机器人开发板采用业界广泛使用的 RDK-S100,凭借 128 Tops 的高算力与完善的生态系统,为本地推理与实时控制提供了坚实的硬件基础。但是训练算力资源,往往是普通开发者最为紧缺却又至关重要的环节。
Amazon SageMaker AI 作为一项完全托管的机器学习服务,提供了从数据准备、模型训练到部署推理的一站式解决方案。其弹性伸缩的训练环境、多框架兼容能力以及快速上线特性,使开发者无需管理底层基础设施,能够更专注于算法创新。
借助以上组合,开发者能以低成本实践具身智能从训练到部署的完整闭环。接下来,将从机械臂配置开始,到数据采集,进行模型训练,最后部署在开发板上,完整走通整个流程。
2. 整体架构
[图 1] |
3. 物料准备
| 物料名称 | 物料型号 | 产品描述 |
| 机械臂 | SO-ARM101 | SO-ARM101 LeRobot 开源大模型机械臂 |
| 高清免驱摄像头 | 亚博智能 USB 摄像头 | 亚博智能 USB 摄像头 1080P,AI 视觉识别 120 帧数,支持树莓派,Jetson 和 RDK 系列主板 |
| 开发板 | RDK-S100 | 地瓜机器人 RDKS100 开发者套件 6xCortex-A78AE 80TOPS 算力 |
4. 本地开发环境准备
首先完成 LeRobot 开发环境的安装,默认使用 Miniconda 作为环境管理的工具,先运行以下命令创建一个 Python 3.10 的虚拟环境。
接着便可以在 Bash 中运行以下命令来配置 LeRobot 所需要的依赖(使用的 lerobot 源码是我修改之后的,仅添加了本地 ServerClient,其他部分与官方源码一致)。
5. 机械臂和摄像头配置
5.1 机械臂安装
官方安装教程:SO-101-Hugging Face 机器学习平台
由于 SO-ARM101 机械臂默认不提供机械臂上的相机安装位置,因此在原始的机械臂夹爪部分自行设计添加了一个相机固定的位置(安装孔位与夹爪上的螺丝孔位对齐),相机是亚博智能高清免驱摄像头,固定的底座及支架的打印文件如下:摄像头底座,摄像头支架。
[图 2] |
拿到机械臂配件,首先将 Follower 和 Leader 臂的物料进行区分,要注意的是 Follower 机械臂使用的是 12 个 ST-3215-C001(7.4V)1:345 齿轮比的电机,而 Leader 臂不同关节使用的电机型号有所不同,电机型号区分如下图及下表:
[图 3] |
[图 4] |
接下来便可以按照官方提供的如下 3D 演示动画安装 Follower 和 Leader 了,下面是关节一到关节五以及夹爪的安装实例,除了夹爪之外,前面五个关节的安装方法均一致,仅需注意 Leader 臂的电机型号:
[图 5] |
5.2 机械臂电机配置
在完成机械臂的安装后,可以开始对机械臂两个臂的电机进行配置并设置其对应的 ID 了,新版的 LeRobot 提供了 CLI 命令可以直接运行对应的命令。首先将两个机械臂的串口线全部接上电脑并运行如下命令,接着按照提示拔出其中一个串口线按下回车即可知道拔出的串口号是多少(实际就是记录插上的所有串口,然后再和拔出后的进行对比就可以知道哪个串口少了…),示例输出如下图:
[图 6] |
由于 LeRobot 使用的是总线舵机,每个电机都通过总线上的唯一 ID 进行识别,而全新电机通常带有一个默认 ID 为 ’1’,所以为了让电机和控制器之间正常通信,需要为每个电机设置一个唯一的且不同的 ID,在确定了自己的两个机械臂分别对应的串口后便可以一个臂一个臂一个电机一个电机的进行配置,在新版的 LeRobot 库不需要重复多次运行电机配置命令,只需要运行以下命令并依次将不同的舵机线插到控制板按回车即可,具体可以参考这个视频。
[图 7] |
5.3 主从机械臂校准
在完成机械臂电机的配置之后,可以对机械臂进行校准。这部分主要是为了确保主动机臂和从动机臂在处于相同物理位置时具有相同的位置值,也就是可以操控 Leader 来控制 Follower 臂进行数据采集,旧版的 LeRobot 需要在运行命令之后将所有臂摆成三个不同的姿势来校准,如果校准的姿势有细微的区别,就会影响两个机械臂之间的映射。新版的 LeRobot 采用了新的控制方式,只需要在所有舵机处于机械臂运动的中值时开启校准然后依次扭动舵机使系统自动记录舵机当前可运动的最大最小值即可自动完成校准,具体命令如下,及参考视频链接。
[图 8] |
5.4 摄像头配置
LeRobot 提供多种视频捕捉选项,包括手机摄像头、内置笔记本电脑摄像头、外部网络摄像头等,可以随意选择使用的摄像头以及摄像头的放置位置。首先可以运行以下的命令来查找并测试当前设备连接的摄像头 ID 及参数:
[图 9] |
[图 10] |
启用命令后,会显示出三个摄像头设备(免驱外部摄像头、Macbook 摄像头、iPhone 连续互通摄像头),拍摄的图片会按照摄像头的 ID 保存在 outputs 文件夹中,可以通过这个文件夹里面摄像头拍摄的图片来判断当前位置是否有问题,但是要注意不要将两个同款的摄像头连接在一个 USB-HUB 上,这样在采集数据的时候会出现摄像头识别问题。
[图 11] |
[图 12] |
5.5 机械臂测试
在完成了机械臂的校准配置之后,可以使用以下命令来对机械臂进行测试看两个机械臂的校准是否有问题,在命令行输入以下命令之后便可以操作 Leader 臂来测试 Follower 臂是否正常的跟随运动了:
如果已经配置好摄像头,可以使用以下命令来同步测试带摄像头的遥操是否正常:
6. 数据集采集
完成了上述配置之后,可以开始采集数据集。由于目前使用的是单臂,因此仅采集两个视角的图像,即上方和夹爪视角:
[图 13] |
[图 14] |
然后是任务方面,围绕笔和笔筒,定义了一个比较常见的任务,使用机械臂来对桌面上杂乱摆放的马克笔进行整理,将其放置到笔筒中,使用到的物品资产如下:
[图 15] |
[图 16] |
运行以下命令即可开始数据采集,其中的 num_episodes 用于设置一次采集的数据条数,single_task 则用于设置当前任务使用的语言 instructions,在将 push_to_hub 参数设置为 False 后便会将数据集保存至本地而不会将采集的数据上传至 huggingface,episode_time_s 参数用于设置每段数据的视频采集时长,reset_time_s 则是两段采集之间的复原时间,这些参数按需设置即可:
数采过程中要注意慢慢平滑的操作,不可过于快速的完成一个任务。采集之后的数据将保存在~/.cache/huggingface/lerobot/{repo_id}下面,可以打开这个目录来查看每条数据的采集效果,在这里采集红黑两种颜色笔的数据,每个笔采集 50 条,其中每个笔有 10 条数据位置大致一定,20 条数据笔的摆放位置随机,20 条数据桌面有少量其他物品干扰,采集过程参考这个视频。
7. 训练任务配置
SageMaker Training Job 是全托管、按需付费的云服务,可以快速启动和简化机器学习训练。相比较裸机,它不仅能执行模型训练,还集成了模型管理和并行超参数调优等高级功能,开发者可以专注于机器学习本身。
作为 SageMaker AI 用户,可以自带训练数据集,将其保存到 Amazon S3。也可以选择使用 SageMaker AI 内置算法进行模型训练,或者自带训练脚本,使用机器学习框架构建的模型进行训练。
[图 17] |
7.1 创建 IAM User 并获取 AK/SK
接下来的操作将基于 SageMaker 的 SDK,使用 Python 的 boto3 以及 SageMaker Training Job 完成所有任务。在此之前需要在本地安装 AWS CLI 和获取 IAM 账户的 AK 和 SK,本地安装 AWS CLI 步骤请参考手册;IAM 账户的创建和获取 AK/SK 请参考手册,账户策略可以访问 s3 桶, ServiceQuotas,SageMaker 和创建 IAM Role,遵循权限最小化原则。
通过 aws configure 在本地设置 AK/SK 和使用区域,本文的训练任务使用韩国首尔(ap-northeast-2)资源。
使用以下代码来测试 IAM 账户权限是否可用,同时获取当前账号下可使用的训练资源配额,出现以下输出即代表与 SageMaker 的连接是正常的:
[图 18] |
7.2 创建 IAM Role
AWS 的 SageMaker 进行训练需要用到 Role 的概念,这个 Role(角色)是一种临时授权机制,由于在训练的时候数据集一般储存在 AWS 的 s3bucket 中,使用角色可以赋予 SageMaker 访问其他 AWS 服务(如 S3、CloudWatch)的权限,当 SageMaker 运行训练任务时,它会以这个角色的身份去读取数据集、写入模型输出等操作。
首先需要在 IAM 中创建一个 SageMaker 执行角色(Execution Role),并授予创建的这个角色 AmazonS3FullAccess 以及 AmazonSageMakerFullAccess 等必要策略,使用 SDK 来创建这样的一个角色:
[图 19] |
使用以下代码来查看当前账号下创建的所有 Role:
[图 20] |
除了使用 SDK 的方式,也可以使用网页端可视化的配置 Role。进入 AWS 的控制台依旧进入服务中的 IAM 页面,然后找到左边列表访问管理里的角色,即可在右上角创建一个新的 Role。
[图 21] |
7.3 创建 S3Bucket 并上传数据集
s3bucket 是 AWS 提供的一个通用存储服务,用于存放训练数据、模型文件以及其他资源。使用 SageMaker 训练模型的时候,可以将本地的数据集上传到 s3bucket 以便 SageMaker 训练作业可以直接从云端读取数据,用以下代码来创建一个 s3bucket 存储桶:
用以下代码查看当前账号下创建的所有 s3bucket 以及所在的区域和对应桶的大小:
创建了一个 s3bucket 之后,可以使用如下的代码将本地或者服务器的数据集上传至刚才新创建的存储桶:
[图 22] |
上传完成后,可以使用 boto3 的 list_objects_v2 方法,来遍历指定桶里的文件,使用如下的代码来列出 s3bucket 中所有文件进行检查:
[图 23] |
如果要删除桶中的某个文件,可以使用 boto3 的 delete_object 方法,具体方法及代码如下:
如果不需要这个桶了,可以用 boto3 的 delete_bucket 方法删除桶本身。但由于 S3 不允许删除非空桶,因此在删除之前需要把桶内的文件全部删除清空,以下代码会先清空桶里的所有文件,然后删除这个桶:
当然也可以使用可视化的界面,来创建 s3bucket 存储数据集。在 AWS 控制台的左上角的所有服务中,选择 s3 即可进入存储桶服务,点击右边的创建并根据引导一步一步设置即可。
8. 训练过程
LeRobot 中已经集成 ACTPolicy,在配置好 LeRobot 环境之后可以直接使用如下代码开始训练,其中参数{dataset.root}为指定的数据集路径、{policy.type} 为使用的策略类型、{output_dir} 为训练模型保存的路径、{job_name} 为任务名称和{policy.repo_id}
8.1 使用 SageMaker GPU 按需实例
由于使用 lerobot-train 指令在没配置 HuggingFace 仓库时,默认会加载的本地数据集路径为~/.cache/huggingface/lerobot,需要使用{dataset.root} 来指定到本地的数据集路径。接着在 lerobot 目录同级创建一个 SageMakerTrain.py 作为 SageMaker 的启动文件,但由于使用 lerobot-train 命令进行训练,需要在 lerobot 目录内有一个 train.py 脚本,两个文件如下:
SageMakerTrain.py
train.py
看到如下输出即代表训练正常启动:
[图 24] |
[图 25] |
训练完成的模型文件,会储存在所用的 s3bucket 里面。如下方所示,可以直接在网页上下载模型的训练结果,也可以使用如下的代码从桶中拉取下来。
[图 26] |
8.2 使用 SageMaker GPU Spot 实例
在训练像 LeRobot ACT 这样的模型,Amazon SageMaker 的 Spot GPU 实例通常是一个非常合适且高性价比的选择,尤其适合那些能够容忍中断、并且希望大幅控制成本的训练任务,按需 GPU 和 Spot GPU 对比如下:
| 对比维度 | 按需 GPU 实例 (On-Demand) | Spot GPU 实例 (Spot Instances) |
| 核心概念 | 按使用时长付费,稳定可靠的计算资源 | 利用 AWS 空闲容量的折扣实例,价格远低于按需实例 |
| 价格与成本 | 价格固定,费用较高 | 价格极低,通常可比按需实例节省 60%-90% 的成本 |
| 适用场景 | 生产环境、关键任务、无法容忍中断的长时间训练或推理 | 容错性高的任务:如模型实验、调试、数据处理 |
同上述 GPU 按需场景下的使用,两个文件如下链接:SageMakerTrain.py 和 train.py。
看到如下输出即代表训练正常启动,从图示中可以看到该训练任务成本节省了 74.4%。
[图 27] |
[图 28] |
9. 在开发板上部署模型并推理
在完成了模型的训练之后,使用 LeRobot+RDKS-100 进行实机测试,在 RDK-S100 上配置板端推理的所需环境,在板端依旧使用 MiniConda 作为包管理工具,创建所需的 Python3.10 的环境。
接着在板端安装好 LeRobot 的仓库,ACT 的板端运行代码和导出量化工具均保存在 LeRobot-VLA/RDKS_ModelRun/ACT 下面,这里面集成了 RDK-S100 官方提供的 rdk_LeRobot_tools 脚本可以帮助大家快速完成模型的板端量化与编译。
9.1 CPU 部署
CPU 部署比较快速,RDKS_ModelRun/ACT 下面提供了可以直接运行的脚本,仅需要根据个人的配置修改这个脚本中的一些参数即可。需要修改的一些参数位置如下:
修改完参数之后可以直接运行推理代码:
9.2 BPU 部署
BPU 部署相对比较复杂,但是模型的运行性能会有大幅提升,总体的流程是:模型导出->模型量化->模型编译>板端部署 HBM 模型。首先将 ACT Policy 导出为 ONNX 模型的形式,训练出来的模型文件夹格式一般如下:
ACT 的工具包中也集成了 RDK-S100 提供的一键导出 ONNX 模型,并在运行过程中生成校准数据的脚本,具体的脚本路径在 RDKS_ModelRun/ACT/export_bpu_actpolicy.py。这个脚本有以下的参数可以配置,其中的 type 参数用于配置生成模型运行在板端的类型,RDK-S100 为 nash-e,RDK-X5 为 bayes-e,其余的参数仅需根据自己的需要,配置导出路径即可:
在完成了参数配置后,使用如下命令来运行这个脚本。由于代码中调用了 LeRobot 的一些参数服务器,这里的一些参数配置与训练时基本一致,一般需要修改的参数是–dataset.repo_id 或–dataset.root(优先级高)来指定所使用的数据集,–policy.repo_id 来指定 policy 仓库(优先级小于–act-path)
出现以下日志代表脚本运行成功,模型以及校准数据有正确生成:
[图 29] |
在完成了 ACT 模型的导出之后,即获得了 BPU 编译的工作目录,结构如下图所示,官方提供的代码将 ACT Policy 的视觉编码器部分和 4+1 层的 Transformers 层分别导出为 ONNX,同时基于训练时的数据集,取了 50 组校准数据进行保存,并同步生成了编译的脚本和编译的 yaml 文件夹,还将图像和 action 输入的前后处理参数保存为 npy 文件,放在最终 BPU 模型生成的产出文件夹中:
接着便可以使用 RDK-S100 官方交付的工具链,标准环境 Docker 来对模型进行编译,具体操作的命令如下,仅需要将导出生成的文件夹路径替换 {path/to/your/folder} 即可:
在 Docker 内部运行了 build_all.sh 脚本,完成了模型量化与编译的步骤之后,便会得到 bpu_output 文件夹,这个文件夹里面会有如下的内容:
将这整个文件夹全部复制进 RDK-S100 开发板板端,并将修改工具包中 bpu_act_infer.py 文件里的模型路径(PS: 这里的模型路径是整个 bpu_output 文件夹),接着运行如下的命令即可开始使用 BPU 推理,演示视频浏览链接。
[图 30] |
10. 总结
本文旨在引导开发者走通一个从机械臂配置开始,经过数据采集,云端模型训练,最终部署到开发板上运行的端到端闭环流程。所有代码已传至 GitHub,欢迎探讨和指正。
11. 参考资料
[1] 如何组装旗舰机器人 SO-101
[3] Amazon SageMaker Python SDK
[4] Run training on Amazon SageMaker
➡️ 下一步行动:
相关产品:
- Amazon SageMaker — 适用于所有数据、分析和 AI 的中心
- Amazon IAM — 身份管理和访问权限
- Amazon S3 — 适用于 AI、分析和存档的几乎无限的安全对象存储
- Amazon CloudWatch — 可观测性工具
- Amazon Connect — AI 客户体验解决方案
相关文章:
- 基于SGLang的大模型推理实践——从benchmark方法论到部署方案选型与调优
- 从IDC到云上GPU:基于 Amazon EKS 的大模型推理混合云弹性部署实践
- 如何在亚马逊云科技上构建企业级智能体
- 对图像内容进行精确分析案例实践
- Amazon Bedrock模型推理的Serverless 异步架构 – 处理在线多模态高负载案例
*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。































