具身智能自学教程 · 第 5 章

视觉与抓取 I:抓取原理与旋转回归

视觉为机器人提供物体的位置与朝向。本章从抓取的定义出发,学习 6D 位姿估计和神经网络的旋转预测,并将第 2-3 章的旋转与坐标变换用于抓取。

改编自北京大学《具身智能导论》(Introduction to Embodied AI) 2025 春季课程 · 授课:王鹤 老师

公式、图片与课件中文翻译可离线阅读
英文原课件与逐页中文翻译 →本章相关技术进展 →英文缩写与符号速查 →

🎯 本章学习目标

📖 关于本教程

内容来源

本教程的课程知识主线来自 北京大学 2025 年春季学期《具身智能导论》(Introduction to Embodied AI)课程,由 王鹤 老师主讲。

📝 课堂笔记 × 9 章 🎞 授课课件 × 13 讲 💻 课程作业 × 4 次

以上资料由课程同学整理并开源在 GitHub 仓库 zhuozhiyongde/Embodied-Artificial-Intelligence-2025Spring-PKU(GPL-3.0 许可证),课程官网为 pku-epic.github.io/Intro2EAI_2025。

阅读方式

教程目的

让没有北大课堂环境的自学者,也能按课程原有的知识体系,系统地学完具身智能入门:从机器人学基础,到视觉与抓取,再到策略学习——最终具备读懂前沿论文、跑通基础实验的能力。

📜 版权与使用声明
原课程资料(笔记、课件、作业)均为开源免费资源,版权归原作者(王鹤老师及课程组、笔记整理者)所有;本教程的改编内容(扩写讲解、中文翻译、编排结构)同样免费公开。
本教程仅用于个人自学,请勿用于任何商业用途(包括付费课程、付费资料包、机构培训等)。教程中所有引用均已标注来源;如内容使用有任何不当之处,请联系相关权利人,我们会及时处理。

开始前:统一坐标和维数

先修内容是旋转矩阵、四元数与齐次变换;进入SVD证明前,需知道矩阵乘法、转置、迹与最小二乘。可先读几何直觉,再回看证明,逐步理解每个公式的用途。

两个“6D”要分清:六维物体位姿是3个平移加3个旋转自由度;六维旋转表示则用6个数编码朝向。全文采用列向量左乘约定:$p_C=Rp_O+t$,即物体坐标变到相机坐标。符号自检:$R^\top R=I$、$\det R=1$,且正向与逆向变换应能相互还原。

阅读全部71页原课件与中文翻译 · 原始PDF

本章目录关于本教程(来源 · 声明)1. 抓取的本质2. 抓取位姿的自由度3. 开环抓取与闭环抓取4. 6D 位姿估计:机器人的「认物」5. 旋转回归:方法一6. 6D 与 9D:连续编码与旋转投影7. Rotation Fitting:方法二8. Instance-Level 与 Category-Level9. 本章小结10. 动手实践:作业 2附录 A:术语表附录 B:课件 71 页完整索引附录 C:参考资源

1抓取的本质

我们已有运动学、规划与控制三类基础工具,但都缺一个输入:「末端该去哪?」——答案藏在「抓取」里。课件的定义(p6):

抓取(Grasping):通过在一组接触点上施加力和扭矩,以期望的方式约束物体运动的过程。
抓取合成(Grasp Synthesis):对夹爪位姿或关节配置的高维搜索/优化问题。

笔记配图:机器人视觉抓取序列——感知、定位、抓取
视觉抓取的完整序列:感知 → 定位 → 规划 → 抓取。(来源:笔记 05)
中文翻译
抓取前抓取抓取后
抓取生成 → 接近物理交互提起 → 放下/使用(可选)
图中英文与中文释义

Pre-Grasp=抓取前;Grasping=抓取中;Post-Grasp=抓取后。Grasp Synthesis=抓取合成;Approaching=接近;Physical Interaction=物理交互;Lifting=抬起;Drop/Use (Optional)=放下/使用(可选)。从左向右阅读完整抓取序列。

两种操作模式(笔记):

  • 抓握式操作(Prehensile):通过完全约束物体自由度实现精确控制——「拿起来」;
  • 非抓握式操作(Non-prehensile):利用推、滑等接触力学调整物体状态——适合薄片物体或预处理场景。推与滑也可以完成物体操作。

有了抓取,加上第 2-4 章的 IK(把笛卡尔位姿变关节角)、运动规划(找无碰撞路径)、控制(执行),就形成了完整闭环(课件 p5):视觉给末端位姿 → IK → 规划 → 控制。剩下的核心问题就是:位姿怎么来?

2抓取位姿的自由度

抓取姿势(Grasp Pose)定义手的位置、方向与关节状态(课件 p7)。按自由度分档:

档位参数适用场景
4-DoF 抓取$(x, y, z, \theta_z)$:位置 + 绕重力轴旋转结构化环境、固定位置(流水线分拣)——「自上而下抓」
6-DoF 抓取$(x, y, z, \theta_x, \theta_y, \theta_z)$:任意方向接近非结构化场景(杂乱堆叠)
手指自由度平行夹爪 1 DoF(开合宽度);灵巧手示例最多 21 DoF(依结构而定)与位姿自由度正交的维度
笔记配图:rpy 旋转参数示意
4-DoF 抓取的旋转部分:只绕重力轴(z 轴)旋转一个 yaw 角。(来源:笔记 05)
中文翻译

俯仰轴:Y。

滚转轴:X。

偏航轴:Z。

图中英文与中文释义

Roll Axis=滚转轴(图中x轴);Pitch Axis=俯仰轴(y轴);Yaw Axis=偏航轴(z轴)。这是三个轴的完整示意;4自由度自上而下抓取固定滚转与俯仰,只保留偏航角。

