ChessboardLocalization 棋盘定位
ChessboardLocalization 算子用于对含有黑白棋盘格的标定板 2D 图像进行角点识别以及空间定位,从而得到棋盘格内角点的像素列表,以及棋盘格原点在RGB镜头3D坐标系下的位姿(位置和姿态)。
“棋盘格原点“对应内角点的四个边缘点的某个点,具体的对应方式可以参照文档下述的案例。
每一张标定图像中必须要包含黑白格所有的内角点。在内角点清晰可见的基础上,最边缘的黑白格被遮挡一部分不影响结果识别。
拍摄标定板图像时,相机和标定板要保持静止,并且两者距离不能过远,否则容易导致角点像素模糊。
该算子一般用于手眼标定。手眼标定过程中标定图像不应低于6张,建议15张或更多。拍摄完一张标定板图像后,相机和标定板之间的距离以及相对位姿需要重新调整。调整范围需要尽量覆盖到实际工作场景中的整个3D空间。
算子参数
-
棋盘行数/number_rows
:棋盘格标定板的格子行数。默认值:6。 -
棋盘列数/number_colors
:棋盘格标定板的格子列数。默认值:9。(行列区分见功能演示) -
棋盘格尺寸毫米/square_size_in_millimeter
:棋盘格标定板的每个小格的长度。默认值:30。单位:mm。 -
相机标定文件/calib_file
:相机RGB镜头的出厂标定参数文件路径。参数文件包括外参( RGB 镜头到 3D 镜头的转换矩阵),内参以及畸变参数。当 calib_info 的输入端口有连接时,则该参数无效。当 calib_info 的输入端口没有连接时,则必须给该参数赋值。 -
坐标/pose
:设置棋盘格原点 pose 在 3D 视图中的可视化属性。-
打开 Pose 可视化。
-
关闭 Pose 可视化。
-
设置 Pose 的尺寸大小。取值范围:[0.001,10]。默认值:0.1。
-
-
图像/image
:设置 result 在 2D 视图中的可视化属性。-
打开 result 可视化。
-
关闭 result 可视化。
-
数据信号输入输出
输入:
-
image
:-
数据类型:Image
-
输入内容:标定板图像
-
-
calib_info
:-
数据类型:CalibInfo
-
输入内容:相机RGB镜头出厂标定参数
-
输出:
-
pose
:-
数据类型:Pose
-
输出内容:棋盘格标定板的原点在相机 RGB镜头 3D 坐标系下的位姿
-
-
points
:-
数据类型:ImagePoints
-
输出内容:棋盘格标定板的像素列表(一系列 2d 点)
-
-
result
:-
数据类型:Image
-
输出内容:使用像素列表渲染后的结果图像
-
功能演示
使用 ChessboardLocalization 算子对含有标定板的 2D 图像进行角点识别以及空间定位。得出棋盘格标定板的像素列表,同时得出棋盘格原点在 3D 空间中的位置和姿态。
步骤1:算子准备
添加 Trigger、Load(2个)、ChessboardLocalization 算子至算子图。
步骤2:设置算子参数
-
设置 Load 算子参数:
-
类型 → Image
-
文件 → → 选择图像文件名( example_data/ChessboardLocalization/rgb.png )
-
图像 → 可视
-
-
设置 Load 算子参数:
-
算子名称 →LoadPointCloud
-
类型 → PointCloud
-
文件 → → 与加载的图像匹配的点云 ( example_data/ChessboardLocalization/cloud.pcd )
-
点云 → 可视
-
-
设置 ChessboardLocalization 算子参数:
-
棋盘行数 → 6(实际工作中根据所拍摄的标定板的实际数据更改)
-
棋盘列数 → 9(实际工作中根据所拍摄的标定板的实际数据更改)
-
棋盘格尺寸毫米 → 30 (实际工作中根据所拍摄的标定板的实际数据更改)
相机标定文件 → example_example_data/ty_chessboard_calib.txt (实际工作中赋值实际所用相机的rgb参数文件赋值)
-
坐标 → 可视
-
图像 → 可视
-
步骤3:连接算子
步骤4:运行
点击 RVS 的运行按钮,触发 Trigger 完成第一次的运行。
运行结果
-
结果如下图所示。得出棋盘格标定板的像素列表,同时得出棋盘格原点在 3D 空间中的位置和姿态。
说明:受限于成像误差、出厂标定参数误差以及计算误差,下图所得的棋盘格原点位姿同真实值有一些偏移,其真实值应该同棋盘格左上角内角点重合。所以我们在进行手眼标定计算时,一般使用多组标定图像来进行回归运算减少误差。
-
将 ChessboardLocalization 算子的
棋盘行数
、棋盘列数
数值对换。重新运行,结果如下图所示(两幅图的 3d 观察视角保持一致)。容易发现,红色的 x 轴始终沿着目标设定的棋盘列数
方向。上图运行时棋盘列数
:9,下图运行时棋盘列数
: 6。