ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

UMI机器人复现全攻略:从硬件选型到数据同步避坑指南

UMI机器人复现全攻略:从硬件选型到数据同步避坑指南 1. 复现UMI之前先把这几个概念彻底搞明白先从我自己踩过的坑说起。去年我刷到斯坦福UMI项目的演示视频时第一反应是这不就是把GoPro绑在棍子上吗直到我真正动手复现才发现这个项目最值钱的地方根本不在硬件本身而在数据采集的逻辑设计。如果你也想复现这个项目千万别急着下单买零件先把UMI的核心设计思路吃透否则后面调数据同步、对帧率的时候会非常痛苦。UMI全称是Universal Manipulation Interface中文可以理解为通用操作接口。它解决的核心问题很简单怎么让机器人学会抓取这个动作。传统做法是人工示教拿示教器一点点调机械臂的姿态但这种方式效率极低而且调出来的轨迹泛化能力很差。UMI换了一个思路——它干脆放弃让机器人直接学习而是先做一套手持的、轻量化的采集设备让人类拿着它像用夹子一样去执行抓取动作同时把整个过程录下来。这套人类演示的数据经过处理后再用来训练机器人的策略网络。简单说UMI是一套先采集、后训练的中间件方案GoPro和3D打印夹爪只是这套方案的载体。这个思路最聪明的地方在于它把机器人学习抓取这个复杂问题拆解成了人类演示采集和策略学习两步。第一步是体力活第二步是算法活。斯坦福团队在UMI项目里开源了硬件图纸、固件代码和算法框架等于把算法活也给你打包好了你只需要把硬件做出来、把数据采好就能复现一套能学会抓取的机器人系统。这也是为什么这个项目在GitHub上能大火——它把机器人的门槛从会写强化学习代码降到了会3D打印和拧螺丝。不过我必须泼一盆冷水UMI的复现难度不在硬件在数据质量。很多人在B站上看完演示视频就热血沸腾地开打结果打出来的夹爪装不上GoPro、编码器数据不同步、采集的视频和夹爪开合数据对不上最后只能放弃。这些坑我在复现过程中几乎全踩了一遍这篇文章就是把我的踩坑过程完整地捋一遍包括硬件怎么选、打印参数怎么调、数据同步怎么做、哪些环节必须用原版方案、哪些环节可以低成本替代全部给你讲透。2. 硬件选型逻辑为什么是GoPro配3D打印夹爪而不是其他方案2.1 GoPro在这个项目里不可替代的三个理由正式讲选型之前我先说结论GoPro在这个项目里几乎不可替代不要用运动相机以外的设备凑合。这不是因为我收了大疆或者GoPro的钱而是UMI的算法对采集设备有硬性要求。首先UMI的策略学习用的是视觉动作联合训练视频数据的质量直接决定策略能不能收敛。GoPro的超广角镜头可以提供大约170度的视场角人在手持设备演示抓取动作时手部运动范围很大如果视场角不够画面里很容易丢失关键信息。我试过用普通手机摄像头替换结果因为视角太窄演示过程中夹爪经常跑出画面采集出来的数据基本没法用。其次是固定焦距。UMI的姿态估计算法依赖相机内参标定GoPro的镜头是定焦设计焦距恒定后期标定一次就可以长期使用。而普通手机摄像头通常带有自动对焦功能焦距不断变化内参也跟着变这会让后续的姿态解算结果乱七八糟。UMI的算法设计恰好是围绕固定内参这个前提展开的所以选型上必须用定焦相机。第三个原因是帧率和快门。GoPro可以稳定输出60fps甚至120fps的视频流配合较高的快门速度采集快速抓取动作时不会出现严重的动态模糊。这个特性在数据采集阶段特别重要因为机器人策略学习需要从视频中提取夹爪和物体的精确位置一旦画面模糊标注数据就废了。UMI团队在官方文档里推荐GoPro Hero系列不是没有道理的它几乎是为这个应用场景量身定做的。2.2 3D打印夹爪的力学设计与材料选择夹爪是另一个核心部件它承担着双重任务既是执行抓取的末端工具又是编码器数据的载体。斯坦福开源的夹爪设计图纸我仔细拆解过它的结构并不复杂本质是一对平行夹爪通过齿轮齿条结构把旋转运动转换成直线运动夹爪的开合角度由编码器记录。这个设计非常巧妙因为平行夹持方式在抓取规则物体时稳定性极高而且能适配绝大多数桌面场景。打印材料方面我强烈建议用PETG而不是PLA。原因很简单PLA虽然好打、便宜但刚性和耐疲劳性不够。夹爪在反复开合过程中会承受循环应力PLA材料在受力后容易发生蠕变导致夹爪间隙越来越大最终影响抓取精度。PETG的韧性好很多而且打印时不容易翘边缺点是稍微贵一点但对于这种小件来说成本几乎可以忽略。我自己的夹爪就是用PETG打的连续用了一个多月至今没出现明显的变形。如果你要抓取的物体比较重超过500克可以考虑把夹爪手指部分用碳纤维板代替但主体结构仍然用PETG打印就行。碳纤维板的手感更接近真实工业夹爪的刚性但切割和打孔会麻烦一些。还有一个小细节夹爪的接触面建议贴上硅胶垫或者3M防滑贴否则抓玻璃瓶、金属件这类光滑表面时很容易打滑。斯坦福官方图纸里没有这个设计这是我实测后加上的改进效果立竿见影。2.3 编码器、舵机与主控选型省钱可以但别在这些地方省钱除了GoPro和夹爪主体整套系统还需要以下几个电子部件编码器用来检测夹爪的开合角度UMI官方用的是AS5600磁编码器便宜十几块一片、精度够用12位分辨率、支持SPI和I2C输出。我试过用其他品牌的编码器替代有些国产编码器在高速转动时会出现丢步数据会突然跳变后期处理时很麻烦。所以编码器建议直接用AS5600这个钱不要省。舵机用来驱动夹爪开合。UMI原版用的是LX-15D总线舵机支持角度反馈但价格不便宜。我实测用过SG90这类模拟舵机替代能转但精度差、力度小抓稍微重一点的物体就吃力。如果你只是做桌面级的轻量抓取演示SG90可以凑合但如果想认真采集数据建议至少用DS3218这个级别的数字舵机。主控UMI原版用Arduino系列因为它稳定、简单不需要额外跑操作系统。我自己用的ESP32主要是想顺便连WiFi做无线数据传输但如果你不需要无线功能直接用Arduino Nano或者Arduino Due就可以代码基本可以直接编译烧录。注意Arduino Due是3.3V逻辑电平AS5600可以直接供电如果是5V的板子需要加电平转换否则可能烧编码器——这个我后面还会详细讲。下表是我实际使用的硬件清单和大概价格供你参考部件型号/规格数量预算元备注视觉传感器GoPro Hero 8或91600-1000二手即可磁编码器AS5600115必须用原版舵机DS3218180舵机替代方案主控板Arduino Due170或ESP32锂电池3S 2200mAh180给舵机供电降压模块5V/3A110给主控和编码器3D打印件PETG若干30全套约250克防滑贴硅胶垫若干10提升抓取力螺丝/轴承M3套件若干30标准五金件其他拨码开关/导线若干20备用总体下来一套完整的UMI硬件成本大概在1000元左右。对比斯坦福原版那套全套方案光GoPro和舵机就上万这个方案性价比已经非常高了。3. 3D打印环节参数、工艺与公差控制决定你的夹爪能不能装起来3.1 打印参数推荐不用盲目追求精细但要保证强度拿到图纸之后很多人第一件事就是直接丢进切片软件开始打结果打出来的零件要么公差太大装不进去要么强度不够用两天就断了。3D打印环节的核心不是打得精细而是保证尺寸精度和层间结合力这两个指标直接决定夹爪能不能顺利装配、能不能长时间使用。我用的打印机是普通的Ender 3系列切片软件是Cura。简单说一下我的参数配置供参考喷嘴温度PETG建议240°CPLA建议210°C。温度太低层间结合力不够太高容易拉丝。热床温度PETG建议75°CPLA建议60°C。PETG在无加热床的情况下容易翘边务必配合胶带或PEI贴纸使用。层高0.16mm到0.2mm之间。层高越小表面越细腻但打印时间会翻倍。夹爪这种功能性较强的零件用0.2mm就够了表面粗糙一点反而增加摩擦力。壁厚至少3层墙约1.2mm。夹爪的受力部件壁厚不够容易掰断宁可多打几层也不要省料。填充率主体结构40%夹爪手指部分60%。舵机支架、编码器支架这类承载部件建议提高到80%虽然费一点料但强度提升非常明显。要特别提醒一个关于PETG打印的细节打印速度放慢一点优先保证冷却。PETG和PLA不同它的熔体粘度高如果打印速度太快挤出的料来不及与下层结合层间容易产生缺陷。我的建议是外壁速度40mm/s内壁速度50mm/s如果切片软件支持外壁先打的选项一定要打开这样外表面质量和尺寸精度会好很多。3.2 公差控制尺寸模型是对的为什么还是装不上这是我在复现过程中遇到的最头疼的问题。斯坦福开源的模型在SolidWorks里看起来严丝合缝但打印出来之后轴承孔、舵机轴、齿轮齿这些都是差不多但差一点的状态装的时候要么紧得敲不进去要么松得晃来晃去。原因其实不复杂FDM打印有热收缩补偿喷嘴挤出的料比理论尺寸大一点特别是内孔这种悬空特征容易因为S凹现象导致孔径偏小。解决方法很简单分两步走打印一个公差测试块。先在切片软件里分别放大孔径0.2mm、0.4mm、0.6mm打印三个测试孔然后试着插入M3螺丝和608轴承看哪个孔径配合最顺畅。不同打印机、不同材料的收缩率差异很大这一步千万别跳过。调整切片软件的孔径补偿参数。Cura里叫Hole Horizontal Expansion建议设置为0.2mmPrusaSlicer里叫XY Size Compensation建议设置为-0.1mm注意负值。这个参数就是专门用来补偿内孔收缩的调到合适值之后内孔会变大0.4mm左右基本能满足M3螺丝的滑动配合。如果你的打印件齿轮啮合太紧可以用美工刀或者小锉刀稍微打磨一下齿顶。注意不要磨齿廓只磨齿顶和齿根的交界处否则齿轮的啮合会变得不顺滑。做这一步的时候耐心一点边磨边试磨多了齿轮就废了。3.3 支撑结构的处理哪些地方必须加哪些地方加了反而糟糕UMI图纸里有一些悬垂结构比如舵机安装座、编码器支架的底面这些位置直接打印会出问题。我建议按以下规则来必须加支撑的位置悬垂角度超过45°的凸台、横跨的桥接结构。这类支撑加上之后零件底面的悬空部分才能保证几何尺寸。不建议加支撑的位置齿轮齿面。支撑和齿面粘连后剥离支撑的时候很容易把齿刮出毛刺严重影响啮合。正确做法是把齿轮倒过来打让齿面朝下贴在打印平台上这样可以完全避免齿面出现支撑痕迹。支撑的分离设置用线形支撑更多用于PLAPETG建议用树状支撑因为PETG和普通支撑的黏附力更强树状支撑更容易拆掉。拆支撑的时候用斜口钳从接触面积最小的地方下手避免在表面留下难看的疤痕。如果你用的打印机支持可溶性支撑那就更省心了但一般入门级机器用不上这个功能。总之支撑处理没有什么魔法就是多试几次找到适合自己机器和材料的参数组合。4. 从零件到整机装配顺序和接线细节装错一步就要返工4.1 装配顺序先干装配再上电最后再装GoPro零件打印好、处理完支撑之后下一步就是装配。这里我强烈建议你按照先机械、再电子、最后再装相机的顺序来这样每一步排查问题都比较容易定位。第一步装夹爪主体。把左右夹爪、齿轮齿条、轴承全部按图纸装好注意轴承压入孔位时不要用蛮力可以先用3D打印的压筒配合台虎钳压入直接敲打容易损坏轴承。装好后手动拨动齿轮检查夹爪是否开合顺畅如果卡滞先检查齿轮啮合是否过紧松一下轴承座螺丝再试。第二步装编码器和舵机。AS5600编码器需要固定在夹爪的旋转轴上编码器的磁铁要贴合芯片中心点间隙控制在1mm以内否则读数会漂移。固定舵机时注意舵机的输出轴和齿轮轴要对齐否则舵机转动时负载会异常增大容易烧舵机驱动板。装好后先给舵机通电用最简单的PWM测试代码让舵机缓慢转动观察夹爪是否能平滑开合。第三步固定GoPro。GoPro的安装架图纸里有打出来之后用GoPro原装底座或者3D打印的卡扣固定在支架上。这里要特别注意相机的朝向必须保证镜头中心和夹爪中心在同一垂直平面内否则采集到的画面会出现很大的视角偏差。固定的牢固程度也很关键可以在接触面贴一层1mm厚的EVA泡棉既能防滑又能缓冲震动避免剧烈动作时相机松动。4.2 电源和接线的几个雷区我烧坏了两块主控板后才总结出来的这一节我要重点讲因为电路部分是我踩坑最惨烈的地方前前后后烧了两块Arduino Due和一块ESP32都是因为接线细节没处理好。第一个雷区是主控板供电和舵机供电没有隔离。UMI项目里舵机是大功率部件启动瞬间电流可能冲到2A以上如果舵机和主控板共用一组电源舵机一启动电压就被拉低主控板直接重启数据全部丢失。正确做法是舵机单独用3S锂电池供电11.1V主控板和编码器用降压模块降到5V供电两组电源的地线在末端单点连接不要并联。这样即使舵机电流拉胯主控板的供电也不会受影响。第二个雷区是编码器供电电压不匹配。很多接线教程里直接让AS5600接Arduino Due的3.3V这是没问题的因为AS5600支持3.3V供电。但如果你为了图方便把编码器接到了5V供电而它的I2C输出电平是3.3V5V供电时输出脚电平会拉高到5V左右直接灌进Arduino Due的3.3V引脚运气好还能挺住运气差就把板子烧了。另外注意AS5600的VCC和GND之间必须加一个0.1uF的陶瓷电容否则上电瞬间的浪涌电流很容易打坏芯片。这个电容我一开始也没加最后编码器读数不稳定加了电容以后才正常。第三个雷区是舵机信号线的地线。舵机信号线虽然只有一根橙色线接到主控板但信号参考地必须和主控板的地共地否则舵机方波信号会产生振铃舵机就会抖动甚至失控。很多新手只接信号线、不接地线舵机乱转的时候还以为是程序问题其实纯粹是电气问题——这类问题排查起来非常费时间。5. 固件、数据同步与GoPro参数设置数据采集的核心也是最大的坑5.1 固件烧录和跑通Demo先把官方代码跑起来再根据自己的场景去改UMI项目在GitHub上开源了固件代码主要是Arduino等主流的MCU程序。拿到代码之后我建议你的流程是先原封不动地烧录一份跑通官方Demo再说。为什么强调先原封不动跑通因为很多人一上来就想改代码适配自己的环境结果代码报错了都不知道是环境问题还是改动引入的问题。我是这样操作的先用Arduino IDE打开官方固件选择正确的开发板型号我用的Arduino Due选Arduino ARM32位开发板类型确认端口识别正常后直接烧录。烧录完成之后打开串口监视器波特率设为115200这时候你会看到类似ATCMD的初始化输出以及编码器角度、舵机状态的信息。如果串口窗口有输出说明主控板、编码器、舵机的硬件链路已经通了接下来才是调数据的阶段。需要特别提醒的是不同版本的Arduino IDE对Arduino Due的支持略有不同。建议使用Arduino IDE 1.8.19版本最终经典版新版的IDE在我的实测中反而出现过上传失败的问题。如果你用的是ESP32还需要先安装ESP32开发板支持包然后在开发板管理里选配正确的型号。跑通Demo之后你可能会发现编码器数据不是0到360度平滑变化而是有跳变——这在AS5600上很常见因为它是一个磁编码器磁铁的安装偏心或者间隙过大都会导致数据跳变。解决办法是先重新安装磁铁确保磁铁和芯片的中心对齐然后用官方软件或者写一个简单的校准程序让夹爪从完全闭合到完全张开走一遍记录最大值和最小值再映射到0-100%的开合度区间而不是直接用原始角度值。5.2 GoPro的采集参数不是拿起来就拍这几个设置必须改GoPro的视频采集参数对后续数据质量影响巨大我在第一次采集数据时就是直接用的默认参数结果后期对齐同步的时候生不如死。现在把我的推荐参数列表贴出来你可以直接照着改视频分辨率2.7K30fps或60fps。2.7K足够了4K虽然更清晰但文件体积和后期处理压力都变大30fps以上的帧率才能保证动作稳定。镜头一定要设置为标准模式不要用SuperView超广角变形太严重近距离抓取时物体会被拉得面目全非。防抖关闭。防抖虽然能稳定画面但它会裁切画面改变相机内参对后续姿态解算非常不友好。尽量保持手持稳定或者直接固定在一个轻便的稳定器上不要让GoPro自行裁切。ISO上限设为400。光线充足的情况下ISO越低画质越好噪声越小。快门速度自动即可但要注意保证画面亮度不要太暗。如果你在室内光线不足可以考虑补一盏LED灯否则画面噪点会让后续检测算法崩溃。这些参数设置好之后你采集出来的视频几乎可以直接用不需要做太多后处理。5.3 数据同步视频和夹爪开合数据对不上是很多人的终极噩梦这是整个UMI复现项目里最大的一个坑也是我在踩坑之后才彻底弄明白的环节。UMI的训练数据要求视频帧和对应的夹爪开合角度、姿态信息必须时间对齐否则训练出来的策略学到的是时间和动作错位的错误映射。具体来说数据同步的核心逻辑是这样的GoPro录制视频时帧率是固定30fps但通过串口从主控板传回来的编码器数据的采样率可能是50Hz甚至100Hz两者的时间基准完全不同。如果不做处理你拿到的就是一个帧率为30的视频流和一个乱序的传感器数据流根本没法对齐。斯坦福官方提供了一套基于时间戳的同步方案我在这里把核心思路拆分一下启动前先做时间对齐。在开始录音前先录制3秒左右的静止画面同时记录编码器数据这段静止数据是用来做时间同步的锚点后续可以把两路数据按这个锚点对齐。记录系统时间戳。编码器数据从串口读取后直接打上当前Unix时间戳GoPro的视频帧也尽量打上录制开始时的时间偏移。之后在算法里将两者按时间戳对齐。插值处理。由于视频和编码器数据的帧率不一样需要把编码器数据按视频帧的时间做插值生成每一帧视频对应的夹爪开合角度。这一步可以简单用线性插值精度基本够用。如果你觉得上面的流程太麻烦还有一个取巧的办法把视频帧率调到和编码器采样率一致比如把GoPro帧率设为25fps编码器采样率也设为25Hz同时用一个外部触发信号同时打点这样两路数据理论上就是对齐的。但实测下来这种同频方案有风险——因为两路时钟还是有微小漂移时间长了仍然会错位。所以还是老老实实用时间戳方案吧虽然前期多花点功夫但数据质量有保障。6. 避坑指南完整排查链路从采集失败到顺利训练的每一步6.1 症状一夹爪开合不顺畅数据有跳变这个症状我经历过好几次每次排查链路都差不多分享一个比较标准的排查顺序第一步先手动拨动夹爪看机械结构是否卡滞。如果不卡滞说明机械没问题问题在电子端。如果卡滞优先检查齿轮啮合是否过紧、轴承是否安装到位、螺丝是否过拧导致零件变形。第二步查看编码器原始输出。用串口工具打印原始数据如果数值在静止状态下也有漂移说明编码器磁铁位置不对或者供电不稳定重新校准安装。第三步检查舵机能否带动夹爪。把舵机从机械结构上拆下来单独通电转动看是否平滑。如果舵机抖动或者无力说明供电电流不够或者舵机本身坏了。这一步可以快速定位机械卡死还是舵机没劲。6.2 症状二采集的视频画面模糊无法用于姿态估计视频模糊通常有三个原因第一个是对焦失败但我用的是定焦GoPro所以排除第二个是快门速度太慢导致运动模糊解决办法是按我之前推荐的参数把ISO和快门调快第三个是镜头起雾或者有污渍这个在室内外温差大的环境下常见用防雾片或者镜头布处理。如果画面不模糊但姿态估计出来的夹爪位置抖动很大那大概率是GoPro的防抖没有关闭。防抖会动态裁切画面导致相机内参不断变化姿态解算结果就跟着抖。关闭防抖后抖动问题基本能解决。6.3 症状三数据采集好好的但训练出来策略根本不工作这个问题最隐蔽。如果你的数据和模型都没问题但训练出来的策略在实际使用中完全不行那多半是数据分布与测试环境不匹配。举个例子你训练时数据都是在桌子上采集的但测试时你换了一张不同颜色、不同材质的桌面模型对环境的泛化能力不够就会失败。解决思路是采集数据的时候尽量覆盖不同的光照环境、桌面纹理和物体位置。这不是程序问题是数据策略问题很多人会在这一步卡很久。6.4 避坑清单总结把这些要点贴在墙上能少烧一半的时间易错点具体问题排查方向解决建议供电不隔离舵机启动时主控重启电压被拉低舵机单独供电共地电平不匹配编码器接5V烧板I2C电平不匹配统一3.3V供电相机参数不对姿态解算抖动防抖未关闭关闭防抖、定焦模式数据不同步训练效果差时间戳未对齐用锚点时间戳同步打印公差过大零件装不上孔径偏小做公差测试块夹爪打滑抓取失败接触面摩擦力不足贴硅胶防滑垫7. 复现成功后的心得UMI到底是什么以及还能怎么玩东西做出来之后你会看到这套系统最迷人的地方——人类演示数据可以被直接转化为机器人的动作策略。不再需要写复杂的运动规划代码不需要昂贵的力传感器只需要让一个人拿着这套设备做几次演示机器人就能学会模仿。这本质上是在用人类的行为数据替代手工编程的控制逻辑是具身智能领域非常值得深入的一个方向。我用了几个星期的时间真正把这套系统玩转最深刻的感受是UMI的最大价值不是给你一个能跑的机器人而是一个能跑的学习框架。你可以用它采集不同物体的抓取数据然后训练策略去抓取新的物体可以把GoPro换成更高分辨率的设备提升数据质量还可以把夹爪换成吸盘、铲子或者别的末端执行器扩展操作类型。这套系统的开放性非常好适合做各种二次开发的实验。最后分享一个我个人的扩展玩法我把UMI采集的数据接入到一套机械臂仿真环境里在仿真中先训练一个简单的抓取策略再把策略迁移到真实机械臂上。虽然中间还要解决仿真和真实的差距问题但UMI提供的数据或者说是人类演示数据采集方案让这个过程比传统的遥操作示教高效太多了。如果你对机器人学习或者具身智能感兴趣UMI绝对是一个值得花时间复现的项目。动手的时候别怕踩坑我上面写的这些问题大概就是我复现过程中遇到的全部坑了。你提前避开了就能把时间花在真正有意思的实验上——比如让你的机器人学会抓起一个纸杯然后放到另一个位置。就这样一个动作等你真的跑通的时候成就感会非常大。
返回列表