从零搭建LeRobot机械臂:硬件装配、数据采集与ACT模型云端训练部署全流程 1. 项目概述从零开始玩转LeRobot与Physical AI如果你对机器人、AI特别是最近火热的“具身智能”Embodied AI感兴趣但又觉得动辄几十上百万的工业机械臂和复杂的算法栈让人望而却步那么LeRobot这个开源项目可能就是为你量身定做的“入场券”。我最近花了近一个月时间从零开始折腾了一套LeRobot机械臂完整走通了从硬件组装、环境搭建、数据采集、模型训练到最终在开发板上部署推理的全流程。这中间踩过的坑、总结的经验远比官方文档要丰富得多。简单来说LeRobot是一个旨在降低机器人学习与Physical AI物理AI应用门槛的开源框架和硬件平台。它最吸引人的一点是提供了一个完全开源的、成本相对低廉的6轴机械臂套件SO-ARM101并配套了一套完整的软件栈让你可以用类似训练大语言模型的方式通过演示数据来“教”机械臂完成特定任务。整个过程从你拧上第一个螺丝到机械臂最终能根据你的指令自主行动涉及了嵌入式开发、计算机视觉、深度学习模型训练和边缘计算部署等多个环节是一个绝佳的、能亲手触摸到的AI与物理世界交互的实践项目。这篇文章我将以一个一线开发者的视角为你拆解这个过程中的每一个关键步骤。我不会只复述官方命令而是会重点分享那些文档里没写、但实际操作中一定会遇到的“魔鬼细节”。无论你是机器人领域的学生、希望探索AI落地的工程师还是单纯的硬核科技爱好者这篇指南都能帮你少走弯路更快地体验到操控一个真实智能体的乐趣。2. 核心硬件准备与开箱装配在开始写任何代码之前我们得先和硬件打交道。LeRobot的核心硬件是SO-ARM101机械臂套件和一块高性能的开发板如RDK-S100。这一步是后续所有软件工作的物理基础装配的精度和配置的正确性直接决定了后续数据采集和控制的可靠性。2.1 硬件清单与选型考量官方物料清单通常包括机械臂本体 (SO-ARM101)包含Leader主控臂和Follower从动臂的所有结构件、舵机、线缆。这是执行动作的核心。开发板 (RDK-S100)用于部署和运行训练好的AI模型进行实时推理和控制。其强大的AI算力如128 TOPS是关键。摄像头用于提供视觉感知。官方示例常使用亚博智能的USB摄像头建议选择1080P分辨率、高帧率如120帧的型号以保证图像质量。其他电源、USB数据线、螺丝刀套装等。选型心得开发板RDK-S100性能强劲但如果你只是想先体验流程树莓派4B或Jetson Nano这类更普及的开发板理论上也能运行部分LeRobot代码但可能需要自己解决驱动和性能优化问题。对于严肃的模型部署RDK-S100的专用AI加速器BPU是巨大优势。摄像头尽量选择免驱的UVC协议摄像头兼容性最好。如果要做精细操作可以考虑全局快门相机以减少运动模糊但成本会上升。电源务必给舵机和开发板配备足额、稳定的电源。舵机在堵转时电流很大劣质电源可能导致重启或控制异常。2.2 机械臂组装实战与避坑指南SO-ARM101的组装是对耐心和细心的一次考验。官方提供了3D动画教程但动画是理想的现实是骨感的。核心步骤与注意事项区分Leader与Follower开箱后第一件事就是把所有零件按Leader和Follower分开放置。它们的结构件和部分舵机型号不同混装会导致无法校准甚至损坏。认识舵机型号这是最容易出错的地方。Follower臂的6个关节全部使用ST-3215-C0017.4V型号舵机。而Leader臂的舵机型号并不统一通常关节1-4是一种型号关节5和夹爪可能是另一种。一定要对照官方提供的电机型号区分图逐个核对。装错舵机轻则无法通信重则可能因扭矩不匹配导致机械结构损坏。螺丝紧固与走线按照动画步骤组装时螺丝先不要一次性拧死方便后续微调。舵机线缆的走向要提前规划避免在运动过程中被关节挤压或拉扯。建议使用扎带或线缆固定座进行整理。相机支架安装官方套件可能不包含相机支架。你需要根据摄像头尺寸自行设计并3D打印一个支架将其固定在Follower臂的末端夹爪附近。支架的设计要保证相机视野能清晰看到夹爪及前方的操作区域同时不能与机械臂自身或工作台发生碰撞。避坑提示在拧紧所有螺丝前先手动轻轻转动每个关节感受是否有卡滞或异响。装配完成后先不要通电用手托着机械臂再次缓慢活动所有关节检查运动范围是否顺畅线缆是否干涉。这一步的检查能避免很多通电后才发现的结构性问题。2.3 开发板基础系统配置以RDK-S100为例拿到开发板后需要先为其安装操作系统并进行基础配置。烧录系统镜像从开发板官网下载最新的Ubuntu系统镜像通常是20.04或22.04 LTS版本。使用Etcher或Raspberry Pi Imager等工具将镜像烧录到SD卡或板载eMMC中。首次启动与网络配置插入烧录好的存储设备连接显示器、键盘鼠标和网线上电启动。按照提示完成Ubuntu系统的初始设置包括创建用户、设置密码、连接Wi-Fi如果支持等。系统更新与基础工具安装启动后首先打开终端更新软件包列表并升级现有软件。sudo apt update sudo apt upgrade -y安装一些后续可能用到的工具如git,curl,wget,vim等。sudo apt install -y git curl wget vim配置远程访问可选但推荐为了方便后续操作建议配置SSH远程登录。在开发板上安装SSH服务并确保其开机自启。sudo apt install -y openssh-server sudo systemctl enable ssh sudo systemctl start ssh然后你就可以从你的主力电脑上通过ssh username开发板IP地址来连接并操作开发板了效率会高很多。至此你的硬件骨架已经搭建完毕。一台结构完整的机械臂和一块运行着Linux的开发板正等待被注入“智能”。接下来我们将进入软件环境搭建的世界。3. 本地开发环境深度配置软件环境是项目的神经系统。一个干净、可控的Python环境是避免后续无数依赖冲突的关键。我强烈推荐使用Miniconda进行环境管理。3.1 使用Miniconda创建隔离环境为什么是Miniconda而不是直接使用系统Python或pip机器人项目依赖复杂可能涉及特定版本的PyTorch、TensorFlow、OpenCV等。Conda不仅能管理Python包还能管理非Python的二进制依赖如某些库的C扩展环境隔离性更好。安装Miniconda如果你的系统没有安装Conda先去Miniconda官网下载对应你操作系统Linux/macOS/Windows的安装脚本。以Linux为例wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh安装过程中按照提示操作通常建议将Conda初始化到你的shell配置文件中如.bashrc或.zshrc。安装完成后重启终端或执行source ~/.bashrc使配置生效。创建专属的LeRobot环境我们创建一个基于Python 3.10的虚拟环境命名为lerobot。conda create -y -n lerobot python3.10 conda activate lerobot激活环境后你的命令行提示符前会出现(lerobot)字样表示后续所有操作都在这个隔离环境中进行。3.2 LeRobot核心库及其依赖安装LeRobot的安装有几种方式从PyPI直接安装最方便但从源码安装能让你更容易地修改代码和调试。方式一从PyPI安装最快pip install lerobot # 安装额外功能例如支持特定的机械臂型号 pip install lerobot[feetech] # 安装Feetech舵机支持方式二从源码安装推荐用于开发这种方式能确保你获得最新的代码并且可以追踪到具体的文件位置。# 1. 克隆仓库这里使用一个包含额外工具的分支 git clone https://github.com/xiongqi123123/LeRobot-VLA.git cd LeRobot-VLA # 2. 安装系统级编译依赖非常重要 # 这些是编译某些Python包特别是视频处理相关所必需的底层库。 sudo apt-get install -y \ cmake \ build-essential \ python3-dev \ pkg-config \ libavformat-dev \ libavcodec-dev \ libavdevice-dev \ libavutil-dev \ libswscale-dev \ libswresample-dev \ libavfilter-dev # 3. 在激活的conda环境中安装FFmpeg用于视频解码 conda install ffmpeg -c conda-forge # 4. 以“可编辑”模式安装LeRobot库 cd lerobot pip install -e .-e参数代表“editable”可编辑模式。安装后你对LeRobot-VLA/lerobot目录下Python代码的任何修改都会直接反映在环境中无需重新安装。实操心得从源码安装时sudo apt-get install那一步很容易被忽略导致后续安装lerobot或运行时报错提示找不到libavcodec等库。尤其是在全新的Ubuntu系统上这一步是必须的。另外使用Conda安装ffmpeg通常比pip install ffmpeg-python更稳定因为它能处理好二进制依赖。3.3 硬件驱动与通信测试环境装好了下一步是让软件认识硬件。连接机械臂用USB线将Leader臂和Follower臂分别连接到电脑或开发板。在Linux系统下它们通常会挂载为/dev/ttyUSB0、/dev/ttyUSB1或类似/dev/ttyACM*的设备。你可以用ls /dev/ttyUSB*或ls /dev/ttyACM*命令查看。查找串口LeRobot提供了便捷的命令来识别哪个串口对应哪个机械臂。lerobot-find-port按照提示先保持所有机械臂USB线连接运行命令。它会列出当前所有串口。然后拔掉其中一个机械臂的线按回车它会对比并告诉你少了哪个端口从而确定该端口对应的机械臂。记下这两个端口号如/dev/ttyUSB0和/dev/ttyUSB1。配置舵机ID总线舵机如Feetech舵机需要通过唯一ID进行寻址。新舵机出厂ID通常都是1所以需要为每个舵机设置不同的ID。lerobot-setup-motors \ --robot.typeso101_follower \ --robot.port/dev/ttyUSB0 # 替换为你的Follower臂实际端口运行命令后按照提示依次将Follower臂的每个舵机单独连接到控制板或通过转接线按回车程序会自动为其分配递增的ID。对Leader臂重复此过程--robot.typeso101_leader。主从臂校准这是确保Leader臂动作能精确映射到Follower臂的关键步骤。新版LeRobot的校准流程简化了很多。lerobot-calibrate \ --robot.typeso101_follower \ --robot.port/dev/ttyUSB0 \ --robot.idmy_follower # 给机械臂起个名字运行后程序会引导你将每个关节缓慢转动到其机械极限位置最小和最大角度系统会自动记录这些值。校准过程中动作要慢、要顺确保记录的是真实的物理极限而不是因为卡住而产生的错误值。摄像头测试lerobot-find-cameras opencv这个命令会列出所有检测到的摄像头并用每个摄像头拍一张测试图保存到outputs文件夹。你可以打开图片确认视角是否正确。特别注意如果你连接了两个同型号的USB摄像头系统可能无法稳定区分它们导致采集时画面错乱。最好使用不同型号的摄像头或者通过index_or_path参数明确指定。完成以上所有步骤后你的开发环境、机械臂驱动和传感器就全部就绪了。可以运行一个简单的遥操作命令来测试整个链路是否通畅lerobot-teleoperate \ --robot.typeso101_follower \ --robot.port/dev/ttyUSB0 \ --robot.idmy_follower \ --teleop.typeso101_leader \ --teleop.port/dev/ttyUSB1 \ --teleop.idmy_leader \ --robot.cameras{front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}} \ --display_datatrue如果能看到摄像头画面并且手动移动Leader臂时Follower臂能跟随运动那么恭喜你最复杂的硬件和基础软件关卡已经通过。4. 数据采集教会机器人“看”和“动”数据是AI模型的“粮食”。对于LeRobot这样的模仿学习框架我们需要采集“状态-动作”对数据。具体来说就是记录人在操作Leader臂完成某个任务时摄像头看到的画面状态和Follower臂对应的关节角度或末端位置动作。4.1 任务设计与场景搭建在开始疯狂采集之前需要精心设计你的任务。一个好的任务应该目标明确例如“把红色的积木放到蓝色的框里”而不是“整理一下桌子”。可重复任务的环境和初始条件要相对固定这样采集的数据才有一致性。难度适中对于初学建议从简单的“Pick-and-Place”抓取-放置开始比如移动一个马克笔。以“将黑色马克笔放入笔筒”为例布置场景在桌面上固定好笔筒。将黑色马克笔放在笔筒附近几个不同的、可重现的位置。摄像头固定确保至少有一个摄像头的视野能覆盖机械臂工作区域、马克笔和笔筒。通常一个固定在机械臂基座或上方的“全局视角”摄像头和一个固定在夹爪附近的“第一人称视角”摄像头组合效果很好。照明保证光线充足、均匀避免强烈的阴影或反光这能极大提高后续视觉模型的鲁棒性。4.2 使用lerobot-record进行采集采集命令集成了遥操作和记录功能。lerobot-record \ --robot.typeso101_follower \ --robot.port/dev/ttyUSB0 \ --robot.idmy_follower \ --robot.cameras{ \ arm: {type: opencv, index_or_path: 0, width: 1920, height: 1080, fps: 30}, \ front: {type: opencv, index_or_path: 2, width: 1920, height: 1080, fps: 30} \ } \ --teleop.typeso101_leader \ --teleop.port/dev/ttyUSB1 \ --teleop.idmy_leader \ --display_datatrue \ --dataset.repo_idmy_username/marker_task \ # 数据集名称 --dataset.num_episodes50 \ # 采集50条数据 --dataset.single_taskGrab the black marker and put it in the bin \ # 任务指令 --dataset.push_to_hubFalse \ # 先保存在本地 --dataset.episode_time_s20 \ # 每条数据录制20秒 --dataset.reset_time_s10 \ # 每条数据间隔10秒用于复位关键参数解析与采集技巧num_episodes数据条数。对于简单任务50-200条可能就有效果复杂任务需要更多。经验之谈不要只采集成功的数据适当加入一些接近成功但失败的数据如快要碰到但滑落能让模型学会更稳健的策略。episode_time_s单条演示的时长。要预留足够时间让人从容地完成操作但也不宜过长避免数据中充斥大量无意义的静止画面。15-30秒是常见范围。reset_time_s给你将物体放回起始位置、准备下一次采集的时间。push_to_hub如果设为True数据会自动上传到Hugging Face Hub方便共享和云端训练。初期调试建议先设为False在本地~/.cache/huggingface/lerobot/my_username/marker_task检查数据质量。操作手感操作Leader臂时动作要平滑、缓慢。突然的急停或抖动会被忠实记录模型学到这些坏习惯后控制也会变得抖动。想象你在教一个新手动作要清晰、稳定。4.3 数据质量检查与预处理采集完成后务必检查数据。进入缓存目录你可以找到以.hdf5或类似格式存储的数据文件以及对应的视频片段。检查要点视频流畅性播放视频检查是否有卡顿、丢帧或花屏。动作同步性观察视频中机械臂的动作是否与你当时的操作一致是否存在明显延迟。任务完成度确保大多数episode都成功完成了任务。数据多样性检查马克笔的起始位置、朝向是否有足够的变化。如果所有数据都一模一样模型将无法泛化。如果发现某些数据质量很差如操作失误、摄像头被遮挡可以直接在缓存文件夹中删除对应的数据文件。LeRobot的数据加载器通常能自动处理剩余的有效数据。至此你已经有了一份属于自己的、标注了动作和视觉状态的机器人演示数据集。接下来我们将利用云端的强大算力让AI从这些数据中学习策略。5. 云端模型训练在Amazon SageMaker上高效运行在本地笔记本或普通台式机上训练机器人模型非常耗时甚至可能因显存不足而无法进行。利用云服务如Amazon SageMaker可以按需使用高性能GPU快速完成训练。5.1 AWS基础资源准备在SageMaker上运行训练任务需要配置好身份、权限和存储。创建IAM用户并获取凭证登录AWS管理控制台进入IAM身份和访问管理服务。创建新用户为其编程访问生成访问密钥ID和秘密访问密钥即AK/SK。为该用户附加必要的策略例如AmazonS3FullAccess、AmazonSageMakerFullAccess。安全提示在生产环境中应遵循最小权限原则创建更精细的策略。在本地电脑上安装AWS CLI并使用aws configure命令配置刚才获得的AK/SK和首选区域如ap-northeast-2首尔。创建S3存储桶S3是云上的对象存储用于存放我们的训练数据集和训练输出的模型。# 使用AWS CLI创建桶 aws s3 mb s3://lerobot-training-data-2025 --region ap-northeast-2也可以直接在S3控制台页面创建。桶的名称必须全球唯一。上传数据集到S3将本地采集的数据集打包上传。# 假设数据集在 ~/.cache/huggingface/lerobot/my_username/marker_task aws s3 sync ~/.cache/huggingface/lerobot/my_username/marker_task s3://lerobot-training-data-2025/datasets/marker_task/sync命令会同步本地目录和S3路径只上传有变化的文件。创建SageMaker执行角色SageMaker训练任务需要扮演一个IAM角色来访问S3等资源。这个角色可以通过控制台或代码创建。以下是通过boto3 SDK创建的示例import boto3 import json import sagemaker from sagemaker import get_execution_role # 通常如果在一个有适当权限的SageMaker Notebook实例或配置好的本地环境中 # 可以直接使用以下方法获取或创建默认角色。 # 更稳妥的方式是在IAM控制台手动创建 # 1. 创建角色信任实体选择“SageMaker”。 # 2. 附加策略 AmazonSageMakerFullAccess 和 AmazonS3FullAccess。 # 记下角色的ARN形如arn:aws:iam::123456789012:role/MySageMakerRole role get_execution_role() # 仅在SageMaker环境或配置了默认角色时有效 # 或者直接指定你创建的角色的ARN # role arn:aws:iam::123456789012:role/MySageMakerRole print(fUsing IAM Role: {role})5.2 准备训练脚本与SageMaker配置我们需要将LeRobot的训练过程封装成SageMaker可以执行的格式。核心是创建一个入口脚本如train.py和一个配置脚本。train.py(训练入口脚本) 这个脚本会被SageMaker在训练实例中执行。它本质上就是调用我们之前安装的lerobot-train命令。#!/usr/bin/env python3 import subprocess import sys import os if __name__ __main__: # SageMaker会把S3的数据集下载到/opt/ml/input/data/ 目录下 # 假设我们在配置TrainingInput时通道名设为dataset那么路径就是 /opt/ml/input/data/dataset dataset_path /opt/ml/input/data/dataset # 构建训练命令 cmd [ lerobot-train, f--dataset.root{dataset_path}, # 使用本地路径 --policy.typeact, # 使用ACT算法 --output_dir/opt/ml/model, # SageMaker要求模型输出到此目录 --job_nameact_marker_train, --policy.devicecuda, --training.save_interval1000, --training.eval_interval1000, --training.num_epochs50, --batch_size8, # 根据GPU显存调整 --wandb.enablefalse, # 可启用wandb进行实验跟踪 ] print(fRunning command: { .join(cmd)}) # 执行命令 result subprocess.run(cmd, capture_outputTrue, textTrue) print(STDOUT:, result.stdout) print(STDERR:, result.stderr) sys.exit(result.returncode)SageMaker训练任务配置脚本 (例如launch_training.py) 这个脚本在你本地或一个启动器环境中运行用于向SageMaker服务提交训练任务。import boto3 import sagemaker from sagemaker.pytorch import PyTorch from sagemaker.inputs import TrainingInput from sagemaker.estimator import Estimator # 初始化会话 boto_session boto3.Session(region_nameap-northeast-2) sagemaker_session sagemaker.Session(boto_sessionboto_session) # 训练数据在S3上的位置 dataset_s3_uri s3://lerobot-training-data-2025/datasets/marker_task/ # 创建PyTorch Estimator estimator PyTorch( entry_pointtrain.py, # 入口脚本文件名 source_dir., # 包含train.py和任何其他必要文件的本地目录路径 dependencies[], # 可以指定requirements.txt但更推荐在Docker镜像中预装 rolearn:aws:iam::123456789012:role/MySageMakerRole, # 替换为你的角色ARN instance_count1, # 实例数量 instance_typeml.g5.2xlarge, # 实例类型单卡A10 GPU性价比高 framework_version2.1.0, # PyTorch版本 py_versionpy310, # Python版本 sagemaker_sessionsagemaker_session, output_paths3://lerobot-training-data-2025/model-outputs/, # 模型输出路径 code_locations3://lerobot-training-data-2025/code/, # 训练代码上传位置 hyperparameters{}, # 可以通过这里传参给train.py但我们写在命令里了 # 使用Spot实例以节省成本可选项但可能被中断 # use_spot_instancesTrue, # max_wait3600, # 最大等待时间 # max_run3600, # 最大运行时间 ) # 定义输入数据通道 data_channels { dataset: TrainingInput( s3_datadataset_s3_uri, distributionFullyReplicated, # 数据复制到所有实例 content_typeapplication/x-hdf5 # 根据实际数据类型调整 ) } # 提交训练任务 estimator.fit(inputsdata_channels, waitTrue) # waitTrue会阻塞直到训练完成 print(Training job completed!)5.3 训练监控与结果获取提交任务后你可以在AWS控制台的SageMaker服务下的“训练任务”中监控其状态。任务日志会输出到CloudWatch你可以在控制台查看也可以在train.py中增加日志打印。训练完成后模型文件会自动保存到你指定的S3输出路径s3://lerobot-training-data-2025/model-outputs/job-name/output/。你可以从这里下载最终的模型文件通常是pytorch_model.bin或model.safetensors以及config.json。成本优化技巧使用Spot实例在PyTorchEstimator中设置use_spot_instancesTrue可以节省高达70%的成本。代价是实例可能被中断但对于可以容忍中断的训练任务训练代码支持从检查点恢复非常划算。选择合适实例ml.g5.2xlarge单A10G对于初版ACT模型训练通常足够。如果收敛慢可以尝试ml.g5.4xlarge或ml.p4d.24xlarge等更大显存的实例。设置自动停止通过max_run参数设置最大运行时间避免因代码错误导致无限运行产生高额费用。现在你已经拥有了一个在云端训练好的、能够理解“把黑色马克笔放进笔筒”这个任务的AI策略模型。最后一步就是把这个“大脑”部署到机械臂身边的开发板上让它真正活起来。6. 边缘部署与推理让模型在开发板上实时运行将训练好的模型部署到RDK-S100这类边缘设备上并实现低延迟的实时推理是Physical AI落地的最后一步也是挑战最大的一步。我们需要考虑模型优化、硬件加速和实时控制循环。6.1 开发板环境复现与模型准备首先确保开发板上的Python环境与训练环境一致。# 在RDK-S100上操作 # 1. 安装Miniconda (如果尚未安装) wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh bash Miniconda3-latest-Linux-aarch64.sh # ... 按照提示安装并初始化 # 2. 创建并激活环境 conda create -y -n lerobot_deploy python3.10 conda activate lerobot_deploy # 3. 安装LeRobot及依赖 (同样需要系统依赖) sudo apt-get install -y cmake build-essential python3-dev pkg-config \ libavformat-dev libavcodec-dev libavdevice-dev libavutil-dev \ libswscale-dev libswresample-dev libavfilter-dev conda install ffmpeg -c conda-forge # 4. 克隆部署专用仓库包含BPU工具 git clone https://github.com/xiongqi123123/LeRobot-VLA.git cd LeRobot-VLA/lerobot pip install -e .[feetech] # 安装带舵机支持的lerobot然后将从S3下载的训练好的模型文件pretrained_model文件夹上传到开发板例如放在~/models/marker_task/目录下。6.2 CPU推理部署简易方案对于快速验证或对延迟要求不高的场景可以直接在CPU上运行PyTorch模型。LeRobot-VLA仓库中通常提供了示例脚本。cd ~/LeRobot-VLA/RDKS_ModelRun/ACT # 编辑 cpu_act_infer.py修改以下关键参数 # - 模型路径 policy ACTPolicy.from_pretrained(/home/user/models/marker_task/pretrained_model) # - 机器人端口 robot_config SO100FollowerConfig(port/dev/ttyUSB0, ...) # - 摄像头ID camera_config {front: OpenCVCameraConfig(index_or_path0, ...)} # - 任务描述 TASK_DESCRIPTION Grab the black marker and put it in the bin # - 推理参数 NUM_EPISODES, FPS 等 python cpu_act_infer.py运行后脚本会加载模型通过摄像头获取当前图像结合任务描述由模型预测出机械臂应该执行的动作如关节角度增量并发送给机械臂执行。你会在终端看到推理延迟如Inference time: 120ms。CPU推理的延迟通常在100-300毫秒对于慢速任务勉强可用但不够流畅。6.3 BPU加速推理部署高性能方案要获得实时性能50ms延迟必须利用RDK-S100的专用AI加速器BPU。这需要将PyTorch模型转换为板载芯片支持的格式.hbm。流程是PyTorch - ONNX - 量化/编译 - HBM。模型导出为ONNX使用仓库提供的导出脚本。cd ~/LeRobot-VLA/RDKS_ModelRun/ACT python export_bpu_actpolicy.py \ --act-path ~/models/marker_task/pretrained_model \ --export-path ./bpu_workdir \ --type nash-e \ # RDK-S100的BPU型号 --dataset.root ~/.cache/huggingface/lerobot/my_username/marker_task # 提供校准数据集路径这个脚本会加载PyTorch模型。生成一批校准数据用于后续量化。将模型拆分为视觉编码器和Transformer策略网络两部分并分别导出为ONNX文件。生成模型编译所需的配置文件和脚本。模型量化与编译这一步需要在包含BPU工具链的Docker环境中进行。你需要从开发板厂商获取或下载对应的Docker镜像。# 假设你已经下载了工具链镜像 ai_toolchain_ubuntu_22_s100_gpu:v3.2.0.tar docker load ai_toolchain_ubuntu_22_s100_gpu_v3.2.0.tar # 运行Docker容器并将上一步导出的工作目录挂载进去 docker run -it --rm --gpus all --shm-size32g \ -v /home/user/LeRobot-VLA/RDKS_ModelRun/ACT/bpu_workdir:/open_explorer \ ai_toolchain_ubuntu_22_s100_gpu:v3.2.0 # 在Docker容器内部运行编译脚本 cd /open_explorer bash build_all.sh编译过程可能需要几分钟到几十分钟。成功后会在bpu_workdir目录下生成一个bpu_output文件夹里面包含编译好的.hbm模型文件以及预处理参数文件如action_mean.npy,laptop_mean.npy等。板端部署与运行将整个bpu_output文件夹拷贝到RDK-S100开发板上。修改对应的BPU推理脚本如bpu_act_infer.py将模型路径指向这个文件夹。# 在开发板上 cd ~/LeRobot-VLA/RDKS_ModelRun/ACT # 编辑 bpu_act_infer.py设置模型路径 # policy ACTBPUPolicy(model_path./bpu_output) python bpu_act_infer.pyCPU与BPU部署对比特性CPU部署BPU部署准备难度低直接运行Python脚本高需经过导出、编译等多步推理速度慢 (100-300 ms)快 (10-50 ms)资源占用高占用大量CPU低专用硬件处理实时性一般动作可能不连贯好可实现流畅实时控制适用场景算法验证、原型测试实际部署、性能要求高的应用部署避坑指南版本对齐确保开发板上LeRobot库的版本与训练时使用的版本一致特别是模型定义和配置文件。预处理一致性BPU模型推理时输入图像的预处理归一化、裁剪、缩放必须与训练时完全一致。export_bpu_actpolicy.py脚本生成的*_mean.npy和*_std.npy文件就是用于此目的务必在推理代码中正确使用。内存管理连续运行推理脚本时注意Python的内存释放。长时间运行后如果出现延迟增加可能是内存泄漏考虑定期重启推理进程。错误处理在推理循环中加入异常捕获和机械臂急停逻辑。如果模型输出异常动作如超出关节限位应立即停止发送指令防止损坏机械臂。当你在开发板上成功运行bpu_act_infer.py并看到机械臂根据摄像头画面和你的文字指令自主地、流畅地将马克笔放入笔筒时整个Physical AI的闭环就真正完成了。从一堆零件到拥有“视觉”和“智能”的机器人这个过程充满挑战但最终的成就感是无与伦比的。这个项目不仅让你掌握了LeRobot工具链更深入理解了具身智能从数据到部署的全链路为探索更复杂的机器人任务打下了坚实的基础。