我正在尝试使用UR5合作机器人的HALCON进行手眼校准。我使用的是'hand_eye_stationarycam_calibration.hdev。但是每次,我都会收到一条警告:“不一致的姿势对enter image description here
有人可以帮助我解决这个问题吗?我也尝试了所有姿势类型,但警告和错误结果仍然存在。
答案 0 :(得分:0)
尝试查看代码行:
check_hand_eye_calibration_input_poses (CalibDataID, 0.001, 0.005, Warnings)
有一个旋转公差(此处为0.001)和一个平移公差(此处为0.005)。尝试增加这些值,看看是否可以消除错误。
有时候我以前遇到这个问题是因为我的单位不一致。例如,机器人姿势的平移单位均为“ mm”,而我的相机单位为“ m”。仔细检查翻译单位,并确保它们匹配。
我还相信UR5机械手可能默认使用轴角表示形式。您必须确保相机姿势和机器人姿势都采用相同的格式。有关Universal的说明以及如何在不同格式之间进行转换,请参见下面的链接。您可以使用通用脚本来转换为横摇,俯仰,偏航惯例,也可以采用轴角度表示并将其转换为Halcon。
这是在Halcon中如何从轴角度转换为“ abg”姿势类型的示例。在这种情况下,相机返回了7个值:3个描述了X,Y,Z的平移,还有4个描述了使用角度轴约定的旋转的值。然后将其转换为姿势类型,在该姿势类型中,首先绕Z轴执行旋转,然后绕着新的Y轴,然后绕着新的X轴(与我使用的机器人匹配)进行旋转。 Halcon中另一个常见的姿势类型是“ gba”,您可能需要那个姿势。一般来说,我相信可以使用12种不同的旋转组合,因此您应该验证相机和机器人同时使用了哪种旋转组合。
通常,我会尽量避免使用“滚动”,“俯仰”和“偏航”这两个词,因为我发现它过去会引起混乱。如果平移单位以X,Y,Z给出,则我更喜欢以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)