一个点,多种坐标
桌面上的同一点,可以写成物体系中的 [0.1, 0, 0],也可以写成相机系中的 [0.3, -0.2, 0.8]。两组数字描述的是同一个点。
Mental Model
坐标系是一套带原点和方向的测量基准;坐标只是某个几何对象在这套基准下的数值表达。换坐标系时,物理世界没有变化,变化的是数字。
桌面上的同一点,可以写成物体系中的 [0.1, 0, 0],也可以写成相机系中的 [0.3, -0.2, 0.8]。两组数字描述的是同一个点。
一个坐标系相对另一个坐标系的位置和朝向,可以用旋转和平移描述。所谓“物体位姿”,本质上是物体系相对参考系的位姿。
刚体变换不会弯曲或缩放空间。它只把点、方向和坐标轴从一种表达翻译成另一种表达,同时保持距离和夹角。
几何对象
A 系表达
B 系表达
Notation Contract
不同论文和代码库会使用 T_AB、T_BA、pose、extrinsic 等含糊写法。本专题固定使用带上下标的 frame 记号,让每一步都能检查输入和输出。
Passive view · 本站默认
Active view
Interactive Lab
实验室使用完整 3D 平移与 ZYX 欧拉角构造旋转。先编辑相机在世界中的位姿 WTC,再编辑物体在相机中的位姿 CTO,系统实时计算 WTO 及其逆。
Interactive · SE(3)
Composition result
Point transform
输入物体坐标系中的点 Op,实验室会通过 WTO 得到它在世界坐标系中的表达 Wp。
注意:点本身没有移动;改变的是描述它所使用的坐标基准。
Frame Atlas
一个实际系统通常不是只有 object 和 camera 两个 frame。数据采集、SLAM、机器人和抓取会不断增加新的参考系,关键是为每条边定义清楚方向。
固定在 CAD 或扫描模型上的局部坐标系。模型点、3D 包围盒和对称轴都以它为基准。
固定在相机光心上的三维坐标系。6D 物体姿态通常先表达为物体相对相机的变换。
用于跨帧、跨相机或跨设备保持一致的全局参考系,在 SLAM 中通常对应 map 或 world。
机器人链路常包含 base、end-effector、tool center point 和 grasp frame 等多个参考系。
图像中的 (u, v) 通常从左上角开始,u 向右、v 向下。三维相机点需要先除以深度,再经过内参 K 才能得到像素;这个透视投影不能只靠一个 SE(3) 刚体变换完成。
Convention Atlas
坐标系统没有天然唯一的选法。OpenCV、ROS、BOP、Blender 和图形学管线各自有合理约定;出错通常发生在约定交界处。
| 生态 / 软件 | 典型 frame | 轴方向 | 常见变换语义 | 单位 |
|---|---|---|---|---|
| OpenCV 相机 | Camera / optical | +x 向图像右,+y 向图像下,+z 沿光轴向前 | rvec、tvec 通常把物体或世界点变到相机系 | 由输入数据决定 |
| BOP | Model / camera / world | 全部右手系;相机遵循 OpenCV;模型通常 +z 向上 | cam_R_m2c、cam_t_m2c:model → camera | 模型与平移为 mm |
| ROS body | base_link 等 | +x 向前,+y 向左,+z 向上 | TF 表达 frame 之间的父子关系,必须看 header / child | m、rad(SI) |
| ROS optical | *_optical | +x 向右,+y 向下,+z 向前 | 专门与常见相机成像约定对齐 | m、rad(SI) |
| Blender | World / object / camera local | 世界 +z 向上;相机通常沿局部 -z 看,局部 +y 向上 | matrix_world 常表示 local → world;导入导出可重映射轴 | Blender Unit,可配置 |
| OpenGL 风格视图 | Eye / view | +x 向右,+y 向上,镜头通常看向 -z | view matrix 通常是 camera pose 的逆 | 由应用决定 |
不要靠记忆猜符号
例如,从 OpenCV optical frame 转向一种 x-right、y-up、z-backward 的图形学 view frame,常见轴翻转是 diag(1, -1, -1)。但实际项目仍应根据源和目标定义逐轴验证,而不是复制一段不带语境的转换代码。
Task Chains
同一套复合与求逆规则贯穿 PnP、相机定位、SLAM、手眼标定和机器人抓取。下面用 frame 记号把常见语义彻底展开。
OpenCV 风格 PnP 通常返回 CTO:它把物体模型点从 O 系变到 C 系,然后通过相机内参投影。
视觉算法常用外参 CTW 把世界点送入当前相机;轨迹可视化通常想要的是相机在世界中的位姿 WTC。
设 B 为机器人基座、E 为末端、C 为手上相机、O 为物体,则物体在基座中的位姿由三段已知变换组成。
若抓取模板给出夹爪目标 G 在物体系中的位姿 OTG,则可以继续接到机器人基座中。
Worked Example
相机系 C 相对世界系 W 绕 z 轴旋转 90°,相机原点位于世界坐标 [1, 0, 0]。一个点在相机系中的坐标为 [0.5, 0, 1]。
Debug Protocol
最有效的排错方法,是把隐含语义重新写出来,并用可视化与不变量逐层缩小范围。
把 p、R、t、T 暂时全部改写成 Ap、ATB。如果无法标注,说明变量语义本身就不清楚。
ATBCTD 不能直接相乘,因为中间的 B 与 C 不一致。
把 [0,0,0,1] 和三个单位轴分别送入变换,比随机点更容易解释平移、轴翻转和旋转方向。
应满足 RTR≈I、det(R)≈+1,齐次矩阵最后一行为 [0,0,0,1]。
把物体系 xyz 轴、3D 框和 CAD 轮廓投影回图像,方向错误通常会立刻暴露。
先排除 mm/m、度/弧度、行/列向量、变换方向和 OpenCV/OpenGL 轴差异,再分析网络预测质量。
Next topic · 03