yaw 旋转动画
Yaw:绕 z 轴旋转——4-DoF 抓取唯一的旋转自由度。(来源:笔记 05)
图中英文与中文释义

Yaw=偏航,示例绕图中z轴旋转。动画帮助观察朝向变化;使用欧拉角时仍需明确坐标系与旋转约定。

💡 直觉:自由度是「付费项」

4-DoF 将搜索空间从 6 维降到 4 维,在适合自上而下抓取的流水线中,可以简化搜索与规划。抓取自由度应与场景中的接近方向相匹配:桌面杯子允许自上而下接近时可采用4-DoF;狭窄环境或侧向接近通常需要更灵活的6-DoF候选。

3开环抓取与闭环抓取

回到第 4 章的开环/闭环概念,抓取也有两个版本:

开环抓取闭环抓取
流程位姿估计 → 抓取 → 结束(视觉只用一次)执行中持续用视觉、触觉等反馈调整动作,必要时重试
比喻观察一次后按计划执行边观察边调整,能否改善取决于反馈质量与控制设计
代表工作D³RoMA(CoRL 2024)GraspVLA(课件时为 in submission)
课程课件:闭环抓取 GraspVLA
闭环抓取的范例:GraspVLA(原页标注投稿状态,保留作为历史资料)。(来源:Lecture 5 课件 p9)
闭环抓取

GraspVLA,投稿中。

对照原课件第9页与完整中文翻译 →
图中英文与中文释义

Closed-Loop Grasping=闭环抓取

示例是GraspVLA

In submission=原课件制作时处于投稿中。

读图提示:投稿状态是原课程当时的标注。闭环的关键是后续观测会影响动作,不能只凭图片判断算法实现。

对照本页完整译解

开环抓取系统的标准流水线(课件 p11):视觉感知 → 位姿估计 → 运动规划 → 控制执行。其中「位姿估计」又分两条路线:

  • 已知物体:先估物体位姿,再把物体坐标系下标注的抓取位姿变换过去;
  • 未知/通用物体:直接预测抓取位姿。
历史研究实例:GraspVLA与开环、闭环(2025年)

GraspVLA 的首次 arXiv 提交日期为 2025-05-06(来源记录见第 1 章)。开环与闭环描述执行时是否继续使用反馈;视觉伺服与重试可用于纠正误差。评价这些反馈方法时,结合具体任务、传感器与控制条件,记录它们对结果的影响。

对已知物体,位姿估计可以先检查几项观测条件(笔记):如果 RGB 图像满足① 相机内参已知、② 物体大小已知(消除尺度歧义)、③ 物体无对称性,则有助于消除尺度与对称性歧义;RGB 或点云仍需足够的可见几何信息,遮挡可能使不同位姿难以区分。

笔记配图:为什么鸽子这么大——尺度歧义问题
「道理我都懂,但是这个鸽子怎么这么大?」——不知道物体大小,近的小物体与远的大物体在图像上无法区分,这就是尺度歧义。(来源:笔记 05)
图中英文与中文释义

这幅照片是透视/尺度歧义的直观例子,没有需要翻译的技术英文。单张图像中的表观大小同时受真实尺寸和相机距离影响。

46D 位姿估计:机器人的「认物」

6D 物体位姿:物体坐标系到相机坐标系的 6D 变换——3 DoF 平移 + 3 DoF 旋转(课件 p13,引用 PoseCNN / RSS 2018):

$$ \begin{bmatrix} X_C \\ Y_C \\ Z_C \end{bmatrix} = R \begin{bmatrix} X_O \\ Y_O \\ Z_O \end{bmatrix} + t $$

课程课件:6D 物体位姿定义
6D 物体位姿:物体 → 相机的 6 自由度变换。(来源:Lecture 5 课件 p13)
6D 物体位姿
  • 定义:将物体坐标系变换到相机坐标系的刚体变换,包括 3 个平移自由度和 3 个旋转自由度。

\[X^{\prime}=RX+T\]

相机坐标系;物体坐标系;X、Y、Z 轴;平移 \(T=\begin{bmatrix}T_x\\T_y\\T_z\end{bmatrix}\);图像中心 \(c=\begin{bmatrix}c_x\\c_y\end{bmatrix}\)。

来源:Yu Xiang 等,《PoseCNN:一种用于杂乱场景中 6D 物体位姿估计的卷积神经网络》,RSS 2018。

对照原课件第13页与完整中文翻译 →
图中英文与中文释义

6D Object Pose=六维物体位姿

定义:从object space(物体坐标空间)到camera space(相机坐标空间)的刚体变换,含3DoF translation(三维平移)与3DoF rotation(三维旋转)

p_C=R p_O+T

图中的camera coordinate=相机坐标系,object coordinate=物体坐标系

引用PoseCNN,RSS 2018。

读图提示:R把物体系方向转换到相机系,T是物体原点在相机系的位置;一定先明确变换方向,再做矩阵乘法。

对照本页完整译解

它的应用远超抓取(课件 p14-17):

  • 机器人操作:把 CAD 模型上的标注(如抓取点)转移到相机空间的物体上;位姿追踪提供视觉闭环控制;
  • 人机交互理解:感知人与物的交互(HOnnotate);从人的操作中提取位姿轨迹供模仿学习;
  • 增强现实(AR):视觉引导、E-learning、移动应用娱乐。

课件接着抛出核心问题(p18):「How to predict a rotation?」——平移可用3个数回归,但也受观测歧义影响;旋转还需要处理其结构约束与表示问题。接下来的两节就是答案的两条路线。

5旋转回归:方法一

旋转回归(Rotation Regression):对输入信号,用神经网络估计连续旋转变量(笔记)。

课程课件:方法一——用神经网络回归旋转表示
方法一:用神经网络直接回归一种旋转表示。(来源:Lecture 5 课件 p25)
如何用神经网络估计旋转?

