ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Lerobot+飞特舵机:从零搭建6轴机械臂实现模仿学习实战

2026/10/7 11:01:14 拓冰建站 浏览量
Lerobot+飞特舵机:从零搭建6轴机械臂实现模仿学习实战 如果你最近刷到过那种机械臂自己抓杯子、叠袜子、开抽屉的视频十有八九背后都挂着同一个名字Lerobot。它是Hugging Face开源的机器人学习框架主打用几百条示教数据让机械臂学会一个动作。而在官方支持的硬件里飞特舵机Feetech是普通玩家最够得着的入口——几十块钱一个的总线舵机配上3D打印结构件就能攒出一台能跑模仿学习的6轴智能机械臂。这篇文章把从选舵机、接电路、装Ubuntu、采集数据到训练ACT策略的完整过程捋了一遍适合想认真把这套东西跑起来的人。你不需要有机器人学背景但最好有点耐心因为最大的坑几乎全在硬件层面。1. 为什么选Lerobot 飞特舵机这套组合的价值在哪里1.1 Lerobot到底是个什么东西我先用一句话说清楚Lerobot是Hugging Face开源的一个机器人学习框架它把给机械臂做一个新动作这件事拆成了三个标准步骤——采集示教数据、离线训练策略模型、真机部署评估。这三个步骤原本是机器人实验室里各做各的苦差事官方文档还老喜欢把每一环都说得特别玄乎。Lerobot把这套流程做成了接近开箱即用的工程设施数据格式统一硬件抽象层统一策略算法内置了好几种ACT、Diffusion Policy、TDMPC这些都能直接调你不需要从零去写一套数据处理管线也不用自己造轮子接相机、接舵机。传统做法和这里的思路差别非常大。传统机械臂控制是先做运动学标定再手写轨迹规划再逐个关节调PID最后还得面对理论轨迹很美、实际一跑就撞的尴尬。Lerobot走的是学习路线我给你演示几十次你从数据里自己学出该怎么做。听起来有点黑盒但实际用下来只要数据采集规范这套路子的成功率往往比手写规划还稳尤其是抓取、插拔、叠放这类有点柔性、又不好建模的任务。1.2 飞特舵机为什么适合拿来练手飞特舵机能在这个组合里被广泛使用核心原因是总线舵机这个形态。普通PWM舵机一个舵机要占一条PWM通道机械臂6个关节就要6路信号线又粗又多扩展性很差。飞特的STS3215这类总线舵机走的是半双工串行总线信号线一根线串起来所有舵机用ID区分7个舵机挂同一条总线接线极其清爽。价格也友好一个STS3215的价格只有同扭矩Dynamixel的几分之一对学生和极客来说这就是摸得着的门槛。更关键的是Lerobot官方参考设计里就有一台叫SO-100的6轴臂用的正是Feetech ST3215。这意味着你踩过的坑别人基本都踩过官方文档里有完整的零件清单、3D打印文件、接线图和配置方法。这种情况下你完全可以先把官方方案复现一遍再去做自己的改造而不是一上来就对着空白画布设计。买舵机之前也建议去飞特官网把对应型号的说明书下载下来里面关于寄存器地址、协议帧的说明后面调试会反复用到。1.3 这套方案的适用人群我觉得适合三类人一是在校生做毕业设计或实验室课题需要一个能自动学会抓取的硬件平台二是做工业自动化或软件开发的工程师想系统入个门搞清楚机器人学习到底怎么落地三是纯粹爱折腾的DIY玩家手里有3D打印机和一颗想造东西的心。需要的技能门槛不高会基本拆装、会一点Python、能装Linux系统就够了运动学、深度学习都不需要提前精通——但要有耐心因为大部分坑出在硬件层面这是我要反复强调的事情。2. 从零件清单到机械装配一台6轴臂的硬件选型与搭建2.1 每个关节该怎么配舵机普通桌面级机械臂最常见的构型是6自由度6个旋转关节 1个夹爪SO-100就是这种。为什么是6自由度因为6个关节刚好能让末端夹爪在工作空间内到达任意位置和姿态少一个就得靠姿态妥协多一个又会带来运动学冗余徒增标定负担。所以新手做机械臂别一上来就整个七轴八轴6轴是最合理的起跑线。一只手臂就是7个舵机6个关节各一个夹爪一个。如果要做主从遥操作后面会讲强烈建议做那你需要两条手臂也就是14个舵机。舵机怎么选核心看扭矩。底座关节承受整条手臂的重力受力最大其次是肩部腕部和夹爪受力最小。选择时有个偷懒但好用的办法直接按官方SO-100的配置来全用STS3215标称扭矩在7.4V供电下能到30kg·cm级别对臂展30到40厘米的桌面级机械臂来说余量充足。预算紧张的话示教臂可以用扭矩小一号的舵机因为示教臂不承重只负责把人的动作转换成角度信号不过不同型号的响应速度和控制精度要留意最好保持一致省得数据采集时出现主从不同步的怪问题。2.2 3D打印结构件和装配细节结构件最省事的方案是用3D打印。Lerobot官方仓库里提供了SO-100的STL文件打印材料建议PETG比PLA耐热耐冲击打印填充率设到30%~40%左右关键受力件底座、肩部连接件可以开到50%。打印方向也有讲究层间方向受力最弱打印时尽量让受力方向平行于打印层不然装上舵机一转就劈叉别问我怎么知道的——我第一次打印的肩关节件就是偷懒用了默认方向装好转了两下就裂了。装配时有一个特别容易翻车的点舵机中位。总线舵机在出厂状态下有一个中位也就是0°位置但装结构件时如果你不先把每个舵机都设置到中位再对舵盘和结构件装出来的手臂就会歪七扭八。所以我的建议是上电前先用总线控制工具把每个舵机转到0°确认舵盘方向再锁舵盘螺丝。螺丝一定要上一点点螺丝胶否则机械臂高速动作时螺丝会慢慢退出来轻则精度下降重则直接卡死齿轮。线束走线不要在关节处绷得太紧。总线舵机是串联接线上一关节的线要穿过结构件内腔如果你的走线孔开小了关节一转就把线磨破皮轻则舵机掉线重则短路烧控制板。这个症状我花了两晚上才排查出来表现就是关节转到某个角度就随机丢响应看着特别像软件问题。2.3 供电方案电压、电流和线径供电是整台机械臂最容易被低估的一环。7个舵机同时动作时瞬时电流轻松到好几安培如果你用一个普通的5V USB电源去带电压会瞬间被拉垮表现就是舵机发抖、位置乱跳、甚至直接重启。正确的做法是给舵机总线单独供7.4V左右的电源最方便的就是2S锂电池标称7.4V满电8.4V。别把可调电源的电流限制开太小我建议至少留出10A的余量线缆用16AWG以上越粗越好别省这几块钱。还有一个工程师经常忽略的点舵机电源和控制板逻辑电源要共地。舵机总线用7.4V控制板用USB的5V两者如果不把GND连在一起串口信号的电平参考就乱了舵机会收到莫名其妙的错误指令。这个症状特别容易伪装成协议没配置对。另外建议在舵机总线的电源入口并一个大电容比如1000µF以上电解电容能明显改善瞬时压降对总线通信稳定性帮助非常大属于投入最小、收益最直观的改装。3. 总线舵机上电与驱动让ST3215听你使唤3.1 飞特总线的通信基础要驱动飞特舵机先得理解它的总线协议。简单说这是一条半双工TTL串口总线数据在一根线上双向传输。半双工的意思是同一时刻只能收或发所以硬件上必须有一个方向控制机制通常是单片机的一个引脚去切换收发芯片的方向。这一点在选控制板时非常关键。飞特总线的默认波特率是1Mbps不同型号可能不同帧结构是固定的包头、舵机ID、指令类型、参数区和校验位。你在代码里最常用的其实就几类指令读位置、写目标位置、设置速度、设置模式。位置寄存器一般是0到4095对应0°到360°也就是说分辨率是12位大概0.088°一格。理解这个映射关系之后你就知道为什么校准中位要用整数值0以及为什么位置值突然跳到边界值通常意味着总线通信出错而不是舵机真的转到了那个角度。3.2 控制板选型USB到飞特总线的这座桥Lerobot官方SO-100整套系统里电脑并不直接连舵机而是通过一块控制板做USB到飞特总线的桥接再由Lerobot的驱动层在电脑上按100Hz左右的频率实时收发指令。原版控制板如果不好买完全可以用一块ESP32自己搭ESP32的UART加上一块半双工收发芯片比如MAX485或者MAX3485再接上7.4V电源输入就能把串口信号转换成飞特总线信号。网上有不少现成的开源原理图自己打样也就几十块钱。这里有个容易踩的坑USB转串口芯片如果只是普通的CH340它的TX/RX是标准TTL全双工信号不能直接连飞特总线必须经过半双工收发芯片和方向控制。很多人第一次接上去发现读不到舵机ID八成就是这里不对。接好之后在Linux里还要给串口设备加权限把当前用户加到dialout组否则Lerobot会一直报权限错误。3.3 扫ID、设中位、配置参数的三步操作拿到一箱舵机第一步绝对不是直接装到机械臂上而是逐个上电用飞特官方上位机或者Lerobot的调试脚本做三件事。第一件是扫ID。新舵机出厂ID都一样两条臂14个舵机如果都是同一个ID总线会冲突。操作方法是只给一个舵机单独供电把它改成目标ID然后换下一个。这个工作很枯燥但绝对不能跳过否则后面排查ID冲突会花掉你十倍时间。第二件是设中位。ST3215这类舵机有零点校准的功能你先手动把舵机转动到机械结构中位结构件对齐的位置然后把当前位置设成0以后所有的位置控制都以这个为零点。为什么必须在装机前做因为装机后很多关节位置你不方便手动去掰强行掰又容易损坏减速齿轮。第三件是设置速度、加速度和电流保护。总线舵机支持软件限速限流这个一定要设。否则调试过程中一旦代码写了错误的目标位置舵机会带着结构件硬顶轻则舵机过热重则扫齿。电流上限设到额定值附近既保护舵机也保护你的钱包。顺便说一句飞特的说明书里寄存器地址表值得完整看一遍很多奇奇怪怪的现象其实都在寄存器配置里有解释。3.4 抖动、堵转、掉线三板斧排查法真机调试时期几乎每天都会碰到这三类问题我总结了一套排查顺序。第一类舵机发抖九成是供电不足先看电压波形再并电容、换粗线第二类堵转表现为某个关节卡死、发烫、电流异常大先检查机械卡阻螺丝顶住齿轮、线束卡关节再检查是不是位置目标写反了、舵机在往错误方向硬顶第三类掉线表现为总线偶发读不到某个ID优先查接插头松动、线缆在关节处磨损、以及共地问题最后才怀疑波特率。为了快速定位是哪个舵机出问题建议在给机械臂做测试程序的时候把每个关节单独驱动一遍记录每个ID的响应时间。如果某个ID总是延迟明显偏大十有八九是物理链路的问题而不是软件。这个单关节巡检脚本我认为是装机后最值得先写的代码没有之一。下面给个简化思路具体API以你用的库为准# 伪代码巡检每个ID的响应延迟 import time for servo_id in range(1, 8): start time.time() pos bus.read_position(servo_id) # 读一次位置 elapsed time.time() - start print(fID {servo_id}: pos{pos}, latency{elapsed*1000:.1f}ms) time.sleep(0.05)4. Ubuntu环境与Lerobot代码准备4.1 为什么建议Ubuntu Python 3.10Lerobot官方对Linux的支持最完善我的建议是用Ubuntu 22.04搭配Python 3.10用mamba或者conda建一个独立环境。Windows不是不能跑但串口权限、USB驱动、PyTorch的CUDA版本适配这些环节会多出很多幺蛾子你折腾系统的时间绝对够把环境重装两遍。硬件资源方面一台带NVIDIA显卡的电脑是训练阶段的必需品不过如果你前期只是做数据采集和遥操作核显都能顶住训练再借服务器也行。装PyTorch的时候先确认你的CUDA版本再选安装命令别装完发现torch调不了GPU白跑一晚上。我见过不少人在CPU上硬跑ACT训练慢到怀疑人生其实就是安装时偷懒用了默认CPU版。4.2 安装Lerobot并理清目录结构安装Lerobot最稳的方式是git clone官方仓库然后以源码安装模式运行。这样做的好处是你能直接看到框架内部的驱动代码遇到问题可以加print调试而且改完即时生效。装完先别着急跑数据采集先做两件事一是确认Python能正常import lerobot二是随便运行一个不带硬件的脚本比如查看机器人配置或者帮助信息把整个环境链路验证一遍。目录结构里几个关键位置要心里有数configs里放着机器人和策略的yaml配置lerobot/scripts里是数据采集、训练、评估的入口脚本lerobot/common里是各种硬件驱动和数据处理模块。你对这套结构越熟后面自定义的时候越不慌。4.3 自定义机械臂的配置文件怎么写Lerobot通过yaml文件描述一台机械臂关节有哪些、每个关节用哪个舵机ID、运动学模型在哪个URDF文件里、电机参数怎么设。以SO-100为例配置里会定义7个舵机的ID列表、名字、以及每个关节的offset。如果你完全复刻SO-100直接用官方配置就行如果你做了自己的结构改动比如换了舵机安装方向那就要小心了——关节offset填错机械臂会以一个非常扭曲的姿态执行动作训练出来的策略也必然失败。计算offset的方法是把机械臂摆成一个已知的基准姿态比如立正姿势所有关节都是明确的0°或90°然后读取每个舵机的实际位置值用期望角度减实际值得到offset填进配置。这个校准过程一定要做记录文档否则半个月后你再翻回来看看到一堆数字完全不知道当时怎么算的。我就是因为在笔记本上随手写了个offset表后来重新调机械臂时对着自己潦草的字迹猜了半天才给环境里补了注释和拍照记录。4.4 仿真先行Webots能帮我们验证多大一部分流程现在很多人做多机械臂智能分拣这类项目时会先在Webots这类仿真环境里跑通整套算法再迁移到真机。这个思路在Lerobot的学习路径里同样适用Lerobot本身有一些模拟环境的支持你可以在仿真里先熟悉数据采集、训练、评估的完整流程把脚本参数和常见报错都摸熟再上手真机心态会稳很多。仿真和真机之间永远存在domain gap比如真机的摩擦力、舵机抖动、视觉光照变化都是仿真里不存在的但先把流程跑通这件事仿真确实帮我们省下了大量真机调试时间。我的建议是仿真用来学框架、打基础真机用来做最终验证别指望仿真里好的效果直接复制到真机。5. 主从遥操作与数据采集5.1 为什么一定要做一条示教臂Lerobot的数据采集方式里主从遥操作是最自然、数据质量最高的方式人有两条手臂示教臂leader跟着你的手动作执行臂follower实时复现同一套动作。为什么不用键盘手柄去控制因为人体动作天然平滑包含了很多难以显式建模的柔顺性而这些信息会以关节角序列的形式被完整记录进数据。用遥控手柄录出来的轨迹通常很生硬训练出来的策略动作也生硬成功率明显低。实现主从遥操作软件上不需要写复杂的算法。Lerobot的实时控制逻辑就是高频读取leader臂的每个关节位置映射到follower臂的目标位置中间按你自己的机械尺寸做缩放。硬件上需要注意leader臂的舵机扭矩不需要大但转动要顺滑最好加配重减少操作者疲劳。我在实际使用中会先把两条臂的关节一一对齐到同一姿态再启动遥操作这样首帧不会出现突然跳变的惊吓。5.2 数据采集的标准流程和动作规范数据采集的质量直接决定训练效果这不是一句口号而是我在对比了多组数据之后确认的规律。标准流程是固定好机械臂和物体给每个episode设定一个明确的任务比如抓起红色方块放到左格然后开始录制操作者控制leader臂慢慢完成动作结束后保存这一段episode。录制过程中动作要慢、要稳路径尽量一致不要一会儿快一会儿慢更不要在中间停顿很久又突然加速因为策略学到的是分布你给它看过多少种坏动作它就会有多少概率复现坏动作。还有一个提升泛化能力的做法把物体的初始位置在合理范围内做随机化。比如这次方块放在偏左5毫米下次偏右1厘米这样模型学到的不是一个固定坐标点上的抓取而是一块区域内物体和夹爪的空间关系。随机范围别太大让任务保持可完成性否则数据里全是失败模型反而学不到正确映射。5.3 数据集里到底有什么Lerobot的数据集组织方式很有讲究。每个episode存成一个独立的目录里面包含一段视频通常是机械臂视角的摄像头画面和一个parquet文件。视频是给视觉观察用的parquet里则按时间步存了状态state和动作actionstate是当前机械臂各关节的位置action是下一步的目标位置或速度。数据里还记录了任务描述、时间戳这类元信息。理解这个格式很重要因为训练时模型实际看的是图像 状态 - 动作的映射。所以视频帧率、画面是否含混、物体是否在画面里都会直接影响效果。采集时相机固定住别用手持画面一抖模型就会把抖学成动作的一部分。这也是很多人训练出来夹爪疯狂颤抖的隐蔽原因之一。5.4 数据质量检查训练前必须做的事采了数据先别急着训练。我建议养成一个习惯训练前把数据集完整回放一遍逐个episode检查。看动作是否顺畅、目标物体是否被正确夹取、有没有某个关节因为限位问题中途乱跳。把不合格的episode直接删掉宁可少而精不要多而烂。Lerobot提供了数据集查看和统计的工具你可以看每个episode的长度分布、状态维度的数值范围。特别要检查有没有状态突然跳变的样本那通常是总线丢帧导致的错误位置记录模型要是见过这种异常就会学习到一些非常诡异的补偿动作。清洗数据这一步虽然枯燥但它和调参一样重要属于做了不一定立刻见效、不做一定出问题的事情。6. 训练ACT策略并在真机上部署6.1 ACT的核心思路一句话讲清楚ACTAction Chunking with Transformer是Lerobot里用起来最顺手的模仿学习策略之一它的核心想法是一次预测未来一段时间的动作序列而不是每走一步才预测一步。传统做法每一步重新规划误差会累积动作也会因为逐帧预测而抖动ACT把未来30到100步的动作当成一个整体动作块输出配合Transformer对序列的建模能力能生成平滑、连贯的动作特别适合舵机这类低速、带齿轮间隙的执行机构。ACT还有一个关键组件是VAE变分自编码器它从示教数据里学习一个动作风格的隐变量。通俗点说模型在训练时不光记住了要走到哪里还记住了一个像人示教那样走过去的风格分布所以生成的轨迹天然带有示教时的柔顺感。这也是为什么数据采集的动作一致性比数据量更重要的原因。6.2 训练参数怎么设Lerobot里训练模型主要调几个参数训练轮数epoch、动作块大小chunk_size、批量大小batch_size和学习率。以几十个episode的小数据集为例80到150个epoch是常见的区间chunk_size设在30到100之间。训练时长取决于数据集大小和显卡日常桌面级数据50个episode在中等显卡上大概几十分钟到两三个小时不算长可以安心多试几组参数。训练之前把训练集/验证集独立划分好用验证集评估模型有没有过拟合。Lerobot默认会按一定比例留出验证集我们只需要在训练结束看验证集成功率即可。不同参数组合可以开一组对比实验我习惯把每组实验的配置文件和输出目录名都写清楚不然跑完五六个实验你会彻底忘掉哪个目录对应哪个参数。整理实验记录这件事看着不起眼救命的次数真不少。6.3 评估与真机试跑训练完之后Lerobot会保存checkpoint和训练曲线评估阶段的工作就是把checkpoint加载到真机上让模型自己根据当前图像和状态生成动作然后驱动follower臂执行。评估任务建议从最简单的开始固定物体位置测试20次统计成功率。等简单场景稳定之后再逐步加入位置随机化。真机部署时我会特别留意一个现象部署成功率往往比训练时的验证成功率低一点点这是正常的domain gap。如果低得太多先怀疑图像差异光照、背景变化和动作抖动的硬件原因再考虑是不是模型过拟合。Lerobot也支持把策略部署到仿真环境里做闭环测试Webots这类工具在这里可以作为沙盒先在仿真里确认策略逻辑没问题再上真机能减少很多无谓的物理风险。6.4 成功率不理想按这个顺序排查如果策略训出来成功率不理想别急着调参按下面这个顺序排查收益从高到低。第一检查数据一致性同一任务在不同episode里的路径差异是否过大、物体位置是否漂移、画面是否有干扰。第二检查数据质量有没有坏episode混进训练集删掉重新训练往往比加更多epoch有用。第三检查任务是否可学习物体太难抓太小、太滑、摆放角度太刁钻换一个更友好的物体试试。第四才轮到调整训练参数和网络结构。这个顺序我每次都会默背一遍因为它能帮我避免拿一个脏数据集反复调参调了一整天的无效劳动。7. 复盘与进阶三个关键认知7.1 硬件稳定压倒算法先进整台机械臂跑通之后回头看最大的感触是困扰我的几乎全部问题都出在硬件而不是算法。供电不稳、走线磨损、ID冲突、螺丝松动这些问题每一个都能让训练好的模型在真机上翻车而且症状特别像算法问题。所以在投入精力学模型、调参数之前先把硬件当成头等大事来对待。我的做法是给每台机械臂建一个硬件日志记录每次出现的机械、电气问题和修复方式后来排查问题基本都靠这本日志快速定位。7.2 数据一致性大于数据量很多人以为模仿学习就是数据越多越强实际体验下来50条高质量、动作一致、物体位置合理分布的数据效果远好过200条随手采集的杂乱数据。模型在数据里学的不是规则而是一个条件分布你给它看的分布越干净它学出来的行为就越稳定。每次新采集一批数据我都先花半小时回放清理再花半小时剪辑对齐这个投入在训练结果上的回报非常明显。7.3 先复现官方方案再做自己的改造最后一条经验是想劝大家别太心急。如果你第一次接触这套东西先把官方SO-100的3D打印件、舵机清单、接线图、默认配置文件按部就班复现一遍跑通一次完整的数据采集加训练加部署闭环。等你亲眼看到一只舵机机械臂自己学会抓取你才对整个系统有了真实的体感。到这一步之后再去改结构、换舵机、加相机、做自己的应用都来得及。盲目自定义只会让你分不清是我改坏了还是框架没配好排查成本成倍增加。最后再说一个我自己的小习惯给机械臂和所有配件都贴个标签舵机ID、电源电压、配置日期全写上。这套东西搁置两周再回来你会完全忘记当时的线序和配置标签能帮你省下大量重新排查的时间。从零到一的过程不容易但当你看到它独立完成第一次自主抓取的时候前面熬的每个夜都值了。