在相机和机器人坐标系之间转换欧拉角

时间:2021-01-13 13:39:49

标签: python opencv robot euler-angles aruco

我的问题很简单,但很困惑,因为我个人还没有角度和角度转换的经验。

基本上,我需要定位附有单个 AruCo 标记的对象的位置,然后将该对象(标记)的 3d 坐标和姿势发送给机器人。请注意,我使用的机器人模型是ABB制造的工业机器人,我发送的3d坐标已经转换为机器人坐标系。

撇开坐标问题,我用立体相机解决了这个问题。但是,我发现姿势问题是如此困难,尤其是在将 AruCo 标记 w.r.t 相机的姿势转换为机器人坐标系时。下面的图片代表了两个坐标系,一个是相机,一个是机器人。

Coordinate System

我从 AruCo Marker 收集的角度被转换成欧拉角,这些方法是从 OpenCV 库中应用的:

def PoseCalculate(rvec, tvec, marker):
    rmat = cv2.Rodrigues(rvec)[0]
    P = np.concatenate((rmat, np.reshape(tvec, (rmat.shape[0], 1))), axis=1)
    euler = -cv2.decomposeProjectionMatrix(P)[6]
    eul = euler_angles_radians
    yaw = eul[1, 0] 
    pitch = eul[0, 0]
    roll = eul[2, 0]
    return (pitch, yaw, roll)

结果是代表标记姿势的三个角度。 Pitch 表示标记围绕 X 轴(相机)旋转时的旋转,Y 轴(相机)的偏航和 Z 轴(相机)的滚动。 那么,如何将这三个角度转换为机器人坐标系?

Sample Angles Collected

感谢您阅读这么长的问题,并祝大家在 2021 年新的一年身体健康!

0 个答案:

没有答案