一、UR机器人座标系
默认情况下UR机器人的座标系如下图所示:
这里的TCP位置和座标系就是机器人末端,及机器人默认的TCP位置,其TCP配置如下图所示:
如果用户想要自己设计TCP的位置和座标就可以在这个基础上进行配置,这里的X,Y,Z,RX,RY,RZ表示用户自定义TCP与机器人默认TCP之间的关系。X,Y,Z表示位置关系,RX,RY,RZ是使用的旋转矢量法表示的姿态关系,旋转矢量法见下一节。
当UR机器人回零后,机器人默认的TCP相对于基座标系的位姿如下图:
注意这里是实际值,与理论值相比有一些误差,比如理论值X=0。这里的姿态描述方式使用的是旋转矢量法,见下一节。
二、UR机器人Pose的表示方式
UR机器人的Pose表示的是TCP座标系相对于基座标系的位置和姿态。一个座标系相对于另一个座标系的姿态的表示方法有很多种,比如:X-Y-Z固定角,Z-Y-X欧拉角,RPY角,四元数等。而UR机器人里面使用的是旋转矢量法。
等效轴角座标系表示法在《机器人学导论》中有详细讲解,如下图所示,这种方法用一个单位向量
和一个转动角度θ来表示两个座标系之间的旋转关系。
而旋转矢量法用一个旋转矢量:
来表示两个座标系之间的旋转关系,其中旋转矢量法与等效轴角座标系之间的关系是:Rx=θkx,Ry=θky,Rz=θkz。
由旋转矢量求旋转矩阵的方法可以按照如下公式:
但是首先需要求出kx,ky,kz和θ。
可以看出如果θ=0°或180°时,旋转轴根本无法确定,上式也将无解。这也是旋转矢量法的一个明显缺点。
如果已知旋转矩阵,可以通过如下公式求解旋转矢量:
注意2-82中的r33应改为r23。
对于同一姿态,旋转矩阵的表示不唯一。所以在UR机器人中,通过面板观察到的TCP Pose可能与通过脚本命令get_actual_tcp_pose()所得到的不一样。这是正常现象,将它们都转换成RPY角就会发现,它们表示的是同一个姿态。特别是在零点位置时比较明显,如下两个图所示:
可以用脚本函数rotvec2rpy(rotation_vector)将旋转矢量转换成rpy角,但是这里传递的参数是一个list:[Rx,Ry,Rz],而怎么把pose里的RX,RY,RZ分离出来传递个这个函数呢?这一点UR脚本手册里面好像没有。
还有一个pose_trans(p_from,p_from_to)函数,p_from表示座标系B相对于A的pose,p_from_to表示座标系C相对于B的pose,函数的返回值表示座标系C相对于A的pose。用矩阵的方式理解就是: