MoveIt 2 中实现手眼标定

张开发
2026/4/27 10:15:09 15 分钟阅读

分享文章

MoveIt 2 中实现手眼标定
MoveIt 2 中实现手眼标定最简单高效的方法是使用官方推荐的moveit2_calibration包。这个包提供了完整的标定工具链支持 ArUco 和 ChArUco 标定板并带有图形化界面RViz 插件可以让你直观地完成标定数据的采集与计算。核心实现方案对比MoveIt 2 手眼标定的核心是建立相机与机械臂末端之间的精确变换关系。目前主要有两种实现方案方案说明适用场景moveit2_calibration(官方推荐)MoveIt 官方提供的手眼标定包集成度高支持多种标定板提供 RViz 图形界面。大部分 MoveIt 2 用户追求规范化和可视化流程。easy_handeye等第三方包ROS1经典的 ROS1 手眼标定工具有成熟的社区支持。仍在使用 ROS1 或从 ROS1 迁移过来的项目。注意目前 MoveIt 2 的moveit2_calibration包仍在积极开发中功能正在逐步完善。如果你的项目对稳定性要求极高也可以考虑 ROS1 的成熟方案。详细步骤使用moveit2_calibration包以下流程以“眼在手上 (Eye-in-Hand)”配置为例这也是最常见的传感器安装方式。第一步环境准备安装依赖确保你已经安装了 ROS 2如 Humble, Jazzy和 MoveIt 2。准备标定板下载并打印一个 ChArUco 标定板。ChArUco 标定板比传统棋盘格精度更高。将其平整地贴在刚性的平板如亚克力板或铝板上并固定在工作空间中的一个位置。确认 TF 树确保你的机器人 URDF 中已正确定义了机械臂的基座 (base_link)、末端执行器 (tool0或ee_link) 等关键坐标系。第二步下载与编译创建一个新的工作空间并克隆代码bashmkdir -p ~/moveit2_calibration_ws/src cd ~/moveit2_calibration_ws/src git clone https://github.com/AndrejOrsula/moveit2_calibration.git这个moveit2_calibration是一个社区维护的、为 ROS 2 移植的版本是目前可用的选择之一。安装依赖并编译bashcd ~/moveit2_calibration_ws rosdep install -r --from-paths src --ignore-src --rosdistro $ROS_DISTRO -y colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPERelease source install/setup.bash第三步运行标定程序以“眼在手上”为例启动标定程序。这通常是一个 launch 文件它会启动机器人驱动、MoveIt、RViz 和标定插件。bash# 注意具体 launch 文件名请以你下载的仓库说明为准类似如下格式 ros2 launch moveit_calibration_demos gz_eye_in_hand_charuco.launch.py第四步采集标定数据在 RViz 中操作launch 文件启动后RViz 界面会出现一个标定面板按照提示操作规划运动通过 MoveIt 的交互式标记将机械臂移动到第一个位置确保标定板清晰地出现在相机视野中。检测标定板点击标定面板中的 Take Sample 或类似按钮。系统会通过相机识别标定板获取标定板在相机坐标系下的位姿。读取此时机械臂的关节角度通过 MoveIt 计算出末端执行器在机器人基座坐标系下的位姿。改变姿态将机械臂移动到另一个完全不同的位置和角度建议姿态差异要大但标定板要始终在视野内再次点击 Take Sample。重复采样重复步骤 2-3采集 15-25 组数据。重投影误差Reprojection Error是衡量数据质量的关键指标当误差值趋于稳定时说明数据量足够。第五步计算并保存结果采集足够的数据后点击 Calibrate 按钮。系统会求解出相机到机械臂末端的变换矩阵即camera_link到ee_link的变换并显示在界面上。最后将标定结果保存为一个 YAML 文件。第六步集成到 MoveIt 配置将上一步生成的 YAML 文件内容集成到你机器人的 URDF 或一个单独的.launch.py文件中通过robot_state_publisher发布camera_link到ee_link的静态变换 (static_transform_publisher)。重启 MoveIt此时你的 TF 树应该完整了相机看到的物体才能被准确变换到机械臂的规划坐标系中。常见问题与避坑指南虚拟机内存不足如果你在虚拟机中进行编译建议分配4GB 以上内存否则编译moveit_calibration时可能因内存耗尽而失败。ROS 版本兼容性注意检查你使用的moveit2_calibration分支是否与你的 ROS 2 发行版如 Humble, Jazzy兼容moveit2_calibration包在 ROS 2 下仍在快速发展不同分支可能存在 API 差异。标定数据质量采样的机械臂姿态差异性越大标定结果越精确。避免在同一小片区域采集多组相似数据。TF 树完整性标定前确保机械臂的 URDF 中没有camera_link到ee_link的变换否则会和标定结果冲突导致 TF 树报错。标定板刚性固定标定板必须用刚性方式如夹具、胶带固定不能有丝毫晃动。人手扶着的轻微抖动会严重影响标定精度。验证与闭环标定完成后必须进行实际验证。一个简单有效的方法是在相机视野内放置一个已知位置的物体如一个固定的 ArUco 码。让 MoveIt 规划机械臂末端去触碰该物体。观察末端执行器与实际物体的位置偏差。如果偏差在 1-2 厘米以内通常是一个可接受的结果。如果偏差很大如超过 5 厘米则需要重新检查标定流程或优化采样数据。

更多文章