人形机器人抓取视觉链路怎么搭:从相机布局、手眼标定到 6D 位姿验证的实作指南

这篇文章解决的是:当你的人形机器人已经能看到大概的场景,却一到抓取、递取、放置这些近身操作就频繁翻车时,视觉链路到底该怎么拆、怎么搭、怎么验。它更适合已经有基础相机、机械臂或双臂原型的人,而不是只想了解概念的读者。最关键的工程判断只有一句话:抓取视觉不是“识别出物体就完了”,而是一条从视角布置、时间同步、手眼标定、目标 6D 位姿、可抓区域判定到失败回放都必须闭环的执行链路。

这篇适合谁

  • 正在做 humanoid 上肢抓取、桌面操作、料箱取放、递送动作的人
  • 已经有 RGB、RGB-D 或双目相机,但抓取成功率不稳定的人
  • 想把“能看到”推进到“能稳定进入动作闭环”的团队
  • 准备做手眼标定、目标位姿估计、抓取验证和故障回放的人

先纠正几个很常见的误区

误区 1,抓取失败主要是模型不够强

真实项目里,抓空、蹭碰、手伸偏、夹爪进场角度不对,很多时候不是检测模型本身不够大,而是时间戳错位、相机外参漂了、深度在反光或黑色物体上失真,或者抓取前最后一次更新的目标状态已经过时。

误区 2,只要有一套通用视觉栈,就能同时服务导航、安全和抓取

导航要更宽视场和稳定占据更新,安全要更保守和低延迟,抓取要更在意近距离几何精度、遮挡恢复和末端相对位姿。如果强行共用一条“万能视觉栈”,最后通常是谁都服务不好。

误区 3,手眼标定做一次就结束

只要你换过相机支架、线束受力状态、手腕端工具、镜头焦距、甚至跌倒过一次,外参都可能悄悄漂。抓取视觉最怕的不是完全没标,而是你以为它还准。

误区 4,能在演示视频里抓住几次就算闭环了

演示通常挑的是光照稳定、物体摆放规整、速度较慢的片段。真正要上线,必须把遮挡、反光、堆叠、偏摆、目标被人移动、末端进场受限这些情况纳入验证。

关键实现判断

关键判断
做人形机器人抓取视觉时,最稳的路线通常不是先追求“一个模型识别所有物体”,而是先把目标集合、相机位置、深度有效区、位姿输出格式、抓取前最后确认动作、失败回放证据这 6 件事固定下来。先把窄任务做成,再谈泛化。

先把抓取视觉拆成 5 层,而不是一层“大模型感知”

  1. 观测层:哪些相机看什么区域,盲区在哪里,什么时候会被手臂和手掌遮挡。
  2. 几何层:内参、外参、时间同步、深度有效距离、近场噪声和反光失真。
  3. 目标层:输出的是 2D 框、分割 mask、6D 位姿,还是可抓区域和法向。
  4. 执行接口层:视觉输出如何喂给抓取规划器、夹爪预对准、末端笛卡尔轨迹或行为树节点。
  5. 验证与回放层:每次失败后,你能不能还原“看到了什么、何时看到、为什么还敢抓”。

如果这 5 层混在一起,一到现场就会出现互相甩锅。控制说视觉不稳,视觉说机械进场角度太差,最后没有人能拿出证据。

分步实践指南

第一步,先冻结任务,不要一上来就追“通用抓取”

先把任务压到一个能稳定复跑的范围,例如:

  • 从周转箱里抓 6 到 10 类固定 SKU
  • 桌面取放杯子、盒子、袋装件,但先排除透明和镜面物
  • 双臂递送中只做单物体拾取加单手交接

这一步的目的不是保守,而是让你先得到可靠数据边界。GraspNet 这类项目之所以有用,不只是因为数据多,而是它把遮挡、杂乱堆叠、相机类型和抓取标签统一成了可比较的基准。你自己的项目也要先有一个小而硬的任务基准。

第二步,相机布局先为“最后 30 厘米”服务

抓取视觉最常见的错误,是只顾远处看得全,却忽略末端接近目标时的最后一段可见性。对 humanoid 来说,通常会有三种布局思路:

  • 胸前或头部前视 RGB-D:覆盖面大,适合粗定位和任务切换,但手臂伸入后很容易遮挡目标。
  • 腕部 eye-in-hand 相机:适合做最后对准、插入、贴近抓取和补偿,但视野窄,对手眼标定和线束固定要求高。
  • 外部工作站相机:适合固定工位、料箱、桌面整理等场景,便于稳定标定,也更容易做多视角冗余。

工程上很少是三选一,而是“远处粗看 + 近处确认”的组合。RealSense 的多相机配置文档很有参考价值,它强调多深度相机真正能带来的是更宽视场、前后覆盖和同步观测,但前提是你真的处理了硬件同步、供电、带宽和连接长度问题。很多人不是输在算法,而是输在多相机上线后 USB 带宽和同步已经先乱了。

第三步,把手眼标定当成可重复工序,而不是一次性动作

MoveIt 的手眼标定文档有两个很值得直接借鉴的判断:

  • 做 eye-in-hand 时,不只要图像,还要可靠的 CameraInfo 和准确坐标系。
  • 目标板不需要知道全局绝对位置,但必须平整、静止,而且至少采够多组姿态样本。

落到 humanoid 项目里,可以把标定流程定成一个小 SOP:

  1. 先做相机内参,确认畸变模型和焦距没有被旧配置污染。
  2. 再做末端到相机、基座到相机的外参。
  3. 固定记录标定日期、镜头、支架版本、末端工具版本。
  4. 每次换手爪、拆支架、摔倒维修后,强制复标。
  5. 每天开机前抽查 3 到 5 个固定验证位,看重投影误差和抓取偏差有没有漂。

