1. 项目背景与问题描述
在ROS机械臂开发中,手眼标定是连接视觉系统与机械臂运动控制的关键环节。完成标定后,理论上相机坐标系与机械臂末端执行器坐标系之间的变换关系应该准确无误。但实际开发中,我们团队遇到了两个棘手的问题:
- RViz中相机模型显示异常:标定后的相机模型在RViz可视化工具中出现位置偏移或姿态错误
- 点云"侧漏"现象:相机采集的点云数据在RViz中显示时,部分点云会"泄漏"到场景之外
这些问题直接影响了后续的视觉伺服控制和抓取规划。经过两周的排查和验证,我们最终找到了系统性解决方案。本文将详细记录问题成因和解决过程,分享给遇到类似困境的开发者。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 手眼标定原理与实施要点
2.1 手眼标定的数学基础
手眼标定解决的是求解相机坐标系(C)与机械臂末端执行器坐标系(E)之间的固定变换关系^T_E^C。根据相机安装位置不同,分为两种模式:
- Eye-in-hand(眼在手上):相机固定在机械臂末端
- Eye-to-hand(眼在手外):相机固定在基座或其他静态位置
我们采用的是Eye-in-hand配置,其标定方程可表示为:
^T_E^C = (^T_B^E)^{-1} * ^T_B^C
其中^T_B^E是机械臂正运动学给出的末端位姿,^T_B^C需要通过标定板检测获得。
2.2 标定实施中的关键参数
使用ROS的aruco_ros包进行标定时,有几个关键参数直接影响标定质量:
xml复制<param name="marker_size" value="0.1"/> <!-- 标定板实际物理尺寸 -->
<param name="reference_frame" value="camera_link"/> <!-- 参考坐标系 -->
<param name="camera_frame" value="camera_color_optical_frame"/> <!-- 相机光学坐标系 -->
特别注意:必须确保marker_size与实物完全一致,误差需控制在±0.1mm以内
3. 问题诊断与解决方案
3.1 RViz中相机模型异常分析
现象表现:
- 相机模型在RViz中显示位置与预期不符
- 移动机械臂时,相机模型与点云数据运动不同
