0

我正在尝试使用 HALCON 为 UR5 协作机器人执行手眼校准。我正在使用'hand_eye_stationarycam_calibration.hdev。但每次,我都会收到一条警告:'不一致的姿势对在此处输入图像描述

有人可以在这个问题上帮助我吗?我也尝试了所有的姿势类型,但警告和错误结果仍然存在。

4

1 回答 1

0

尝试查看代码行:

check_hand_eye_calibration_input_poses (CalibDataID, 0.001, 0.005, Warnings)

存在旋转公差(此处为 0.001)和平移公差(此处为 0.005)。尝试增加这些值,看看是否可以消除错误。

有时当我过去遇到这个问题时,是因为我的单位不一致。例如,机器人姿势的平移单位都是“mm”,但我的相机单位是“m”。仔细检查翻译单元并确保它们匹配。

此外,我相信 UR5 机器人可能会默认使用轴角表示。您必须确保您的相机姿势和机器人姿势都采用相同的格式。有关 Universal 的说明以及如何在不同格式之间进行转换,请参阅下面的链接。您可以使用 Universal 的脚本将其转换为滚动、俯仰、偏航约定,也可以采用轴角表示并在 Halcon 中进行转换。

这是我如何在 Halcon 中从轴角转换为“abg”姿势类型的示例。在这种情况下,相机返回 7 个值:3 个描述 X、Y、Z 的平移和 4 个描述使用角度轴约定的旋转的值。然后将其转换为姿势类型,其中第一次旋转围绕 Z 轴执行,然后是新的 Y 轴,然后是新的 X 轴(与我使用的机器人匹配)。Halcon 中另一种常见的姿势类型是“gba”,您可能需要它。一般来说,我相信有 12 种不同的旋转组合是可能的,因此您应该验证哪一种用于相机和机器人。

一般来说,我尽量避免使用滚动、俯仰和偏航这些术语,因为我过去曾看到它会引起混淆。如果平移单位在 X、Y、ZI 中给出,则更喜欢在 Rx、Ry 和 Rz 中给出旋转,然后是旋转顺序。

    *Pose of Object Relative to Camera
get_framegrabber_param (NxLib, '/Execute/halcon1/Result/Patterns/PatternPose/Rotation/Angle', RotationAngle)
get_framegrabber_param (NxLib, '/Execute/halcon1/Result/Patterns/PatternPose/Rotation/Axis/\\0', Axis0)
get_framegrabber_param (NxLib, '/Execute/halcon1/Result/Patterns/PatternPose/Rotation/Axis/\\1', Axis1)
get_framegrabber_param (NxLib, '/Execute/halcon1/Result/Patterns/PatternPose/Rotation/Axis/\\2', Axis2)

get_framegrabber_param (NxLib, '/Execute/halcon1/Result/Patterns/PatternPose/Translation/\\0', Txcam)
get_framegrabber_param (NxLib, '/Execute/halcon1/Result/Patterns/PatternPose/Translation/\\1', Tycam)
get_framegrabber_param (NxLib, '/Execute/halcon1/Result/Patterns/PatternPose/Translation/\\2', Tzcam)    
    
axis_angle_to_quat(Axis0, Axis1, Axis2, RotationAngle, QuatObjRelCam)
quat_to_hom_mat3d(QuatObjRelCam, MatObjRelCam)    
MatObjRelCam[3] := Txcam/1000 
MatObjRelCam[7] := Tycam/1000 
MatObjRelCam[11] := Tzcam/1000 
hom_mat3d_to_pose(MatObjRelCam, PoseObjRelCam)
convert_pose_type (PoseObjRelCam, 'Rp+T', 'abg', 'point', PoseObjRelCam)

优傲机器人对机器人方向的解释

于 2020-09-21T16:10:41.360 回答