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 视图中的可视化属性。

    • icon_visOn 打开 Pose 可视化。

    • icon_visOff 关闭 Pose 可视化。

    • icon_size 设置 Pose 的尺寸大小。取值范围:[0.001,10]。默认值:0.1。

  • 图像/image:设置 result 在 2D 视图中的可视化属性。

    • icon_visOn 打开 result 可视化。

    • icon_visOff 关闭 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:设置算子参数

  1. 设置 Load 算子参数:

    • 类型 → Image

    • 文件 → icon_more→ 选择图像文件名( example_data/ChessboardLocalization/rgb.png )

    • 图像 → icon_visOn 可视

  2. 设置 Load 算子参数:

    • 算子名称 →LoadPointCloud

    • 类型 → PointCloud

    • 文件 → icon_more→ 与加载的图像匹配的点云 ( example_data/ChessboardLocalization/cloud.pcd )

    • 点云 → icon_visOn 可视

  3. 设置 ChessboardLocalization 算子参数:

    • 棋盘行数 → 6(实际工作中根据所拍摄的标定板的实际数据更改)

    • 棋盘列数 → 9(实际工作中根据所拍摄的标定板的实际数据更改)

    • 棋盘格尺寸毫米 → 30 (实际工作中根据所拍摄的标定板的实际数据更改)

      相机标定文件 → example_example_data/ty_chessboard_calib.txt (实际工作中赋值实际所用相机的rgb参数文件赋值)

    • 坐标 → icon_visOn 可视

    • 图像 → icon_visOn 可视

步骤3:连接算子

Calibration_ChessboardLocalization

步骤4:运行

点击 RVS 的运行按钮,触发 Trigger 完成第一次的运行。

运行结果

  1. 结果如下图所示。得出棋盘格标定板的像素列表,同时得出棋盘格原点在 3D 空间中的位置和姿态。

    说明:受限于成像误差、出厂标定参数误差以及计算误差,下图所得的棋盘格原点位姿同真实值有一些偏移,其真实值应该同棋盘格左上角内角点重合。所以我们在进行手眼标定计算时,一般使用多组标定图像来进行回归运算减少误差。

    Calibration_ChessboardLocalZation_result

  2. 将 ChessboardLocalization 算子的 棋盘行数棋盘列数 数值对换。重新运行,结果如下图所示(两幅图的 3d 观察视角保持一致)。容易发现,红色的 x 轴始终沿着目标设定的 棋盘列数 方向。上图运行时 棋盘列数 :9,下图运行时 棋盘列数 : 6。

Calibration_ChessboardLocalZation_result2