HALCON警告中的HAND-EYE校准中的姿势对不一致

问题描述

我正在尝试使用UR5合作机器人的HALCON进行手眼校准。我使用的是'hand_eye_stationarycam_calibration.hdev。但是每次,我都会收到一条警告:“不一致的姿势对enter image description here

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

解决方法

尝试查看代码行:

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)

EXPLANATION ON ROBOT ORIENTATION from Universal Robotics