方法 1:回归旋转表示。

输入信号 → 神经网络 → 表示空间 R → 映射 f → 原空间 X(9 维);反向映射 g。

对照原课件第25页与完整中文翻译 →
图中英文与中文释义

方法一:用神经网络regress a rotation representation(回归一种旋转表示)

Input signal=输入信号,Neural Network=神经网络,Representation Space=表示空间,Original Space=原旋转空间

Mapping f与Mapping g=两个空间之间的映射。

读图提示:网络输出参数后要通过解码转换成有效旋转;表示与旋转本身不一定一一对应。

对照本页完整译解

笔记配图:旋转回归神经网络结构
旋转回归:网络输出一种旋转表示(四元数/欧拉角/矩阵…),监督信号是真实旋转。(来源:笔记 05)
中文翻译

输入信号 → 神经网络 → 表示空间R。

表示空间R —映射f→ 原始空间X。

原始空间X —映射g→ 表示空间R。

图中英文与中文释义

Input signal=输入信号;Neural Network=神经网络;Representation Space=表示空间;Original Space=原旋转空间;Mapping f/g=两个空间之间的映射。网络输出参数,再由解码映射得到有效旋转。

为什么这比普通回归难?因为旋转空间是非线性的非欧空间:SO(3) 是一个弯曲的流形,而神经网络输出的是欧几里得空间。直接对编码使用 MSE 时,需要留意标签的连续性:

连续性原则:CNN 应当具有连续性——输入微小变动,输出不应巨变。但如果旋转表示存在「监督信号跳变」(奇点),网络需要拟合相邻输入对应的相距很远的标签,可能出现较大权重或数值不稳定。选定标签的全局不连续性来自表示的拓扑结构。选择表示时先检查这一性质,再用合适的损失与训练方法缓解跳变的影响;全局连续编码需要从表示设计入手。

理想的旋转表示应满足:① 能准确表达旋转;② 旋转的编码连续。预测向量的解码不必一一对应,且要注明非退化输入条件。逐个检视四种候选:

欧拉角:天然不连续

2D 情形最直观:绕轴转 $0$ 和 $2\pi$ 是同一个旋转,但角度表示差了 $2\pi$——在 SO(2) 上连续的一圈,在角度表示上「断了」:

笔记配图:欧拉角表示的不连续性
欧拉角的不连续性:绕轴转一圈回来,角度从 $2\pi$ 跳回 $0$。(来源:笔记 05)
中文翻译

表示空间

0;\(2\pi\)。

\([0,2\pi]\)内不连通的角度表示集合。

原始空间

\(S^1\)中连通的旋转集合。

映射g:原始空间 → 表示空间。

图中英文与中文释义

Representation Space=表示空间;Original Space=原空间;Disconnected Set of Angular Representations in [0,2π]=首尾端点分离的角度区间表示;Connected Set of Rotations in S¹=首尾相连的圆周旋转集合;Mapping g=映射。图强调主值编码端点分离,而真实旋转连续。

解法思路:引入冗余维度,把低维的不连续提升到高维的连续(如 $\theta \to (x,y)$)——这正是后面 6D/9D 表示的思想源头。

轴角:边界奇异

$\theta = 0$ 时任意轴都表示单位旋转(不唯一);$\theta = \pi$ 时 $(\mathbf{e}, \pi)$ 与 $(-\mathbf{e}, \pi)$ 相同——同样不连续。

四元数:双重覆盖的两难

$q$ 与 $-q$ 表示同一旋转(第 3 章讲过)。用作监督信号时,网络面对「同一个旋转两个标签」的矛盾。即使约束 $w \geq 0$(上半球),新问题又来了(笔记):

笔记配图:四元数双重覆盖
四元数的双重覆盖:$q$ 与 $-q$(球面对跖点)对应同一旋转。(来源:笔记 05)
中文翻译

