当检测与深度还不够时
在前面的章节里,机器人学会了用 物体检测 找到东西,并用 深度估计 和 点云 测量它们有多远。对于只需知道「前方两米有一名行人」的自动驾驶汽车来说,这已经足够了。但只要机器人需要把东西拿起来,仅知道物体在哪里就只讲了一半的故事。要让夹爪环住一只马克杯,机器人还得知道杯子朝哪个方向——把手在左还是在右,是立着还是侧躺。
因此这最后一章把整条感知流水线串联起来。检测、分割、立体视觉、深度和点云最终都汇聚到一个苛刻的问题上:物体在空间中的完整位置和朝向究竟是什么?回答这个问题,再实时地依据答案去行动,正是把「看见」变成「做到」的关键。
六个自由度:物体的完整位姿
物体位姿估计 的任务是恢复物体在三维空间中的完整摆放:三个数表示位置(中心在哪里——左右、上下、远近),三个数表示 朝向(绕各个轴各转了多少)。这六个数合起来称为 6-DoF 位姿——六个自由度。我们早先见过同样的概念,即用 齐次变换 表示的 位姿:它回答的不只是「在哪里」,还有「朝哪个方向」。
为什么抓取的成败系于朝向?想象工作台上躺着一把螺丝刀。它的位置告诉手臂往哪里伸,但只有它的朝向才告诉 末端执行器 该如何转动夹爪,使爪子横跨把手合拢,而不是迎面撞上去。把旋转算错九十度,即使位置完美无缺,抓取也会失败。这正是为什么一次 抓取 和可靠的 抓取放置 依赖的是位姿,而不仅仅是位置。
位姿究竟是怎么估出来的?经典做法是:机器人持有物体的三维模型,去搜索那个能让模型与相机所见最佳对齐的旋转和平移——把一个已知形状与 点云 或图像中的 特征描述子 相匹配。现代系统则常常训练一个神经网络,直接从单张图片回归出位姿。无论哪种方式,得到的都是手臂可以据以行动的、干净的 6-DoF 答案。
闭合回路:视觉伺服
只估一次位姿然后盲目伸手是脆弱的:物体可能移位,手臂自身关节会有形变,或者标定漂移了一毫米。稳健的做法是边动边看。视觉伺服 是一个闭合控制回路,其中实时相机图像不断修正手臂的运动——这正是控制章节里的 反馈控制 思想,只不过把相机当作传感器。看一眼,挪一点,再看一眼,再挪一点,直到手到位。
这里有两大家族,区别在于误差是在哪里测量的。这就是 基于图像与基于位置 之分。在基于位置的伺服(PBVS)中,机器人先估出目标的完整三维位姿,在真实世界坐标里算出手当前位置与应到位置之间的差距,再操控手臂去消除这个差距。在基于图像的伺服(IBVS)中,机器人根本不重建三维:它挑选若干视觉特征,驱动手臂让这些特征在图像里滑向它们期望的像素位置。
两者各有性格。基于位置的伺服在真实空间里沿直观的直线运动,但严重依赖准确的位姿估计和标定——细小的三维误差就会让你偏离航向。基于图像的伺服对标定误差极为宽容,因为它只在乎像素,但它在真实世界中的路径可能弯得古怪,还可能在视觉奇异点附近栽跟头。连接相机运动与图像运动的桥梁是图像 雅可比(常称交互矩阵):它预测相机的一个微小运动会如何移动图像中的每个特征,从而让控制器反解这一关系、知道该往哪个方向动。
勾勒一个小小的伺服回路
整个闭环比你想象的要短。它的核心是一个不断重复的循环:在图像空间中测量误差,乘以图像雅可比的伪逆,把像素误差转化为指令速度,让手臂动一点,然后再看一次。
# image-based visual servoing, one control tick
target_px = desired feature pixels # where features SHOULD be
loop:
obs_px = detect_features(camera) # where they ARE now
e = obs_px - target_px # image-space error
if norm(e) < tol: break # close enough -> done
v = -gain * pseudo_inv(J_image) @ e # pixel error -> camera velocity
move_arm(v) # nudge, then look again注意这里没有单独的「规划路径」步骤——这个回路只是在每一拍把误差缩小一点,就像 反馈 控制器那样。这正是伺服安静的力量:它能针对移动的目标或粗糙的标定自我纠正,因为每一张新图像都会重置计划。
前沿:从像素直达动作
至此为止的一切都是手工搭建的流水线:检测、估计位姿、计算雅可比、控制。机器人感知的前沿提出了一个更大胆的问题——如果让单个深度神经网络从原始像素一路学到电机指令,彻底跳过显式的位姿,会怎样?这就是端到端学习式感知,它生长自学习章节里的 模仿学习 与 行为克隆 思想,在那里机器人模仿人类示范。
最大胆的版本是 视觉-语言-动作模型(VLA)。它接收相机图像和一句平实的语言指令——「把红色方块拿起来放进碗里」——然后一帧接一帧地直接输出机器人动作。VLA 建立在与聊天机器人背后同类的大模型之上,把所见与所闻融合,并直接映射成运动,全程不见单独的检测器或位姿估计器。从某种意义上说,它就是 视觉伺服,只是整个控制器被一个学得的网络替换掉了。
这些学习式系统令人兴奋,因为它们能应对任何手工编写的位姿估计器都未曾预料到的杂乱、新奇场景。但仍有两大难关。鲁棒性:当光照、杂物或一个陌生的新物体把网络推出其训练经验之外时,它可能悄无声息地失败。泛化:在一千个厨房任务上训练出的策略,到第一千零一个仍可能笨手笨脚。弥合这些模型常被训练所在的模拟器与真实世界之间的差距——即 仿真到现实 问题,可借 域随机化 等技巧缓解——仍是一片广阔的开放前沿。