先记住一句话
空间标定回答“这个像素在机器人哪里”,时间同步回答“这张图对应机器人何时”;两者任一错误,监督都会系统性偏移。
1. 传感器各自补什么信息
| 模态 | 强项 | 典型盲区 |
|---|---|---|
| 第三视角 RGB | 全局场景、目标与障碍 | 手部接触细节小、遮挡 |
| 腕部 RGB | 近距离几何、抓取接触 | 运动剧烈、上下文窄 |
| 深度/点云 | 尺度和三维位置 | 反光、透明、孔洞与噪声 |
| proprioception | 身体构型、高频稳定 | 不知道对象状态 |
| 力/触觉 | 接触、滑移、插入 | 校零、漂移、跨硬件不一致 |
2. 内参与外参
相机内参把相机坐标中的三维点投到像素;外参是两个坐标系之间的刚体变换。常见链条是:
pixel + depth → camera point
camera point -- T_base_camera --> robot base point
EEF point -- T_world_base --> world point
固定相机的外参相对 base 不变;腕部相机则随关节运动,通常需要 hand–eye calibration,并用当前正向运动学得到完整变换。矩阵方向必须写在命名里,例如 T_base_camera 表示把 camera 中坐标变到 base,不能只写 extrinsics。
3. 同步不是“找最近帧”就结束
机器人流常来自不同 clocks。相机曝光、图像到达、state 采样、命令发出和实际执行各有时间戳。最近邻匹配仅在时钟已对齐、抖动足够小的前提下合理;高频 state 更常先按时间插值,再对齐到 policy tick。
- 位置可以线性插值;旋转应使用 SO(3)/quaternion 合理插值。
- 动作应按“命令生效区间”对齐,而不是只看消息到达时间。
- 记录 raw timestamp、统一 clock 后 timestamp 和估计 latency,便于事后重建。
4. 延迟怎样进入数据
t0 相机曝光
t1 图像完成传输
t2 policy 开始 / 结束推理
t3 命令到控制器
t4 执行器真正响应
若训练把 $I(t_0)$ 配给 $a(t_4)$,模型学的是包含人类/系统反应延迟的策略。部署延迟改变后,动作相位就会错。补偿方法包括按实测延迟重对齐、给模型历史窗口、预测未来目标,或在训练中随机化延迟。
5. 上模型前的可视化检查
- 在图像上投影 robot joints/EEF,检查外参和时间是否一致。
- 并排播放多视角与 state/action 曲线,快速运动时逐帧检查。
- 用已知 AprilTag/标定板估计重投影误差,但还要看工作空间中的实际误差。
- 断开模型,用记录动作 replay 或建立简单 copy/lag baseline 检查语义。
6. 把误差换算成控制量
例 1:像素 + 深度反投影
焦距 $f_x=f_y=500$ px,主点 $(320,240)$;像素 $(420,290)$ 深度 1 m。相机坐标 $X=(420-320)×1/500=0.2$ m,$Y=0.1$ m,$Z=1$ m。
例 2:外参平移
若 camera→base 暂取单位旋转、平移 $[0.5,0,0.8]$ m,上例点变为 $[0.2,0.1,1]+[0.5,0,0.8]=[0.7,0.1,1.8]$ m。
例 3:状态插值
关节在 1.00 s 为 0.2 rad,1.01 s 为 0.3 rad;图像曝光 1.004 s。线性插值比例 0.4,角度 $0.2+0.4(0.3-0.2)=0.24$ rad。
例 4:延迟造成的位置偏差
末端移动速度 0.5 m/s,视觉与执行错位 80 ms,空间相位误差约 $0.5×0.08=0.04$ m,即 4 cm;对插孔任务已经非常大。
如果模型对静态任务很好、快速接触任务明显落后,先排查 latency、rolling shutter、腕相机模糊与动作频率,再扩模型。
自测
1. 内参和外参分别回答什么?
内参描述相机坐标到像素的投影;外参描述相机与机器人/世界坐标之间的刚体关系。
2. 腕部相机为什么不能只存一个固定外参?
它随末端运动,需要 hand–eye 标定加每时刻的机器人运动学。
3. 为什么重投影误差小仍可能控制失败?
标定可能只在标定板区域好,或时间错位、深度误差和控制延迟仍存在。
原始资料
DROID 的统一硬件、多视角与公开标定展示了规模化采集为何需要传感器协议;OpenCV calib3d 官方文档 给出投影与标定模型。