Skip to content

踩坑github.com7 天前

星海图 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)) 做精确时间戳插值。

来源

本页事实对应的公开页面,以原文为准。

  1. GitHub OpenGalaxea/GalaxeaManipSim访问 2026-10-21
  2. GitHub userguide-galaxea/URDF访问 2026-10-21