\(\mathbf u\)、\(-\mathbf u\);\(\mathbf v\)、\(\mathbf v'\);\(\theta\)、\(2\pi-\theta\)。

图中英文与中文释义

u是旋转轴,v、v′是旋转前后向量;θ与绕相反轴的2π−θ产生同一旋转。对应到单位四元数时,q与−q表示同一朝向。图中主要是数学符号。

笔记配图:约束四元数到上半球引入的不连续
约束到上半球:临近赤道大圆处出现不连续。(来源:笔记 05)
中文翻译

起始四元数 —可行路径→ 目标四元数。

起始四元数 —最近路径→ 目标四元数。

图中英文与中文释义

starting quaternion=起始四元数;target quaternion=目标四元数;nearest path=最近路径;plausible path=另一可选路径。强制选上半球会在边界附近把接近的旋转编码成距离较远的标签。

赤道附近:一个微小旋转可能让 $q$ 从 $w>0$ 跳到 $w<0$,在约束表示上就是跳变。双重覆盖的本质矛盾:要么二义,要么断裂。

笔记配图:四元数半球约束在大圆上的不连续性
大圆上的两难:直径两端只能选一个切点(否则双重覆盖),但这一点附近仍有跳变。(来源:笔记 05)
图中英文与中文释义

圆周示意用于说明四元数单值选择的边界问题:两个等价标签只选一个时,跨越边界的连续旋转可能产生标签跳变。图中的数学标记不表示新增自由度。

课程课件:各种旋转表示的对比实验——ModelNet10-SO3 上的旋转回归
对比实验(ModelNet10-SO3 数据集):不同表示的旋转回归性能差异明显,连续表示(6D/9D)显著优于欧拉角/四元数。(来源:Lecture 5 课件 p35)
比较

任务:单幅图像的旋转回归。数据集:ModelNet10-SO(3)。

方法平均误差(°)中位误差(°)标准差(°)
3D-RCNN35.5013.2146.55
M_G31.6016.7041.86
欧拉角41.3527.4437.73
轴角32.3019.7434.70
四元数26.9214.3932.92
S²-Reg27.3615.4133.17
5D25.1813.4032.10
6D22.6011.5131.24
SVD-Train21.2511.1430.28
方法平均误差(°)中位误差(°)标准差(°)
3D-RCNN34.807.3255.73
M_G31.4113.9348.48
欧拉角49.3132.0343.47
轴角31.8217.3137.19
四元数29.6014.5637.00
S²-Reg25.9912.1137.67
5D26.2311.5238.91
6D20.257.8436.85
SVD-Train18.017.3133.96

来源:Jake Levinson 等,《旋转估计中 SVD 的分析》,NeurIPS 2020。

对照原课件第35页与完整中文翻译 →
图中英文与中文释义

Comparisons=比较

任务为Single image rotation regression(单张图像旋转回归)

数据集ModelNet10-SO3

表中Mean=平均误差,Med=中位误差,Std=标准差

比较欧拉角、轴角、四元数、5D、6D和SVD等表示。

读图提示:表里的误差越低越好;这是特定任务和设置的实验,不能外推为每个任务上都存在相同排名。图中椅子等物体以不同朝向呈现。

对照本页完整译解

🔑 一条重要的例外:增量旋转预测

如果只预测增量旋转(单位矩阵附近的小旋转),前述所有表示都可用——在选定合适的局部坐标图后,可避开全局标签断点;如旋转向量或靠近单位四元数的编码均可使用。轴与角分开写时,零角度的轴仍不唯一,因此还需检查所选局部编码的定义。训练速度可在相同实验条件下比较。这正是一些跟踪(tracking)或视觉—语言—动作(VLA)模型的做法:每帧只预测小增量。

66D 与 9D:连续编码与旋转投影

既然低维表示总有奇点,那就回到旋转矩阵本身,但处理掉冗余(课件 p31-34):

6D 表示:两列 + 格拉姆-施密特

只取旋转矩阵的前两列(6 个数),映射回 SO(3) 时用 Gram-Schmidt 正交化:

$$ f_{GS}\left(\begin{bmatrix} \mathbf{a}_1 & \mathbf{a}_2 \end{bmatrix}\right) = \begin{bmatrix} \mathbf{b}_1 & \mathbf{b}_2 & \mathbf{b}_3 \end{bmatrix}, \qquad \mathbf{b}_1 = N(\mathbf{a}_1),\ \mathbf{b}_2 = N(\mathbf{a}_2 - (\mathbf{b}_1\cdot\mathbf{a}_2)\mathbf{b}_1),\ \mathbf{b}_3 = \mathbf{b}_1 \times \mathbf{b}_2 $$

① 第一列归一化;② 第二列移除平行于第一列的分量再归一化;③ 第三列叉乘得到。归一化要求第一列非零,且第二列去除投影后仍非零。遇到零向量或两列共线时,先处理退化输入。

课程课件:连续旋转表示——6D 表示的思想
连续旋转表示:6D 表示取旋转矩阵前两列,用 Gram-Schmidt 映射回 SO(3)。(来源:Lecture 5 课件 p31)
连续的旋转表示:6 维表示
  • 旋转矩阵是 SO(3) 的连续表示,但具有冗余参数。
  • 去掉第三列,得到 6 维表示。
  • 通过 Gram–Schmidt 正交化,将神经网络输出的欧氏空间表示映射到 SO(3)。

来源:Yi Zhou 等,《神经网络中旋转表示的连续性》,CVPR 2019。

对照原课件第31页与完整中文翻译 →
图中英文与中文释义

旋转矩阵是连续表示但参数冗余

6D表示删除矩阵最后一列

用Gram-Schmidt orthogonalization(格拉姆—施密特正交化)将网络欧氏输出转换到SO(3)

引用Zhou等CVPR 2019。

读图提示:编码是取有效旋转矩阵的前两列;解码只在第一列非零、两列不共线的输入域上定义。

对照本页完整译解

⚠️ 正交化次序与数值退化

6D解码对两列依次处理,第一列先归一化、第二列再去掉投影,第三列由叉乘构造;这种结构会影响梯度与数值敏感性。这种顺序结构与L2损失兼容。比较6D与9D时,应使用相同的数据、损失和评价条件。第一列接近零或两列近共线时,需检查退化与训练稳定性。

9D 表示:完整矩阵 + SVD 正交化

直接输出完整 3×3 矩阵,用 SVD 映射到 SO(3)(Levinson et al. 的分析):

$$ \hat{R} = U\begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & \det(UV^{\top}) \end{bmatrix}V^{\top} $$

设网络输出 $A=U\Sigma V^\top$,其中 $U,V$ 为正交矩阵,$\Sigma$ 含奇异值。将奇异值替换为1并对可能的反射作行列式修正,得到距离 $A$ 最近的合法旋转。原始奇异值与1相差较大时,也可按这一过程求解。CNN Friendly意为适合神经网络欧氏输出的设计;在最近旋转解唯一的非退化域上投影连续,退化输入可能使解不唯一或梯度不稳定。代价是输出9个数。

进一步理解:旋转表示与位姿估计路线

6D/9D 为旋转回归提供了两种输出设计。阅读网络时,查看它实际输出的表示及解码步骤;再结合数据和几何先验,比较直接回归与对应点拟合的取舍。旋转表示与 Procrustes 为理解这些设计提供了基础。

7Rotation Fitting:方法二

方法一需要选择旋转表示并处理其几何约束;方法二换个思路:网络不输出旋转,输出「对应关系」,再用解析算法拟合旋转(课件 p37):

笔记配图:模型坐标到相机坐标的对应关系
Rotation Fitting:网络预测每个像素在物体模型上的 3D 坐标,再解析求解最优变换。(来源:笔记 05)
中文翻译

模型坐标

\(X_M,Y_M,Z_M\)

\((x_i^M,y_i^M,z_i^M)\)

相机坐标

\(X_C,Y_C,Z_C\)

\((x_i^C,y_i^C,z_i^C)\)

图中英文与中文释义

Model coordinates=模型坐标;Camera coordinates=相机坐标;上标M和C分别表示模型系与相机系。红色对应线连接同一表面点的两种坐标,蓝色虚线表示观察几何关系。

  1. 对物体表面每个像素,预测其在物体 CAD 模型上的 3D 坐标(object coordinates);
  2. 基于相机坐标 ↔ 模型坐标的对应关系,拟合旋转矩阵。

有深度信息且相机内参已知:3D-3D 对应($(u,v,d) \to (x^M,y^M,z^M)$);无深度:2D-3D 对应。本节经典方法通常使用已知物体模型和物体坐标监督;2D-3D对应可用PnP求解,3D-3D对应可用刚体拟合求解。选择求解器时,先确认对应点是在二维图像中,还是在三维坐标系中。

7.1 正交 Procrustes 问题:3D-3D 拟合的解析解

给定两组对应的 3D 点集 $\mathbf{M}$(相机系)与 $\mathbf{N}$(模型系),求最优旋转:

$$ \hat{\mathbf{A}} = \arg\min_{\mathbf{A}} \|\mathbf{M} - \mathbf{NA}^{\top}\|_F^2 \quad \text{s.t.} \quad \mathbf{A}^{\top}\mathbf{A} = \mathbf{I} $$

将 Frobenius 范数展开为迹形式后,$\mathrm{tr}(\mathbf{M}^\top\mathbf{M})$ 与 $\mathrm{tr}(\mathbf{N}^\top\mathbf{N})$ 与 $\mathbf{A}$ 无关,目标等价于最大化 $\mathrm{tr}(\mathbf{M}^\top\mathbf{NA}^\top)$。对 $\mathbf{M}^\top\mathbf{N} = \mathbf{UDV}^\top$ 做 SVD,则迹 = $\sum_i [(\mathbf{AV})^\top\mathbf{U}]_{ii}d_i$;由于 $(\mathbf{AV})^\top\mathbf{U}$ 是正交矩阵,对角元绝对值 ≤ 1,全取 1 时达到最大,即:

$$ \hat{\mathbf{A}} = \mathbf{UV}^{\top} $$

⚠️ 后处理:det = -1 的反射修正

正交矩阵可能是反射($\det = -1$,改变手性)。此时修正为 $\hat{\mathbf{A}} = \mathbf{U}\,\mathrm{diag}(1,1,\det(UV^\top))\,\mathbf{V}^{\top}$——翻转「关联性最弱的方向」(最小奇异值对应方向),对整体对齐的影响最小。

7.2 联合求解 R 与 t

三步走(课件 p43;假定点对已知且几何不退化):① 中心化:两簇点各自减去质心;② 对中心化点集解带约束的 Procrustes 得 $\hat{R}$;③ 平移 $\hat{t} = \overline{\mathbf{M}} - \hat{R}\overline{\mathbf{N}}$。

公式里的符号与方向

$M,N\in\mathbb{R}^{n\times3}$每行是一个点,$N$是源(模型)坐标、$M$是目标(相机)坐标;中心化后对 $M_c^\top N_c$ 做SVD。$\|\cdot\|_F$是所有元素平方和的平方根,$\mathrm{tr}$是对角元素之和。计算后用 $M\approx N R^\top+t^\top$逐点核对,确认 $R$和 $R^\top$的变换方向。相同点、共线点或对称几何可能使姿态无法唯一确定。

7.3 RANSAC:SVD 怕离群点

Procrustes 给出固定对应关系下的最小二乘解。离群点(Outlier)会因较大的平方残差影响整体拟合,下面的直线拟合图展示了这一现象:

笔记配图:最小二乘法对离群点敏感
最小二乘对离群点的脆弱:为了照顾一个离群点,整条直线大幅偏转。(来源:笔记 05)
中文翻译

离群点!

图中英文与中文释义

outlier=离群点。左图点接近同一直线;右图增加远离主体的点后,最小二乘直线被拉偏;这是平方残差对大误差敏感的示例。

解法是 RANSAC(随机抽样一致):随机抽最小样本组生成假设(刚体3D-3D对应至少需要3对不共线点)→ 用其余点投票(距离小于阈值算内点)→ 内点最多的假设胜出 → 用全部内点重估。循环可以并行化(所有假设同时提出)。

💡 直觉:回归 vs 拟合的本质

方法一让网络直接输出旋转,结构直接,但需处理编码、损失与物体对称性。方法二让网络输出稠密对应关系,利用局部几何规律,再由解析算法拟合旋转;对称性、遮挡和预测错误仍会影响对应点,因此需要 CAD 模型和 RANSAC 等后处理。比较直接回归与对应拟合时,固定数据、模型先验和误差指标,观察各自的误差来源与后处理成本。

8Instance-Level 与 Category-Level

8.1 Instance-Level:认「这一个」物体

实例级位姿估计:小集合的已知实例,每个实例有自己的 CAD 模型(课件 p55,引用 PoseCNN):

课程课件:PoseCNN 网络结构
PoseCNN(Xiang et al., RSS 2018):实例级 6D 位姿估计的经典方法。(来源:Lecture 5 课件 p56)
PoseCNN

无纹理物体;对称物体;遮挡。

幻灯片来源:Yu Xiang。

对照原课件第56页与完整中文翻译 →
图中英文与中文释义

PoseCNN把输入图像转换为物体分割与位姿

Texture-less objects=无纹理物体,Symmetric objects=对称物体,Occlusions=遮挡

图源Yu Xiang。

读图提示:这些是系统处理的困难类型,并非对任意无纹理或严重遮挡都有无条件保证。

对照本页完整译解

  • 平移:预测物体中心 + 距离;旋转:回归四元数(正是方法一);
  • 数据集:LINEMOD(无纹理物体、杂波场景),有 GT CAD 模型,适合受控环境;
  • 局限:实例特定、不能泛化到新物体、需要 CAD 模型。
课程课件:LINEMOD 数据集
LINEMOD 数据集:无纹理物体 + 杂波场景,实例级位姿估计的标准测试场。(来源:Lecture 5 课件 p63)
实例级 6D 物体位姿估计
  • 已知的小规模物体集合。
  • 已知真实 CAD 模型。
  • 适用于受控环境。

LINEMOD。

来源:Stefan Hinterstoisser 等,《用于杂乱场景中无纹理三维物体检测与位姿估计的基于模型的训练》,ACCV 2012,Springer。

对照原课件第63页与完整中文翻译 →
图中英文与中文释义

一小组已知实例

Ground truth CAD model available=有真实CAD模型

Useful in controlled environments=适用于受控环境

LINEMOD dataset=LINEMOD数据集

引用Hinterstoisser等ACCV 2012。

读图提示:本页才是LINEMOD。CAD模型提供固定实例的几何先验和坐标参考。

对照本页完整译解

8.2 Category-Level:认「这一类」物体

类别级位姿估计:同一类别的物体(如各种茶杯)共享几何结构,可对训练类别内的新实例估计位姿。遇到训练之外的类别时,需要另外验证泛化能力。代表性工作是 NOCS(Normalized Object Coordinate Space,CVPR 2019 Oral)——作者正是本课程主讲人王鹤老师:

课程课件:NOCS——类别级 6D 位姿与尺寸估计
NOCS(王鹤 et al., CVPR 2019 Oral):无需 CAD 模型,检测未见物体的类别级位姿与尺寸。(来源:Lecture 5 课件 p67)
归一化物体坐标空间:类别级 6D 物体位姿与尺寸估计

He Wang、Srinath Sridhar、Jingwei Huang、Julien Valentin、Shuran Song、Leonidas Guibas。

CVPR,2019 年 6 月 16–20 日,美国加州长滩;口头报告。

NOCS 图。

坐标:(0.5,0.5,0.5)、(−0.5,0.5,0.5)、(−0.5,0.5,−0.5)、(0.5,0.5,−0.5)、(−0.5,−0.5,−0.5)、(0.5,−0.5,−0.5)。

对照原课件第67页与完整中文翻译 →
图中英文与中文释义

Normalized Object Coordinate Space for Category-Level 6D Object Pose and Size Estimation=用于类别级六维位姿与尺寸估计的归一化物体坐标空间

作者He Wang、Srinath Sridhar、Jingwei Huang、Julien Valentin、Shuran Song、Leonidas Guibas

CVPR 2019,Oral Presentation=口头报告。

读图提示:作者及论文名称保留以便检索。NOCS是统一参考空间,而非具体物体的完整CAD模型。

对照本页完整译解

核心思想是归一化坐标(课件 p70):同类物体按类别约定统一朝向,以包围盒中心定义原点,再按包围盒对角线做统一比例缩放,装进规范立方体——规范坐标提供类别内可学习的共同参考。这也回答了平移歧义:类别级需要估计尺度;RGB-D 可利用深度同时拟合尺度与位姿,否则还是「鸽子为什么这么大」的问题。

课程课件:NOCS 归一化物体坐标空间表示
NOCS 表示:同类实例按朝向、中心与统一尺度规范到标准空间,颜色编码对应点。(来源:Lecture 5 课件 p70)
表示:归一化物体坐标空间(NOCS)

RGB 颜色编码 X、Y、Z 坐标。

NOCS 图。

坐标:(0.5,0.5,0.5)、(−0.5,0.5,0.5)、(−0.5,0.5,−0.5)、(0.5,0.5,−0.5)、(−0.5,−0.5,−0.5)、(0.5,−0.5,−0.5)。

对照原课件第70页与完整中文翻译 →
图中英文与中文释义

Representation: Normalized Object Coordinate Space=表示:归一化物体坐标空间

RGB colors represent XYZ coordinates of shape=红绿蓝颜色分别表示形状的x、y、z坐标

NOCS Map=归一化坐标图。

读图提示:颜色是坐标编码,不是物体材质颜色;相同规范位置可在不同实例中使用相同编码。

对照本页完整译解

笔记配图:类别级位姿估计的尺度歧义
类别级同样绕不开尺度:大小不知道,光轴方向就有歧义(大远 vs 小近)。(来源:笔记 05)
中文翻译

为了帮助网友搞清楚
热心的网友画出了透视图

鸽子

人

图中英文与中文释义

图中的中文透视解释说明相机视线上近小与远大可能产生相似投影;该图没有技术英文。恢复度量尺寸和距离需要额外尺度或深度信息。

9本章小结

核心概念一句话解释
抓取合成在抓取位姿/关节配置的高维空间中搜索可行解
4-DoF vs 6-DoF结构化场景省两个自由度;杂乱场景需要任意朝向
开环 / 闭环抓取视觉只用于预先估计 / 执行中根据新观测调整动作
旋转回归的连续性旋转编码宜连续;解码可多对一,须处理退化输入
6D / 9D 表示矩阵前两列 + GS 正交化 / 完整矩阵 + SVD 正交化,编码连续,解码需处理退化输入
正交 Procrustes3D-3D 对应拟合旋转的闭式解 $A=UV^\top$(+ det 修正)
RANSAC最小样本生成假设 + 内点投票,抵御离群点
Instance / Category认「这一个」(PoseCNN/LINEMOD)/ 认「这一类」(NOCS)
💡 下一章预告

第 6 章继续深挖:ICP 点云配准、类别级位姿估计的完整方法、以及抓取的力学基础(Force/Form Closure 与摩擦锥)——「位姿有了,怎么抓才稳」。

10动手实践:作业 2 · 电钻抓取

本章配套北大原版作业 2:抓取一个已知物体(电钻 power drill)。给定物体坐标系下的抓取位姿,你的任务是估计物体位姿,把抓取位姿变换到机器人坐标系——本章全部知识点的一次完整实战。

10.1 任务总览

任务自学检查内容对应本章
Part I比较平移/旋转误差EstPoseNet:PointNet 直接估计平移+旋转§5 方法一
Part II检查对应拟合残差预测物体坐标(NOCS),拟合位姿§7 方法二
Part III核对坐标变换transform_grasp_pose:位姿变换到机器人系第 2 章齐次变换
Bonus同一验证集对照RANSAC(numpy/torch 实现),比较离群点条件下的误差与成功率§7.3

代码位置:Homeworks/02-Pose-Estimation/(题目 PDF 在 Handout/,公开作者实现位于 Handin/;练习要求与评分以 Handout/ 为准)。

10.2 环境搭建

conda create -n hw2 python=3.10
conda activate hw2
conda install conda-forge::roboticstoolbox-python==1.0.3
# GPU 版(按需改 cuda 版本)
conda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia
# CPU 版
conda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 cpuonly -c pytorch
pip install tqdm h5py wandb plotly pygments ikpy transforms3d pyyaml opencv-python pillow matplotlib trimesh dm_control
pip install numpy==1.26.4 scipy==1.11.4 sympy==1.13.1
⚠️ 环境提示

先用小规模数据检查训练流程,再按GPU、样本量、超参数与停止准则记录训练耗时;纯CPU可用于读代码和小规模检查。mjpython 仅 Mac 需要。数据文件较大(含预训练 checkpoint),建议直接用仓库 Handin/ 里的权重作对照。

10.3 Part I:直接估计

完成 src/model/est_pose.py 中的 EstPoseNet(PointNet backbone):__init__ 初始化模块、forward 训练时算 loss、est 输出平移与旋转矩阵。

🔑 设计决策(用本章知识回答)

题目提示:「考虑用什么旋转表示和损失函数,并在 est 里把表示转成旋转矩阵」。一种可行的设计思路:平移用 MSE 直接回归(欧几里得空间没问题);旋转用 6D 表示 + Gram-Schmidt(§6)或四元数 + 归一化损失。若选择欧拉角或四元数配合 MSE,结合 §5 检查标签跳变与四元数归一化。

运行 python train.py --model_type=est_pose --exp_name=my_exp(可加 --device=cuda);测试 python test.py --checkpoint=... --mode=val。自学检查:同时记录平移误差(m)与旋转误差(rad),并与同一验证集的基线比较;课程达标阈值以原题目为准。

10.4 Part II:拟合

另一种可比较的设计:网络输出每个物体点的物体坐标(NOCS,类似分割分支),再用对应关系拟合位姿——正是 §7 的路线:3D-3D 对应 → 中心化 → 带约束 Procrustes(SVD + det 修正)→ 求 $t$。

💡 实现提示

Procrustes 只需 10 行 numpy/torch:中心化 → U, S, Vh = np.linalg.svd(Mc.T @ Nc) → R = U @ np.diag([1,1,np.linalg.det(U@Vh)]) @ Vh → t = M.mean(0) - R @ N.mean(0)。这里 M,N 均为 (n,3):N 是源点,M 是对应目标点,Mc,Nc 为各自中心化后的矩阵;验证 M ≈ (R @ N.T).T + t。点云有噪声时拟合会被离群点带偏——这正是 Bonus 里 RANSAC的用武之地。

10.5 Part III:抓取位姿变换

实现 src/utils/transform_grasp_pose:把物体坐标系下的抓取位姿变换到机器人坐标系——第 2 章齐次变换的直接应用:$T_{robot}^{grasp} = T_{robot}^{obj} \cdot T_{obj}^{grasp}$。这里约定 $T_A^B$把B系坐标变到A系;若网络输出物体到相机的变换,还需相机外参:$T_{robot}^{obj}=T_{robot}^{camera}T_{camera}^{obj}$。

评估:python eval.py --checkpoint=... --mode=val。plotly 显示估计位姿(--vis=1),MuJoCo 显示抓取过程(--headless=0)。自学检查:记录样本数、成功判定和成功率;课程阈值及分值以原题目为准。

💡 自学路线建议

总用时估计 1-2 天:Part I 半天(读代码框架 + 设计旋转表示)、Part II 半天(Procrustes + RANSAC)、Part III 1 小时(矩阵变换)。建议顺序:先跑通 Part III(最简单,验证环境),再 Part I,最后 Part II。遇到 NaN loss,先查四元数/6D 表示的归一化。

附A术语表

术语解释
抓取(Grasping)通过接触点施加力/扭矩约束物体运动的过程
抓取合成(Grasp Synthesis)对夹爪位姿/关节配置的高维搜索或优化问题
抓握式 / 非抓握式完全约束物体自由度 / 用推、滑等接触力学调整物体
4-DoF / 6-DoF 抓取位置+绕重力轴旋转 / 位置+任意朝向
6D 物体位姿物体到相机的 6 自由度变换(3 平移 + 3 旋转)
旋转回归用神经网络估计连续旋转变量的回归任务
奇点(Singularity)表示无定义或行为不佳的点(歧义、不可微)
6D 表示旋转矩阵前两列 + Gram-Schmidt 正交化的连续表示
9D 表示完整 3×3 输出 + SVD 正交化的连续表示
增量旋转预测只预测单位矩阵附近的小旋转,选合适局部坐标后可避开全局标签断点
正交 Procrustes 问题两组对应点间最优旋转的矩阵逼近问题,SVD 解析解 $A=UV^\top$
RANSAC随机抽样一致:最小样本假设 + 内点投票,抗离群点
PnPPerspective-n-Point:2D-3D 对应 + 相机内参求位姿
Instance-Level对已知具体实例(有 CAD 模型)的位姿估计
Category-Level对同类别未见实例的位姿与尺寸估计(如 NOCS)
NOCS归一化物体坐标空间:类别内统一到 1×1×1 box(王鹤 CVPR 2019)

附B课件 71 页完整索引

原版 Lecture 5 课件共 71 页(GitHub 原文件)。下表逐页列出内容及在本教程中的位置:

逐页原图与中文翻译 · 本地原始课件PDF

页码页面内容在教程中的位置
p1封面:Lecture 5 - Vision and Grasping I封面区
p2Logistics 页§10(作业背景)
p3作业 1 截止提醒(03/22)§10(背景)
p4主题页:抓取§1 开头
p5从机器人学基础到抓取:流水线闭环§1
p6什么是抓取(定义 + Grasp Synthesis)§1
p7抓取位姿:4-DoF / 6-DoF / 手指自由度§2
p8开环抓取:D³RoMA(CoRL 2024)§3
p9闭环抓取:GraspVLA(in submission)§3 + 更新框
p10闭环抓取(示意图)§3
p11开环抓取的两条路径(已知/未知物体)§3
p12主题页:6D 位姿估计§4 开头
p136D 物体位姿定义(PoseCNN 引用)§4
p14应用:机器人操作(CAD 标注转移、视觉闭环)§4
p15应用:基于位姿的抓取(CoRL 2018)§4
p16应用:人机交互理解(HOnnotate 2020)§4
p17应用:增强现实(AR 综述 2016)§4
p186D 位姿定义回顾 + 核心问题「如何预测旋转」§4-5 衔接
p19主题页:旋转回归§5 开头
p202D/3D 旋转与 SO(3) 定义回顾§5
p21旋转表示盘点:矩阵 9 数 vs 欧拉角/轴角/四元数§5
p22欧拉角(图源 Hao Su)§5
p23轴角与罗德里格斯公式(回顾)§5
p24四元数(图源 Hao Su)§5
p25方法一:回归旋转表示§5
p26四元数回归的历史与现状(CVPR'19 引用)§5
p27奇点与不连续性的数学定义§5
p28欧拉角的不连续性(0 vs 2π)§5
p29轴角的边界问题(θ=0、θ=π)§5
p30四元数双重覆盖与半球的矛盾§5
p31连续表示:6D 表示思想§6
p326D 表示定义:矩阵前两列§6
p33Gram-Schmidt 映射到旋转矩阵§6
p349D 表示与 SVD 正交化(Levinson 引用)§6
p35对比实验:ModelNet10-SO3 单图旋转回归§5
p36主题页:Rotation Fitting§7 开头
p37方法二:预测物体坐标再求解旋转§7
p38正交 Procrustes 问题定义§7.1
p39解析解:$A = UV^\top$§7.1
p40-41证明(Read by Yourself)§7.1(证明思路)
p42约束 Procrustes:det 修正§7.1(红框)
p43联合求解 R 与 T:中心化三步法§7.2
p44离群点问题:SVD 敏感,需要 RANSAC§7.3
p45RANSAC 思想(Read by Yourself)§7.3
p46-52RANSAC 直线拟合示例(Read by Yourself)§7.3
p53PnP 算法:2D-3D 对应 + 内参求位姿§7(附录 A 术语)
p54主题页:实例级位姿估计§8.1 开头
p55实例级定义:小集合已知实例(PoseCNN)§8.1
p56-57PoseCNN 网络结构(图源 Yu Xiang)§8.1
p58PoseCNN 平移估计§8.1
p59PoseCNN 旋转估计:回归四元数§8.1
p60-62PoseCNN 结果与可视化§8.1
p63LINEMOD 数据集介绍§8.1
p64实例级方法的局限§8.1
p65主题页:类别级位姿估计§8.2 开头
p66(无文字配图页)§8.2
p67NOCS(王鹤 et al., CVPR 2019 Oral)§8.2
p68类别级位姿与尺寸估计:无需 CAD 模型§8.2
p69挑战:类别内形状差异§8.2
p70表示:归一化物体坐标空间(1×1×1 box)§8.2
p71结尾页:下集预告 Vision and Grasping II页脚(下一章预告)

附C参考资源

连续编码的原始分析参见Zhou等:旋转表示连续性;SVD投影参见Levinson等:深度旋转估计中的SVD分析。

延伸阅读

  • Xiang et al., PoseCNN, RSS 2018:实例级 6D 位姿估计经典
  • Wang et al., NOCS, CVPR 2019 Oral:类别级位姿与尺寸估计(王鹤老师)
  • Zhou et al., On the Continuity of Rotation Representations, CVPR 2019:6D 表示原始论文
  • Newbury et al., Deep Learning Approaches to Grasp Synthesis(综述):抓取合成的全景
  • FoundationPose(CVPR 2024)与 SAM-6D(CVPR 2024):相关位姿估计方法;具体输入与实验设置见原论文

自测:检查坐标和旋转

  1. 六维旋转表示和六维物体位姿为什么不是同一概念?
  2. 网络输出两列几乎平行时,Gram-Schmidt会出现什么问题?
  3. 为什么SVD拟合之后还需要检查det(R)?
  4. 预测物体到相机的位姿后,怎样获得机器人坐标中的抓取目标?
参考思路

前者仅编码朝向,后者含位置;两列近共线使第二列垂直分量近零,归一化敏感;正交矩阵可能是反射;需用相机外参和物体内抓取标注按坐标链相乘。