在模型文件中,两个Link之间的链接依靠的是Joint,比如说当定义了base_link后,我们接着就会定义一个Joint来与后面的Link联系上,在Joint中,需要指明它的parent与child.这个一般很清晰名了。然后Joint中还有一个标签是origin,里面包含了rpy与xyz的信息,这里的旋转与平移的定义非常的关键。
通常来说每个Link都是独立存在的零件,所以各自都有一个坐标系,当我们来链接两个Link时,你怎么来具体两个坐标之间的关系,这里首先就是要在Joint来体现。
<joint name="joint1" type="continuous">
<parent link="base_link"/>
<child link="Link1"/>
<origin rpy=" 0 0 0" xyz="0 0.4 0"/>
<axis xyz="1 0 0"/>
</joint>
比如这里的,rpy旋转为0,而有一个平移量,所一就会有一个相对base_link坐标系Y轴平移0.4的距离,如果此时我们再定义一个LInk1
<link name="Link1">
<visual>
<geometry>
<box size="0.2 0.2 1"/>
</geometry>
<origin rpy="0 0 0" xyz="0 0 0"/>
</visual>
</link>
那么,base_link与Link1的坐标关系仅仅是一个Y轴的平移了,,,,但是一般没有这么简单的关系啊,还要看旋转啊。。
<joint name="joint1" type="continuous">
<parent link="base_link"/>
<child link="Link1"/>
<origin rpy=" 1.57075 1.57075 1.57075" xyz="0 0.4 0"/>
<axis xyz="0 0 1"/>
</joint>
这里将rpy都进行旋转,rpy旋转时,会对应上XYZ的旋转角度,还有一个旋转顺序的,如果没有错的话,这里rpy的三个值依次对应XYZ的角度,但是旋转顺序是安装ZYX的,也就是先绕Z轴转90,再Y轴90,再X轴90,但是下面的那个旋转轴axis不知道什么意思。
在进行了上面Joint的定义后,Link的坐标系参考系不在是那么简单了,假设上面的Joint旋转平移后产生一个相对Base_link的坐标系temp(心中假设存在的,方便理解),如果Link的rpy与XYZ还是0的话,那么这个temp就是Link的坐标了,但是多数中,Link的rpy与XYZ还是会有数据的,所以接着旋转与平移,但是参照的却是那个temp。
static transform tf ... r p y -----> z y x -------------旋转顺序z,,,y,,,,x