ROS2 RGB相机手眼标定moveit2_handeye_cali
目录
2. MoveIt2 Hand-Eye Calibration 介绍
4.1克隆moveit2_handeye_cali手眼标定工具包
0. 标定方式
1. 工具标定(夹爪等)
2. 相机内参标定
3. realsense 相机自校正
1)板载矫正
https://blog.musnow.top/posts/8572288919/index.html
2)深度矫正
【[2023Q2更新] Intel英特尔RealSense实感深度摄像头 自校准(Self-Calibration) 操作步骤讲解 D400系列适用】 https://www.bilibili.com/video/BV1rg4y1j7kp/?share_source=copy_web&vd_source=793478fb4ffa1744f3dc92994b325a87
3)动态矫正
【[2023Q2更新] Intel英特尔RealSense实感深度摄像头 动态校准(Dynamic Calibrator) 操作步骤讲解 D400系列适用】 https://www.bilibili.com/video/BV1ML41167m5/?share_source=copy_web&vd_source=793478fb4ffa1744f3dc92994b325a87
1. 背景及参考
25.07选择ros2手眼标定时,由于缺少资料,故选用了easy hand_eye2,对比两种标定方式,标定过程
一致性:
采样数据量一致,都需手动,标定准确性稍微考验手法。
RGB图像获取深度等信息,2.5D维度
优点:
1.moveit2_handeye_cali,可作为RVIZ插件,部分参数设置可视化,降低上手难度,moveit官方推荐,多次标定结果相差不大(相比easy hand_eye2手动)
2. ChArUco 的准确性更高,可识别范围更大
总的来说,标定过程差不多,就它的优点来说,便推荐大家使用
参考b站博主:
2. MoveIt2 Hand-Eye Calibration 介绍
MoveIt2 Hand-Eye Calibration 是 MoveIt2 框架中的一个功能模块,用于解决机器人手眼标定问题。手眼标定是指确定机器人末端执行器(手)与摄像头(眼)之间的相对位姿关系,这对于视觉引导的机器人操作至关重要。
MoveIt2 Hand-Eye Calibration 基于ROS2框架,利用OpenCV库的hand-eye等标定算法(例如Tsai-Lenz算法)进行标定计算。它支持以下功能:
通过tf采样机器人位置和跟踪系统输出。 计算眼在基座(eye-on-base)或眼在手部(eye-in-hand)的标定矩阵。
计算眼在基座(eye-on-base)或眼在手部(eye-in-hand)的标定矩阵。
存储和发布标定结果。
评估标定矩阵的准确性。
3.环境
-
Ubuntu22.04
-
ros2 humble
-
realsense camera等RGB相机
4.项目构建
4.1克隆moveit2_handeye_cali手眼标定工具包
如果colcon build编译失败,多半是缺少相关的moveit功能包
cd ~/ros_ws/src # 机械臂的工作空间
git clone https://gitclone.com/github.com/cheng9911/moveit2_handeye_calib.git
# 或者gitee
git clone https://gitee.com/lyx52/moveit2_handeye_calib.git
cd ~/ros_ws
colcon build
5.标定
5.1 启动机械臂的moveit控制launch文件
提示:标定前请确保机械臂的tf中已经存在camera_link(存在即可,无须初步设置),手动创建贴到末端初始 pose 000 0000 (urdf)
在启动的rviz中add添加如图,handeyeCalibration
5.2标定板打印
网站:
https://www.2weima.com/aruco.html
ChArUco 标定板
https://calib.io/zh/pages/camera-calibration-pattern-generator 打印,最好打印rviz中生成的图片(这样很多数据一致就无须修改)

设置如下参数:
行列 squares X,squaresY
Aruco dictionary 选择DICT_5×5
选择相机话题 color ,选择create target,最后保存 save target 图片,新建 word doc文档将图片原样插入文档,打印(电脑自带工具),100%比例转成pdf,使用打印机pdf打印
5.3 根据打印的标定板设置参数(按照原始数据打印图片)
Handeye Calibration
设置如下参数:(未列出的参数不用修改,特别px)
longest board side 个人认为是标定板图案部分最大长度
measured master size 个人认为是单个二维码长度
注意:关于参数和其他参数的意义和作用,欢迎提出建议修正
尺寸计算参考(因为本人按照生成的目标pdf打印标定板)
longest_board_size(m): 0.16
marker_size: 0.01467
选择相机话题,并生成目标,再启动rviz选择手眼标定话题可以看到标定板识别

5.3 Context设置
注意:
正确选择手眼标定的类型,手上eye in hand;
选择相机colcor frame (选择camera_link(无须转换))
选择末端frame (一般link6),
机械臂基座frame base_link等
就如官方所说,不需要特意设置近似接近位置姿态的初始pose(下图的pose是最终计算结果,采样5个数据以后可以查看error和 pose,实时显示结果)(可选择clear pose,基于前面标定位置,多次标定)

5.4 数据采集
数据采集
- 可以选择标定解算算法 Solver
- 选择自己的planner group
- 自行移动机械臂末端,改变位置姿态(确保时刻检测到标定板)
- 采样take sample 12组接近稳定,18组左右即可;
- 解算,可分别选择不同的算法solver 来比较区别,选择较好的(前三种)
- 可选择保存采样样本save sample , 保存相机到hand或base的pose save camera pose;
超过五组采样,reprojection error 中可以自行计算标定过程的偏差,效果,context实时显示
5.5 数据查看发布
标定结果查看有两种方式:
- 标定超过三组,context中会实时显示计算的相机相对位姿,标定完15组,显示的即为最终结果
- 或者通过save camera pose 保存的文件可以查看

如何要发布相机的tf变化可以参考:
moveit启动文件中添加tf静态变换即可,发布的tf如果方向不对 roll、pitch、和yaw相互替换或取反即可
6.注意
- A better option, however, is to combine the information from several poses to eliminate the target pose in the base frame from the equation 采集不同的姿态
- Be sure to include some rotation between each pair of poses, and don’t always rotate around the same axis–at least two rotation axes are needed to uniquely solve for the calibration 确保在每对姿势之间包括一些旋转,并且不要总是绕同一轴旋转——至少需要两个旋转轴来唯一地求解校准
- The calibration will improve significantly with a few more samples, and will typically plateau after about 12 or 15 samples 校准会随着更多样品的增加而显着改善,并且通常会在大约 12 或 15 个样品后趋于稳定
- Experiments have demonstrated that a ChArUco board gives more accurate results, so it is recommended ChArUco 板可以提供更准确的结果
- 结合了棋盘和aruco的优点,允许遮挡或局部视图,提供的角点更加准确等
7.参考及鸣谢
moveit/moveit_calibration at ros2
https://github.com/moveit/moveit_calibration/tree/ros2
更多推荐


所有评论(0)