game4automation教程(十五)再次深入理解kinematic组件


kinematic组件的作用比较难懂。

我们只用抓住它的两个核心能力:

一是将已定义组(由Group Script组件定义的)中的零件集成到此 Kinematic 零部件中

二是可以移动或者旋转kinematic零部件的轴心点


(一)将已定义组(由Group Script组件定义的)中的零件集成到此 Kinematic 零部件中

这样说其实可能你还是不能明白是啥意思。

勇哥用下面的示例来说明:


下面的场景是一个夹爪取放mu对象的例子。

image.png

(图1)

上图序列对应场景中的对象名字:

1--> Cube(1)

2--> Cube(2)

3--> Cube(3)

4--> Cube(4)

image.png

(图2)

整个夹子由4部分构成。

1,2 构成夹子主体。

3,4 构成左右两个夹子。

这里只用了4个CAD部件就构成了一个夹子对象,是因为演示的原因把它简化了。
你可以相像一下,如果是真正的CAD制作的夹子,是不是可能有几十上百个部件构成的?


对于下图中的夹子,如果你想移动它,是不是要先做一个空对象构成的root对象,然后把1,2,3,4做为它的子对象。

然后你移动这个root,夹子才能整体的动起来?


然而,CAD图可能并没有定义夹子部件之间的这种层次关系。

如果你想重新整理这种层次关系,是一件不可能完成的事,因为整个机器的CAD图这种小部件成千上万。


这个时候,kinematic的第一种能力就用得上了:

将已定义组(由Group Script组件定义的)中的零件集成到此 Kinematic 零部件中


使用kinematic组件,我们定义了这个夹子的逻辑上的层次关系,如下图:

image.png

(图3)

第一层是根对象,叫kinematic,这个名字你随便,其实可以叫“夹子”。这一层原本无意义,但是考虑到可能会添加夹子动作测试脚本,所以习惯上都是保留此层。

第二层gripper1,它代表了夹子主体部分,即1,2

第三层Finger1, Finger2 代表了左右夹子,即3,4

通过图标image.png,我们就知道了第二层、第三层都添加了kinematic组件。

每个kinematic组件会根据你在CAD部件中定义的group组件的设置,来获取属于自己的零部件。

什么意思呢? 


下图就是CAD部件,每个部件都被指定是属于哪个group。

image.png

(图4)


我们看第二层gripper1的kinmatic组件的设置是怎么样的:

Group Name Prefix(组名前缀) 选择第二层那个对象gipper1。

这个时候意味着这个kinmatic组件的零部件有两个,Cube(1)和Cube(2)。

这两个零部件现在看不见,只有播放的时候才可以看到。

image.png

(图5)


下图是播放后的效果:

我们看到gripper1下面果然多了两个部件Cube(1)和Cube(2),它就作为了kinematic的零部件。

在播放状态下,CAD部件凡是定义了group的部件(即图4整个列表的部件),都会从层级列表中消失。

image.png

(图6)


同样的道理,Finger1和Finger2的kinematic都设置了自己的零部件。

这些零部件又都成为了gripper1的子对象了。

所以在gripper1上的Drive才能带到1,2,3,4这四个部件一起上下运动了。

即使图4所示的CAD部件本身并没有实现层次关系也没问题了。

我们没有改变CAD部件的层次结构。


当kinematic添加了正确的group后,选择对象会看到Gmzio会以粉色提示当前kinematic的所有零件。

下面是选择gripper1后的显示:

image.png

下面是选择Finger1后的显示:

image.png

下面是选择Finger2后的显示:

image.png



(二)可以移动或者旋转kinematic零部件的轴心点


下图中粉色区域是gripper1中定义的kinematic全部的零部件。

这个零部件共用一个轴心点,如下图所示:

image.png

然后勾选Move Center(keep children)

Delta Pos Origin中把Y轴改50。

播放后,你会发现现在的轴心点就变化了。

(图7)

image.png

(图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)都做为它的零部件。

image.png

(图4)




本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2024-11-26 16:52:31 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864