gu903();一小时后!
刘炽皱着眉头,看着行动笨拙的机器人,无奈的叹了口气,虽然知道第一次失败的机率比较大,但是差的也太远了吧。
有问题就得想办法解决。
不用看,就知道问题出在关节技术上。
对于人体来说,关节的坐标变化是非常简单的,只要在当前关节乘上该节点旋转矩阵和子节点偏移矩阵,就可以完成节点到子节点的坐标变换。
但是机器人的坐标变换就没有那么简单了,机器人相比人要复杂,主要体现在两个方面:
1:人的关节是一个球形结构,具有三个自由度;而机器人的关节一般只有一个自由度,所以用机器人模拟人的手腕需要三个关节。
2:人关节之间是由手臂连起来的,在转动的过程中两个关节之间的距离是不会变的;而机器人的关节之间连接情况比较复杂。
刘炽打开了机器人的设计图!
把关节旋转部分放大。
这是两个旋转关节分别绕两根轴进行旋转;
而且两个关节不是直接连在一起的,而且两个关节之间的连杆的长度,也是不固定的或者说不是直线。
在这里就会出现一个问题!
它就不能像人体动画中直接乘上旋转矩阵和偏移矩阵来进行坐标变换。
这看起来相当复杂,就会导致坐标变换变得真复杂。
半小时后,刘炽双眼一亮!
脑子里想到一个想法,从桌子上抽了一张纸出来,直接坐下,拿起笔。
刷刷刷......的纸上写了起来。
如果:
是二轴,改成三轴呢?
当Y、X和X之间的成夹角同,那他们之间的距离,分成三个等级。
Di;
Ai1;
Ai;
Di,ai1和ai之间的距离。
可以理解为Ai1和Ai分别与Z交点之间的距离,因为Ai1和Ai分别与Z垂直
而Di和di连杆之间的连接状态。
选取参数是坐标变换的第一步,那么接下来第二步,就是建立关节的笛卡尔坐标系。
从观察中可以得到,原点选在Y和ai1的交点位置是最近的。
这样我们z轴就可以沿着Y,而x轴也可以沿着ai1。
然后确定y轴,其肯定等于x轴和z轴的叉乘,也就是y轴的位置已经是确定了,方向可以根据右手坐标系确定。
i1可以看作两个z轴的夹角;
ai1可以看作两个z轴的距离,
Di可以看作两个x轴的夹角,
di可以看作是两个x轴的距离。
最后一步就是进行坐标变换了
坐标变换主要分为4个环节:
将Y绕ai1轴x轴旋转i1。因为ai1分别垂直于Y
将X沿Ai1轴x轴方向平移ai1。
将Y绕X轴z轴旋转Di。因为Y分别垂直于ai1和ai
将Z沿X轴z轴方向平移di。
......
半小时后!
刘炽一拍大腿!
搞定,这次应该没问题了,直接拿起鼠标,在原来的基本上进了修改。
gu903();