kinematic组件的作用比较难懂。
我们只用抓住它的两个核心能力:
一是将已定义组(由Group Script组件定义的)中的零件集成到此 Kinematic 零部件中
二是可以移动或者旋转kinematic零部件的轴心点
(一)将已定义组(由Group Script组件定义的)中的零件集成到此 Kinematic 零部件中
这样说其实可能你还是不能明白是啥意思。
勇哥用下面的示例来说明:
下面的场景是一个夹爪取放mu对象的例子。
(图1)
上图序列对应场景中的对象名字:
1--> Cube(1)
2--> Cube(2)
3--> Cube(3)
4--> Cube(4)
(图2)
整个夹子由4部分构成。
1,2 构成夹子主体。
3,4 构成左右两个夹子。
这里只用了4个CAD部件就构成了一个夹子对象,是因为演示的原因把它简化了。
你可以相像一下,如果是真正的CAD制作的夹子,是不是可能有几十上百个部件构成的?
对于下图中的夹子,如果你想移动它,是不是要先做一个空对象构成的root对象,然后把1,2,3,4做为它的子对象。
然后你移动这个root,夹子才能整体的动起来?
然而,CAD图可能并没有定义夹子部件之间的这种层次关系。
如果你想重新整理这种层次关系,是一件不可能完成的事,因为整个机器的CAD图这种小部件成千上万。
这个时候,kinematic的第一种能力就用得上了:
将已定义组(由Group Script组件定义的)中的零件集成到此 Kinematic 零部件中
使用kinematic组件,我们定义了这个夹子的逻辑上的层次关系,如下图:
(图3)
第一层是根对象,叫kinematic,这个名字你随便,其实可以叫“夹子”。这一层原本无意义,但是考虑到可能会添加夹子动作测试脚本,所以习惯上都是保留此层。
第二层gripper1,它代表了夹子主体部分,即1,2
第三层Finger1, Finger2 代表了左右夹子,即3,4
通过图标,我们就知道了第二层、第三层都添加了kinematic组件。
每个kinematic组件会根据你在CAD部件中定义的group组件的设置,来获取属于自己的零部件。
什么意思呢?
下图就是CAD部件,每个部件都被指定是属于哪个group。
(图4)
我们看第二层gripper1的kinmatic组件的设置是怎么样的:
Group Name Prefix(组名前缀) 选择第二层那个对象gipper1。
这个时候意味着这个kinmatic组件的零部件有两个,Cube(1)和Cube(2)。
这两个零部件现在看不见,只有播放的时候才可以看到。
(图5)
下图是播放后的效果:
我们看到gripper1下面果然多了两个部件Cube(1)和Cube(2),它就作为了kinematic的零部件。
在播放状态下,CAD部件凡是定义了group的部件(即图4整个列表的部件),都会从层级列表中消失。
(图6)
同样的道理,Finger1和Finger2的kinematic都设置了自己的零部件。
这些零部件又都成为了gripper1的子对象了。
所以在gripper1上的Drive才能带到1,2,3,4这四个部件一起上下运动了。
即使图4所示的CAD部件本身并没有实现层次关系也没问题了。
我们没有改变CAD部件的层次结构。
当kinematic添加了正确的group后,选择对象会看到Gmzio会以粉色提示当前kinematic的所有零件。
下面是选择gripper1后的显示:
下面是选择Finger1后的显示:
下面是选择Finger2后的显示:
(二)可以移动或者旋转kinematic零部件的轴心点
下图中粉色区域是gripper1中定义的kinematic全部的零部件。
这个零部件共用一个轴心点,如下图所示:
然后勾选Move Center(keep children)
Delta Pos Origin中把Y轴改50。
播放后,你会发现现在的轴心点就变化了。
(图7)
(图8)
这个功能也是十分重要的。
一般我们要变换轴心点位置的话,先要取消对象的层级关系,然后手动移动轴心点,
然后再恢复原来的层级关系。
考虑到CAD对象的的部件非常多,这样给手工操作带来巨大工作量。
有了这种改变轴心点的功能就方便许多。
下面解释下两个参数的意义:
Delta Pos Origin 相对于原来轴心,变换位置
Delta Rot Origin 相对于原来的轴心,旋转位置
(三)补充细节
(1)关于组名字的用法
这里补充图5中一个细节知识。
Integrate Group 中指定组有两种方式。
(1)Group Name 组名字
(2)Group Name Prefix 组名字前缀
它们有什么区别呢?
它们并不是互斥的功能,用法分下面几种情况:
(1)只指定Group Name
你需要手工输入图4中定义的group的名字,注意大小写也要一样。
(2)指定Group Name, 同时指定Group Name Prefix
手工输入图4中定义的group的名字,并且选择一个根对象,它表示了作用域,你可以认为就是C#的命名空间的意思。
有了作用域,你的group名字就可以重复,靠作用域区分。
(3)只指定Group Name Prefix
你可以运行一个对象名字,而这个对象的名字不能自由定义,一定要跟图4中的group名字一模一样。
而第2种用法下,对象的名字可以自由定义的,像图3中的gripper1就可以随便起名。
(2)关于Group
引用一下图4。
一个CAD部件其实可以属于几个组的。
比如Cube(2)可以属于一个gripper1组,还可以同时属于一个Finger1组。
这样后面的黄色字体会显示为: gripper1/Finger1。
这样做是允许。
这样的group如果指定给一个kinematic,会把Cube(2)和Cube(3)都做为它的零部件。
(图4)

