外观
踩坑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
故障现象与报错
- 使用头部 ZED 2i 相机识别桌面物体 3D 点云并转换到
base_link规划双臂抓取时,末端夹爪总是固定向一侧偏移约 6 cm; - 躯干升降关节(Torso Lift)上下移动后,视觉点云在 RViz2 中出现短暂滞后重影。
根因分析
- 双目相机中心 frame 与左目光学 frame 混用:ZED 2i 的深度图与点云默认对齐在左目光学中心(
zed_left_camera_optical_frame),而相机物理外壳中心(zed_camera_center)与左目之间存在 6 cm(半基线baseline/2 = 60mm) 的水平偏移。若将手眼标定结果挂在zed_camera_center却直接按左目点云坐标解算逆运动学,必然产生 6cm 恒定误差。 - 躯干升降关节
/joint_states与相机硬件曝光时间戳不同步:在躯干运动过程中,若直接使用tf2::TimePointZero查询最新 TF 而非按图像 header 时间戳插值,会导致坐标变换滞后。
解决步骤
- 统一以
zed_left_camera_optical_frame作为点云与手眼标定基准系: 检查相机发布的PointCloud2消息头header.frame_id,使用easy_handeye2或 AprilTag 标定板在左目图像下求解torso_link -> zed_left_camera_optical_frame的外参变换。 - 开启主机与机载 Orin 的 Chrony PTP/NTP 亚毫秒时间同步: 确保
/joint_states与 ZED 2i 图像流使用同一系统时钟源,并在 TF 查询时使用lookupTransform(target_frame, msg->header.frame_id, msg->header.stamp, tf2::Duration(50ms))做精确时间戳插值。
来源
本页事实对应的公开页面,以原文为准。
- GitHub OpenGalaxea/GalaxeaManipSim访问 2026-10-21
- GitHub userguide-galaxea/URDF访问 2026-10-21