如果你的项目还没有“复标触发条件”,那不是还没做精细化,而是还没把抓取视觉当成生产级链路。

第四步,目标表示不要贪多,先统一成控制真能消费的格式

常见的目标表示有四类:

  • 2D 检测框:适合做粗筛选,不适合直接抓。
  • 分割 mask:适合做可见区域裁剪,但还不够给末端轨迹。
  • 6D 位姿:适合已知物体、已知 CAD、抓取模板清楚的任务。
  • 可抓区域 / 抓取候选:更适合杂乱堆叠和几何不确定较大的场景。

如果你的任务是固定料箱、已知箱内物体、目标件形状比较稳定,那么 Isaac ROS FoundationPose 这种“检测框 + 深度 + CAD 模型 -> 6D 位姿”的路线非常值得参考。它的价值不在于“很先进”,而在于它明确要求你准备好检测框、深度和对象网格,这会逼着你把输入合同定义清楚。对工程团队来说,输入合同清楚比模型名字更重要。

但如果你的物体种类多、几何差异大、临时替换频繁,先上 6D 位姿往往会把维护成本推高。这时更务实的路线,是用可抓区域或抓取候选做第一版,先保证成功率和恢复能力。

第五步,把“抓取前最后确认”做成独立环节

很多抓取失败不是因为第一次识别错,而是因为机器人走到一半,目标已经动了、被挡了、或深度质量突然变差。所以在执行上,建议把流程拆成:

  1. 远距离发现目标
  2. 规划靠近姿态
  3. 到达预抓位后触发一次近距离重观测
  4. 只有在位姿置信度、可抓区域、末端进场角度同时过阈值时才下发抓取
  5. 否则改走重拍、换视角、人工接管或放弃本轮

这一层最好不要写死在模型代码里,而是放在行为树或任务状态机里。这样你以后换模型、换相机、换抓手时,执行逻辑还能复用。

第六步,把失败分桶,不要只统计总成功率

抓取视觉至少要拆成下面几类失败:

  • 没看到目标
  • 看到了,但 3D 位姿跳变大
  • 位姿稳定,但进场路径被遮挡或碰撞
  • 进场正确,但夹爪闭合后滑脱
  • 拿起来了,但放置时丢失跟踪

如果你只看“这轮抓成功没”,团队永远不知道该优先补视觉、抓手还是轨迹控制。

最容易翻车的地方

1. 以为深度相机给了深度,就等于给了可靠几何

黑色、反光、透明、金属网格、边缘薄件,都会让深度质量明显变差。务必记录无效深度比例,而不是只看点云好不好看。

2. 腕部相机线束没有真正固定

只要末端线束在大动作时拉扯支架,外参就可能慢慢漂。现场经常不是“突然全坏”,而是成功率一周比一周差。

3. 多相机没有统一时间基准

尤其是“头部相机做发现,腕部相机做确认”的组合,如果时间戳和缓存没处理好,你以为在融合,实际上是在拿两个时刻的世界拼图。

4. 视觉输出和抓取规划器接口没冻结

今天给位姿,明天给点云,后天再加 mask,规划器和上层状态机会很快变成补丁堆。先定义固定消息结构、置信度字段和失效码。

5. 只在干净台面测,不在堆叠和边界位测

真正最伤上线信心的,往往不是完全抓不到,而是“边缘能抓、堆叠会乱、偶尔还碰一下”。这些必须进入固定回归集。

怎么验证你真的搭对了

我更建议按 4 级验证,而不是一次上整套任务:

  1. 几何验证:固定标定板和已知尺寸工件,检查重投影误差、点到点偏差、末端到目标相对位姿误差。
  2. 静态抓取验证:同一批物体、固定光照、固定摆放,先测 30 到 50 次静态成功率。
  3. 扰动验证:加入目标轻微偏摆、半遮挡、局部反光、箱内堆叠、背景变化,记录成功率下降曲线。
  4. 闭环验证:把发现、接近、近距重观测、抓取、放置、失败回退全部串起来,检查是否能自动终止错误动作而不是硬抓到底。

如果你在做已知物体抓取,可以借鉴 FoundationPose 这类路线的验证方式,把“检测框是否稳定、网格是否匹配、位姿跟踪是否能持续”分开测。若你在做通用抓取,则可以借鉴 GraspNet/AnyGrasp 这类项目的思路,把杂乱堆叠、跨相机、跨物体类别的泛化单独列成测试项,而不是混在总成功率里糊过去。

一个更稳的最小落地路线

  1. 先选 5 到 10 个固定物体,冻结抓取任务和摆放工位。
  2. 用头部或胸前相机做粗发现,用腕部相机做最后确认。
  3. 先把标定、时间同步和日志录制流程做扎实。
  4. 优先打通已知物体的 6D 位姿抓取,而不是一开始追求开放世界抓取。
  5. 把失败分桶和回放界面做出来,再扩大物体集合和场景复杂度。

这条路线不华丽,但很容易积累可复用资产,包括标定 SOP、回归集、网格资产、抓取模板、失败标签和复盘证据。真正能把团队拉快的,通常是这些资产,而不是一两个演示视频。

下一步怎么做

  • 如果你现在还在远距总览阶段,下一步优先补腕部近距确认链路。
  • 如果你已经有 wrist camera,但抓取还是飘,下一步优先查复标制度和时间同步。
  • 如果你已经能抓固定物体,下一步再逐步引入杂乱堆叠、遮挡和跨物体泛化。
  • 如果你想继续往双臂协作走,先确认两侧相机、两只手和胸前主相机之间的坐标系合同已经冻结。

Sources / Further Reading

Share this article

Send it to someone following humanoid robotics, embodied AI, or deployment trends.