Dream-UMI 开发手记:硬件迭代与标定对比(原文存档)
存档说明
- 本文由网页抓取的纯文本整理而成。原文中以图片呈现的公式、表格数值、部分数据在提取时丢失,丢失处以〔数值丢失〕标注,请对照原文网页核对。
- 所有图片(3D 模型爆炸图、原型对比、误差分布图等)未保存,见原文。
- 原文:https://mp.weixin.qq.com/s/a7tDHln_5fR9xdG3Tkol8Q | 作者博客:https://www.ginokreis.com/blog/dream-umi
这是我在 ETH Zurich 的本科毕业论文项目,我正在为 TRLC-DK122 机械臂开发一套 UMI 设备,合作方为 Dream Machines。
- 参考论文:Universal Manipulation Interface: In-The-Wild Robot Teaching Without In-The-Wild Robots,arXiv:2402.10329。
- TRLC-DK1 的文档见官方页面。Dream Machines 研发机器人 AI,这类 AI 能够从示教与经验中学习,让制造企业无需定制专用设备,自主完成重复性作业的自动化。
目前我们采用遥操作采集数据。这意味着每一位数据采集人员都需要配备一台机械臂,该方案不具备可扩展性。此外,诸如打开自封袋、处理扎带、分拣螺丝这类精细运动任务,操作体验十分糟糕。UMI 正是为解决该痛点而生:它是机器人夹爪的手持复刻装置,操作人员直接使用它完成任务,同时设备上的相机与传感器记录数据,后续用于机器人训练。
但 UMI 会完全取代遥操作吗?遥操作数据来自真实机器人,与机器人本体特性完全匹配;而 UMI 数据由人手驱动生成,和机器人本体特性始终存在偏差。目前的思路是用 UMI 做预训练,再使用遥操作数据对策略做微调。
相关研究论文
硬件层面,现有论文主要围绕以下三个核心问题展开:
- 位姿如何追踪? 可选方案:SLAM、VR 头显、外部动作捕捉。
- 夹爪开合宽度如何追踪? 可选方案:ArUco 标记、旋转编码器。
- 整套系统是可移动 (mobile) 还是固定 (stationary)?
本项目借鉴 YUBI 的方案,采用 Meta Quest、磁性编码器,搭建可移动整套系统。
硬件
为最大限度缩小本体差异(embodiment gap),UMI 的相机观测视角应当和机器人保持一致。下文给出机器人末端执行器与我设计的 UMI 夹爪的 3D 模型;爆炸图中标注了关键设计改动。
DK1 末端执行器零件清单:
- AS5600 磁性编码器:测量夹爪钳口位置
- 轴承
- 相机底座:预留用于安装 ESP32 与 Quest 控制器的螺纹嵌件
- XIAO ESP32C6:读取 AS5600 编码器数据
- 夹爪钳口:新增转轴;新增用于安装的螺丝孔;弹性手指套筒可套在转轴上(图中未画出)
- 手部支撑座:符合人体工学造型;配有弹性手部绑带(图中未画出)
- 带滑块的直线导轨
- 安装基座:底部做切除处理,给手指留出活动空间;将电机安装座替换为轴承;增加橡皮筋挂钩
- 小齿轮:粘有 AS5600 配套磁铁
- Quest 安装座:用于位姿追踪;基于 YUBI 控制器安装座修改而来
- 齿条与钳口固定座:增加橡皮筋挂钩与走线槽;预留钳口安装用螺纹嵌件
UMI 旧版本(4 个早期原型中的 3 个)
- 控制器安装座:旧结构会造成工作时转动惯量过大;新版本握持手感大幅改善。未来可以进一步把控制器向手腕(旋转中心)方向移动,验证能否进一步优化握持体验。
- 手指转轴位置:把手指向钳口尖端靠近,可以实现更精细的控制。但该改动会让手指进入相机视场,该因素对数据质量的影响仍有待测试。
- 手部支撑座:YUBI 采用手握式握持方案,而我选用 Generalist AI 的绑带方案。初代原型虽然处理了尖锐边缘,但佩戴依旧不适。人体工学是一大开放性难题,不存在可以直接求解人体舒适度的解析方案。
- 橡皮筋:模型没有画出橡皮筋本体,但可以看到固定挂钩。最初参考 YUBI,单根橡皮筋布置在基座后方。该方案存在拉力角度缺陷:夹爪完全张开时,橡皮筋拉力几乎垂直于运动方向,助力效果极弱,还会干扰磁性编码器工作。新版本改为直线布放橡皮筋,修正拉力角度。橡皮筋会随使用老化,直线布放的结构未来可以直接替换为钢制弹簧。
人体工学设计
多项设计提升了 UMI 夹爪的握持舒适度:
- 手指套筒:在不使用传统握持姿势时,它是控制夹爪旋转的关键部件。
- 橡皮筋:手动张开平行夹爪会比较费力,手型偏小的用户感受会更明显。橡皮筋让夹爪默认保持张开状态,闭合夹爪需要施加的力很小。
- Quest 安装座:控制器本身重量不小,它的安装位置直接决定整机配重与转动惯量。
- 手部支撑座:舒适度主观差异大,是最难调优的零件。支撑座位置相比预期更靠下、偏离中心。该布局是为了给手指留出活动空间,同时会引导使用者采用俯视角操作姿态,该姿态更贴合真实机器人作业形态。
平放姿态 / 俯视角姿态:更低位置的手部支撑座会让 UMI 自然偏向俯视角作业姿态,和真实机器人的作业姿态更匹配。
未来展望(开放问题)
- 手握握持 vs 手部绑带:3D 打印测试 YUBI 夹爪原型后,本项目放弃手握握持方案。但针对当前这套平行夹爪硬件,还没有做二者的直接对照实验,该选型问题尚无定论。
- 采集操作控制逻辑:双手各握持一个 UMI 夹爪时,没有空余手指按压按键;脚踏板又会破坏整套设备的可移动性,该问题亟待解决。YUBI 的变通方案:依靠夹爪快速双击闭合动作触发录制。同时需要重新设计系统反馈通路——操作人员不会一直盯着屏幕,可以考虑触觉反馈或者 LED 指示灯。
- 非主观带来的手腕旋转:闭合平行夹爪时,人的手腕会自发产生小幅旋转;旋转夹爪机器人本体不会发生该现象。如果操作人员没有下意识补偿该旋转,录制得到的数据会教会机器人仅仅为了闭合夹爪就摆动机械臂关节。可以尝试修改手部支撑座来缓解该问题。
打开状态 / 闭合状态:仅夹爪闭合动作就会带动手腕旋转,在成像平面内旋转角度约〔数值丢失〕,该数值因人而异。
- 人的直觉逆解 vs IK 求解器:对于自由浮动控制器,标准 6-DOF IK 求解器输出的控制感受并不自然。Aurel Arnold 在他的博客中讨论过该现象(参见《Control that feels natural》),他的解决思路是把手腕位置和夹爪姿态解耦,我计划借鉴该思路。但人类手腕的物理位置和机器人腕关节并不重合。该物理偏移量在遥操作做相对运动时影响不大,但在世界坐标系下重建绝对位姿时会带来问题。
夹爪钳口位置读取
原始 UMI 方案依靠 ArUco 标记视觉读取钳口位置。该方案无需额外硬件,但追踪可靠性弱于物理编码器,因此目前绝大多数方案都选用编码器。我做了对照实验,量化对比两种方案的实际表现。
测试内容:已知钳口宽度下标定、一分钟自然抓取物体、夹爪快速往复开合、低光照场景测试。
AS5600 磁性编码器 vs ArUco 标记 — 对比小结
编码器更占优势:读数精度更高,不会出现数据丢失,为此增加硬件成本是值得的。
- 编码器:分辨率〔数值丢失:12 位编码器转动行程对应钳口行程〕,帧间抖动几乎为 0;主要误差来自机械回隙。
- ArUco 标记:抓取物体场景约 90% 帧可以识别标记;识别成功时精度约〔数值丢失,对比编码器〕。但快速开合、低光照条件下会大量丢失识别帧。
结论:虽然可以对 ArUco 方案做优化,但加装编码器属于一次性硬件投入,彻底消除光照依赖,避免后续一连串问题。
ArUco 标记摆放位置
测试了两种尺寸 ArUco 标记摆放方案(图 1)。靠内侧的标记(左图)会轻微失焦,但整体表现很好。如果调整位置让标记完全对焦,会造成观测视角陡峭、标记成像尺寸变小,追踪可靠性反而下降。纸质标记很难做到完全平整,大倾斜视角下读数误差会进一步恶化。
标定
- 简易标定:读取完全张开、完全闭合两个位置,中间做线性插值。闭合定义:钳口刚好互相接触,不产生形变。
- 高级标定流程:用卡尺设定至〔数值丢失〕、步长〔数值丢失〕的已知宽度,用 UMI 夹住卡尺,对采集到的读数拟合模型。分别对编码器、两套标记读数做拟合:标记间 3D 距离(需要相机模型)、标记像素距离(不需要相机模型)。每一类输入分别测试线性、二次、三次多项式拟合。
- 高级模型结论:编码器与标记 3D 距离用线性模型就足够;标记像素距离需要三次多项式。
已知钳口宽度下标定误差(RMSE / bias,具体数值丢失,见原文表格):
- 编码器:简易标定 / 高级标定
- 标记,3D 距离:简易标定 / 高级标定
- 标记,像素距离:简易标定 / 高级标定
经过高级标定后,像素距离方案精度可以和 3D 距离方案持平,因此不需要相机模型。后续将使用像素距离做结果评估。
误差小于〔数值丢失〕基本没有实际意义:人手操作卡尺夹紧钳口本身就达不到更高精度;橡胶防滑胶带形变、钳口微小形变带来的误差都会超过该量级。
测试结果核心统计量
标记读数减去编码器读数;使用像素距离 + 高级标定模型。
| 场景 | bias ± SD | 95% 帧取值区间 | 标记识别帧占比 |
|---|---|---|---|
| 自然抓取 | 〔丢失〕 | 〔丢失〕 | 90% |
| 夹爪快速往复开合 | 〔丢失〕 | 〔丢失〕 | 80% |
| 低光照 | 〔丢失〕 | 〔丢失〕 | 29% |
关键结论:
- 读数一致性:在同时识别到两组标记的 1798 帧数据中,95% 帧标记与编码器读数差落在〔数值丢失〕;平均偏差仅〔数值丢失〕,不存在固定偏移 bias。
- 相机时延:图像传到主机相比编码器数据存在延迟。把两组读数做时间对齐后,运动测试中标记与编码器读数匹配度最好;所有结果都做了该时延补偿。
- 抖动:编码器稳定性极高,帧间抖动最大〔数值丢失〕。设备静止时 ArUco 标记抖动〔数值丢失〕;钳口大开状态抖动最严重。运动状态下抖动随开合速度上升:约〔数值丢失〕;大于〔数值丢失〕约〔数值丢失〕。
标记读数统计(1798 帧):
- 1461 帧(〔范围丢失〕)
- 279 帧(〔范围丢失〕)
- 56 帧(〔范围丢失〕)
图 2:横坐标 = 标记读数 − 编码器读数(单位〔丢失〕)。纵坐标 = 闭合百分比(0 完全张开,100 完全闭合)。含按开合速度(str/s,一次 stroke = 全开→全闭完整行程)拆分的误差分布。
视觉追踪最大短板是大量帧完全识别不到标记。66 秒自然抓取测试中 10% 帧无标记读数;高速开合场景丢识别最严重:速度低于〔数值丢失〕几乎全部帧识别成功;速度大于〔数值丢失〕仅 9% 帧识别成功。
图 3:夹爪开合速度分布(str/s)。一帧有效标记读数 = 两个标记均被成功检测。
小结
虽然误差、90% 识别率仍有优化空间,但视觉追踪方案永远无法达到物理编码器的原生精度。另一方面编码器带来大量额外硬件:齿轮齿条、轴承、磁铁、AS5600、线缆、ESP32、USB-C 线材,还需要处理一路额外数据流。但硬件装配完成后,读数表现十分稳定。
最终选型结论:采用编码器。
使用 AS5600 编码器踩坑总结
- 磁铁尺寸很小:直径〔数值丢失〕、厚度〔数值丢失〕。最初遇到周期性信号跳变、噪声、其他磁铁带来的干扰。解决办法:把磁铁尽量贴近芯片,实际间距小于〔数值丢失〕。数据手册标称间距〔数值丢失〕,使用的磁铁磁力偏弱,因此需要尽可能靠近;选用磁力更强磁铁可以增大安装间距。
- AGC 寄存器:芯片的自动增益控制,取值范围 0-128(3.3V 供电),表征信号放大倍数。测试读数在 3-11 之间,随朝向略有变化。物理上已无法进一步缩小间距;读数存在轻微不对称,大概率来自磁铁中心偏移,影响可以忽略。
- 旋转行程:小齿轮总转角约〔数值丢失〕。如果机构转动超过 360°,软件层面必须处理 12 位编码从 4095 溢出回到 0 的回绕问题;最好从机械层面直接避免超过一圈旋转。
Quest 应用程序
参考 YUBI 方案,在 Unity 中开发自定义 Quest 应用读取控制器位姿。
开发流程:
- 下载 Unity Hub,安装 Unity 6.3 LTS,同时安装 Android Build Support(OpenJDK、Android SDK & NDK)组件。
- 在 Unity 包管理器从资源商店导入 Meta XR All-in-One SDK;切换构建目标平台为 Android,运行 Meta 的 Project Setup Tool。
- 注册 Meta 开发者账号;在 Meta Horizon 手机 App 开启设备开发者模式;HMD 通过 USB 连接电脑,头显内确认设备授权。
- 使用 Claude 编写 Unity 编辑器脚本,由 Unity 完成应用构建。
- 在 Unity 内填入接收端 IP 地址,点击「Build and Run」。
应用运行后,Quest 直接通过 UDP 端口向 Mac 电脑推送数据。整套方案基于 Wi-Fi 推流,需要填写 IP 地址;这是临时设计选择。
传输链路三类可选方案:
- TCP over ADB via USB
- TCP over ADB via Wi-Fi
- UDP via Wi-Fi
两种协议都传输控制器快照数据包,但行为不同:TCP 会确认每一个数据包,丢包重传,保证顺序;UDP 只负责发送数据包,丢包不会重传、不会等待。
虽然 USB TCP 更适合最终成品系统,但选用 Wi-Fi UDP 方案:Mac 电脑 USB 接口数量有限;UDP 调试实时性更好,不会因为丢包阻塞等待。
标定
Quest 输出的是控制器自身的位置与姿态;而机器人需要 UMI 指尖(工具坐标系)的位姿。控制器坐标系与工具坐标系刚性固连,二者由一组固定平移 + 旋转变换关联。**标定就是求解该变换矩阵。**该变换不能直接从 CAD 模型得到:控制器实际装配位置存在偏差;3D 打印本身也会引入制造误差。
标定至关重要:控制器坐标原点和指尖存在距离,会带来力臂效应。本设备中,工具 X/Y/Z 轴仅〔数值丢失〕旋转误差,就会让指尖记录位置分别偏移〔数值丢失〕。平移误差会 1:1 传递给钳口中心点。
现有多种标定方法,本质都是求解这个未知坐标变换。没有公认最优方案,因此对比多种主流方法。公开文献中四类主流方案:
- ChArUco 棋盘手眼标定:移动夹爪同时拍摄 ChArUco 棋盘;配对相机、控制器运动求解相机-控制器之间偏移(需要相机内参)。
- 机械臂法兰手眼标定:将控制器固定在机械臂末端,机械臂带动控制器运动。机械臂精确输出末端位姿;对比头显输出位姿,解算控制器偏移。
- 支点标定 (Pivot calibration):设备绕空间一个固定点旋转,重建旋转中心坐标。
- 手动方案:手动 AR 叠加对齐(头显内渲染坐标系,人工对齐实物,此时位姿作为标定结果);定位底座(整套 UMI 放置定位工装,固定唯一位置姿态;按键触发记录参考位姿)。
机械臂法兰标定、定位底座都需要额外硬件;AR 叠加人工对齐精度不足,因此舍弃这三类。新增两种自研标定方案,最终参与对比共四种方法:
- ChArUco 手眼标定(附带求解相机内参)
- 支点标定(结合多个支点联合求解)
- 重力姿态标定(自研):将 UMI 三个法向量已知的平面平放在水平台面,读取控制器 IMU 重力向量;仅求解旋转部分。
- Quest-标记标定(自研):在 UMI 本体粘贴 CAD 坐标已知的 ArUco 标记;头显相机拍摄标记,建立标记与控制器之间变换。
相机内参标定
手眼标定需要预先求解相机内参(焦距、畸变等),使用 ChArUco 棋盘标定,该方案成熟可靠。
OpenCV 提供全部工具;但需要针对大视场镜头选型镜头畸变模型。标准针孔模型完全不适用该超广角镜头。镜头确切视场未知,因此同时测试:
- fisheye(Kannala-Brandt,适配最高视场〔数值丢失〕)
- omnidir(Mei,适配大于〔数值丢失〕视场)
只有 omnidir 模型收敛效果良好,由此推断相机视场超过〔数值丢失〕;实测视场〔数值丢失〕。作为交叉验证,同时测试 Double Sphere、EUCM 模型,在成像覆盖范围内结果与 omnidir 差异约〔数值丢失〕。相机相关结果全部使用 omnidir 模型。
标定可复现性测试(统计重投影误差、焦距波动范围):
- 直接对比原始内参参数没有意义:不同参数之间可以互相补偿,得到几乎一样重投影与焦距。
- 每组标定采集 30 张不同角度、距离图像,一共 10 组。重投影 RMS〔数值丢失〕;轴上焦距〔数值丢失〕。OpenCV fisheye 模型处理同样图像会报错或不收敛,印证视场大于 fisheye 适用范围。
- 额外 10 组标定:只改变平移距离,棋盘相对相机姿态固定不变。虽然重投影 RMS 甚至更低,但轴上焦距剧烈浮动〔数值丢失〕。仅仅依靠低 RMS 会误判标定成功。
- 最终标定一次性拟合全部 300 张图像。
omnidir (Mei) 标定参数:轴上焦距、畸变系数、视场约〔数值丢失〕(见原文表)。 标定过程中必须充分改变棋盘与相机之间姿态,只改变距离会得到错误内参。
手眼标定
移动 UMI,相机拍摄 ChArUco 棋盘,同步记录 Quest 控制器位姿。运动需要绕两个不平行的轴旋转,才能同时求解平移与旋转。理论上 3 组快照足够;实际采集大量样本平均抑制噪声。
- 10 轮标定,每轮 20 组快照,OpenCV 默认 TSAI 求解器。
- 评估指标:关注最差单次标定结果而不是平均值。使用参数 bootstrap 蒙特卡洛仿真,估计 99 分位误差半径。因为没有绝对真值,用 10 次标定的均值代替真值;仿真评估由此引入的不确定性。该仿真无法处理 Quest 追踪误差、3D 打印偏差这类全局固定 bias。
- 仿真结果:单次标定 99 分位误差平移〔丢失〕、旋转〔丢失〕;10 次平均后平移〔丢失〕、旋转〔丢失〕。
- 平移偏移量相对相机光学坐标系;光学坐标系原点位置未知,需额外标定。采用贴齐标定:UMI 平面完全压紧贴在 ChArUco 棋盘,测得光学中心距贴齐平面〔丢失〕;光轴和平面法向夹角〔丢失〕。设计理论预期夹角〔丢失〕。
支点标定
让 UMI 绕空间某固定点旋转,同时记录控制器位姿,可解算该支点在控制器坐标系下的坐标(平移量)。使用 3 个及以上独立支点,可同时求解控制器-工具坐标系之间旋转。
- 夹爪角点压在桌面防滑胶带上,尽量保证角点不动,尽可能大角度旋转设备;选 5 个不同角点;整套标定重复 10 次。
- 旋转幅度至关重要,越大越好;三个主轴平均转动幅度〔数值丢失〕。
- 仿真:单次标定(全部 5 支点)99 分位误差平移〔丢失〕、旋转〔丢失〕;10 次平均后〔丢失〕。绕工具 X 轴方向旋转精度最差,支点之间该方向间距仅〔丢失〕。
- 各支点之间求解得到距离相比 CAD 模型全部偏小约〔丢失〕;角点实际陷入胶带表面约〔丢失〕,来自 3D 打印公差与胶带形变。
- 支点完全靠人手保证不动,操作繁琐,会引入难以解释的异常结果,但该方法潜力很大。后续可设计专用工装,支点在三个维度拉开足够距离,采用尖锐木螺钉。
重力姿态标定
把 UMI 上三个法向已知的平面放置在校准水平台面上;水平仪确认桌面水平误差小于〔丢失〕。使用三个分别垂直于工具 X/Y/Z 轴的平面。求解姿态最少需要两个轴,第三个轴提升精度,同时作为校验。
- 仿真:单次标定旋转 99 分位误差〔丢失〕;10 次平均后〔丢失〕。
- 正交性校验:X-Y 正交偏差〔丢失〕、Y-Z〔丢失〕、X-Z〔丢失〕,完全落在 3D 打印制造公差范围内。
Quest-标记标定
针对该标定开发 Quest 自定义 App。整套标定中 UMI 设备固定不动,移动 HMD。UMI 本体粘贴 6 个 CAD 坐标完全已知的 ArUco 标记。头显相机环绕设备多角度拍摄标记(头显内参预先标定完成),同时控制器持续输出位姿;联合拟合求解控制器-工具变换矩阵。
- 10 轮标定,每轮约 37 组拍摄;每组含头显左右两张图像,每轮平均约 176 次标记检测。拟合平均重投影误差〔丢失〕。
- 仿真:单次 99 分位误差平移〔丢失〕、旋转〔丢失〕;10 次平均后〔丢失〕。
标定结果汇总
(各方法 99 分位误差、控制器原点坐标、旋转欧拉角 ZYX 的完整数值表见原文,提取丢失。)
核心发现:
- 支点标定平移精度表现优秀;重力姿态标定旋转精度表现优秀。所有方法 10 次结果取平均后都可以得到不错精度。
- 核心问题:不同方法之间的互相偏差大于各自统计离散范围。
- 平移:手眼与 Quest-标记互相偏差仅〔丢失〕;支点标定和前两者相差约〔丢失〕。
- 旋转:Quest-标记与重力姿态相差〔丢失〕;手眼相比其他方法偏差约〔丢失〕;支点介于中间。
- 手眼一部分偏差来源:转换到工具坐标系时采用设计理论光轴倾角,贴齐标定实测存在偏差。其余偏差大概率来自光轴不完全垂直平面,以及 3D 打印制造公差。
- 最终控制器变换矩阵选用 Quest-标记标定输出:虽然单次平移 99 分位误差是几组中最大,但它具备交叉验证一致性——平移结果被手眼标定佐证;旋转结果被重力姿态标定佐证。
可视化校验结果
借助 Claude 读取 Unity SDK 内控制器网格与坐标系,在 CAD 中复现控制器模型,可视化不同标定求解得到坐标系位置。
- 四组视角渲染 CAD 模型,和实物控制器照片对照:视角 1、4 观察侧边按键在基座内的位置;视角 2、3 顺着控制器插入安装座方向观察。
- 对比方案:前三行分别单独使用 Quest-标记、手眼、5 支点标定;后三行保留各方法平移,旋转复用重力姿态结果。
- 没有任何一套标定可以在全部 4 个视角和实物完全吻合。Quest-标记标定、以及”手眼平移 + 重力姿态旋转”组合在视角 1、4 匹配;支点标定在视角 2、3 匹配;原始手眼标定全部视角都对不上。
- 可视化对比也无法选出绝对最优方案,因此选用数据分析层面综合最优结果。
下一步工作
后续几个里程碑并行推进:
- 首先在遥操作数据集上训练 ACT(Action Chunking with Transformers)与 DP(Diffusion Policy),熟悉模仿学习,建立基线;
- 基线跑通后开始训练 UMI 采集数据对应的策略;
- 采集数据的同时迭代优化采集系统与后处理 pipeline。
里程碑 2 计划:
- 将 Mac 接收端替换为背包式便携工作站;
- 完善采集过程的操作人员控制逻辑与状态反馈;
- 搭建后处理 pipeline,保证输出数据可用、高保真;
- 进一步量化 UMI 整套设备精度:可选用动作捕捉系统;或者采集 UMI 轨迹,在真实机器人上 rollout 复现,测量复现误差。