机器人关节(Joint)之间的坐标变换(Transform)
对于人体动画来说,坐标变化是非常简单的,只要在当前关节乘上该节点旋转矩阵和子节点偏移矩阵,就可以完成父节点到子节点的坐标变换。其中变换矩阵(Transform)为M=R·Toffset。但是机器人的坐标变换就没有那么简单了,机器人相比人要复杂,主要体现在两个方面:(1)人的关节是一个球形结构,具有三个自由度;而机器人的关节一般只有一个自由度,所以用机器人模拟人的手腕需要三个关节。(2)人关节之间是由手臂连起来的,在转动的过程中两个关节之间的距离是不会变的;而机器人的关节之间连接情况比较复杂,后面结合图详细说明。
下面介绍一下D-H参数(Denavit-Hartenberg Parameters)。如图1,这是两个旋转关节分别绕Axis i-1和Axis i进行旋转,其位置分别是1和2。这里可以看出,两个关节不是直接连在一起的,而且两个关节之间的连杆的长度也可能是不固定的或者说不是直线。这就不能像人体动画中直接乘上旋转矩阵和偏移矩阵来进行坐标变换。这看起来相当复杂,但是由于D-H参数的出现,这导致坐标变换变得相当直观简单。这里我们结合图1介绍一下D-H参数一共有哪几种,都是什么涵义:
- αi-1,Axis i-1和Axis i之间的夹角。
- ai-1,Axis i-1和Axis i之间的距离。
- θi,ai-1和ai之间的的夹角。(这里ai指得是Axis i和Axis i+1之间的距离)
- di,ai-1和ai之间的的距离。(可以理解为ai-1和ai分别与Axis i交点之间的距离,因为ai-1和ai分别与Axis i垂直)
图1
这里再说一下D-H参数的意义,αi-1和ai-1用来描述连杆的性质,而θi和di用来描述连杆之间的连接状态。选取D-H参数是坐标变换的第一步,那么接下来我么做第二步,建立关节的笛卡尔坐标系。建立坐标系首先要确定原点,我们观察可以得到,原点选在Axis i-1和ai-1的交点位置是最好的。这样我们z轴就可以沿着Axis i-1,而x轴也可以沿着ai-1。然后确定y轴,其肯定等于x轴和z轴的叉乘,也就是y轴的位置已经是确定了,方向可以根据右手坐标系确定。这样我们第二步也做完了。
这里提一点,αi-1可以看做两个z轴的夹角,ai-1可以看做两个z轴的距离,θi可以看做两个x轴的夹角,di可以看座是两个x轴的距离。
图2
最后一步就是进行坐标变换了。坐标变换主要分为4个环节:
- 将Axis i-1绕ai-1轴(x轴)旋转αi-1。(因为ai-1分别垂直于Axis i-1和Axis i)
- 将Axis i-1沿ai-1轴(x轴)方向平移ai-1。
- 将Axis i-1绕Axis i轴(z轴)旋转θi。(因为Axis i分别垂直于ai-1和ai)
- 将Axis i-1沿Axis i轴(z轴)方向平移di。
图3
这样就将Axis i-1转换成了Axis i。这些D-H参数是不是设计的非常巧妙?我们根据这四个变换可以得到Axis i-1转换成Axis i的旋转矩阵M。具体公式如下: