坐标系的结合

对于一个物体,常常要根据不同目的设定多个坐标系。在图5.23所示的积木中,除代表积木位置和姿势的block坐标系之外,还设定了指定抓取位置的block-grasp坐标系和表示积木上面的

block-top坐标系。由于这三个坐标系间的相对关系不变,所以block被移动时,其它两个坐标系的值,为了保持已决定了的相

对关系不发生矛盾,也必须更新。这种坐标系的结合关系可用AFFIX语句,说明如下:

AFFIXblock-topTOblockRIGIDLY;AFFIXblock-graspTOblockRIGIDLY;

根据这两个AFFIX语句,blockblock-grasp,block-top被作为相互结合的三个坐标系来处理,通常,为维持其相互之间的相对关系而被自动管理。即若block被移动,则与其结伴的block-grasp·和block-top也移动。或block-grasp移动的话,则block,block-top也移动。当手抓住积木时,存在同样的结合关系。因此,若事先说明

AFFIXblock-graspTOhandRIGIDLY;

:则关于手和积木的三个坐标系将作为一体而被管理。而且,若·hand被移动的话,则block的值也随之更新,或者若写了移动biock的语句,则为了达到被指定的block的移动,可求出必要的hand的移动,这样,若坐标系的结合关系的管理可以自动无矛盾进行,象

MOVEblockTOfinal;

这样,就可以把作业着眼于对象物的动作来描述,程序可以写成更自然、更易理解的形式。两个物体被组合成一体时,也有必要进行结合关系的说明。对结合关系来说,可考虑两种类型,这就是RIGID结合与NONRIGID结合。

AFFIXoneTOanotherRIGIDLY;

表示oneanother由螺栓等被牢牢固定时的结合。这时若移one,another也动,若移动another,one也动。

AFFIXcupTOsaucerNONRIGIDLY;

它是把杯子放到盘子上时的结合,若移动saucer,cup也动,但移动cup时,saucer不动。

要想用AFFIX语句来结合两个坐标系的值。并且事先被定义时,则

AFFIXblock-graspTOblockRIGIDLY;

就只说明这样的结合关系,这时两者的相对位置被自动计算。在block-grasp未被定义时,归纳其定义和AFFIX语句,可作如下描述。这里预先约定NILROT是表示不进行回转的语句。

AFFIXblock-graspTOblockAT

TRANS(NILROT,VECT(width/2,depth/2,height/2))RIGIDLY:

为了解除结合关系,采用UNFIX语句,在hand离开block-gIasp的情况中,用

UNFIXblock-graspFROMhand;

语句说明。在这个UNFIX语句之后,hand和block的结合关系被解除,这时,即使移动hand,block的值却不变。


标签: AFFIXblockhand

随便看看