AXXBSolver AXXB标定法

AXXBSolver 算子通过求解 AX = XB 方程 中的最小误差转换关系,获得相机坐标系与机器人坐标系的最佳转换矩阵,即手眼标定的结果,从而实现机器人与相机之间的坐标转换。其中, A 为机器人连杆末端在机器人坐标系下的位姿数据组,B 为标定板在相机坐标系下的位姿数据组。标定结果以 Pose 类型形式呈现。

算子参数

  • 结果坐标/result_pose:设置标定结果 Pose 在 3D 视图中的可视化属性。

    • icon_visOn 打开标定结果 Pose 可视化。

    • icon_visOff 关闭标定结果 Pose 可视化。

    • icon_size 设置标定结果 Pose 的尺寸大小。取值范围:[0.001~10]。默认值:0.1。

数据信号输入输出

输入:

  • tcp_poses

    • 数据类型:PoseList

    • 输入内容:机器人末端坐标组

  • chessboard_poses

    • 数据类型:PoseList

    • 输入内容:标定板坐标组

说明:建议使用15组(或更多组)棋盘格标定板坐标组数据。最少不低于6组,否则无法保证精度。

输出:

  • result_pose

    • 数据类型:Pose

    • 输出内容:手眼标定结果

功能演示

使用 AXXBSolver 算子获得相机坐标系与机器人坐标系的手眼标定的结果。

步骤1:算子准备

添加 Trigger、Load ( 2个 )、AXXBSolver算子至算子图。

步骤2:设置算子参数

  1. 设置 Load 算子参数:

    • 算子名称 → chessboardPose

    • 类型 → pose

    • 文件 → icon_more→ 选择pose文件名 ( example_data/AXXB/chessboard.txt )

    • 坐标列表 → icon_visOn 可视

  2. 设置 Load_1 算子参数:

    • 算子名称 → tcpPose

    • 类型 → pose

    • 文件 → icon_more→ 选择pose文件名 ( example_data/AXXB/tcpPose.txt )

    • 坐标 → icon_visOn 可视

  3. 设置 AXXBSolver 算子参数:结果坐标 → icon_visOn可视

步骤3:连接算子

Calibration_AXXBSolver_nodes

步骤4:运行

点击 RVS 运行按钮,触发 Trigger 算子。

运行结果

  1. 运行结果显示如下,3D 视图中分别展示了 Load(chessboardPose)、Load(tcpPose)、AXXBSolver 算子的可视化结果。

    Calibration_AXXBSolver_loadresult3

  2. 查看日志,显示标定结果和误差值。

    Calibration_AXXBSolver_log

    以上图为例:

  • result_pose 为标定结果 Pose,与算子 AXXBSolver 输出一致。

  • positional error 为标定位置误差(与输入数据单位一致,本例中为“米”),在本例中 0.000361303 为平均误差,0.000152118 和 0.000600956 分别为最小误差和最大误差。

说明:精度误差值符合项目需求即标定完成,若误差略大,超过项目需求可再次重复标定流程,录制更多数据进行标定。若反复多次标定结果均不理想,需结合硬件设备性能考虑精度需求。手眼标定误差由相机误差和机械臂误差叠加。若标定误差巨大,有可能是录入数据格式或顺序不正确,详见 教学案例 -> 自动拆垛 -> 手眼标定部分。