# 星海图 Galaxea R1 / R1 Lite 双臂与头部 ZED 2i 相机手眼标定 TF 时间戳不同步与抓取偏移

> 原文链接：https://robotics.hellobike.com/pitfalls/galaxea-r1-zed2i-arm-hand-eye-calib
> 频道：pitfalls | 更新日期：2026-10-21 | 标签：星海图, Galaxea R1, ZED 2i, 手眼标定, 双臂协同, TF树
> 核心摘要：轮式双臂底盘移动后机械臂末端抓取偏移 2-4cm，源于 ZED 2i 光学中心坐标系混淆与 ROS 2 TF 树正运动学关节角零位偏差。

# 星海图 Galaxea R1 / R1 Lite 双臂与头部 ZED 2i 相机手眼标定 TF 时间戳不同步与抓取偏移

## 硬件与软件环境
- **机型**：星海图 Galaxea R1 / R1 Lite（全向移动底盘 + 升降躯干 + 双 6/7 DoF 机械臂 + 头部 Stereolabs ZED 2i 双目相机）
- **软件栈**：Ubuntu 22.04 + ROS 2 Humble + `userguide-galaxea/URDF`

## 故障现象与报错
1. 使用头部 ZED 2i 相机识别桌面物体 3D 点云并转换到 `base_link` 规划双臂抓取时，末端夹爪总是固定向一侧偏移约 **6 cm**；
2. 躯干升降关节（Torso Lift）上下移动后，视觉点云在 RViz2 中出现短暂滞后重影。

## 根因分析
1. **双目相机中心 frame 与左目光学 frame 混用**：ZED 2i 的深度图与点云默认对齐在**左目光学中心**（`zed_left_camera_optical_frame`），而相机物理外壳中心（`zed_camera_center`）与左目之间存在 **6 cm（半基线 `baseline/2 = 60mm`）** 的水平偏移。若将手眼标定结果挂在 `zed_camera_center` 却直接按左目点云坐标解算逆运动学，必然产生 6cm 恒定误差。
2. **躯干升降关节 `/joint_states` 与相机硬件曝光时间戳不同步**：在躯干运动过程中，若直接使用 `tf2::TimePointZero` 查询最新 TF 而非按图像 header 时间戳插值，会导致坐标变换滞后。

## 解决步骤
1. **统一以 `zed_left_camera_optical_frame` 作为点云与手眼标定基准系**：
   检查相机发布的 `PointCloud2` 消息头 `header.frame_id`，使用 `easy_handeye2` 或 AprilTag 标定板在左目图像下求解 `torso_link -＞ zed_left_camera_optical_frame` 的外参变换。
2. **开启主机与机载 Orin 的 Chrony PTP/NTP 亚毫秒时间同步**：
   确保 `/joint_states` 与 ZED 2i 图像流使用同一系统时钟源，并在 TF 查询时使用 `lookupTransform(target_frame, msg-＞header.frame_id, msg-＞header.stamp, tf2::Duration(50ms))` 做精确时间戳插值。

## 原始参考来源 (Sources)

- [GitHub OpenGalaxea/GalaxeaManipSim](https://github.com/OpenGalaxea/GalaxeaManipSim)
- [GitHub userguide-galaxea/URDF](https://github.com/userguide-galaxea/URDF)