使用ros少不了要创建机器人模型文件,文件格式是xml,能创建几何模型,也能引用3d的模型文件,说白了就是将模型组织在一块儿,搭积木一样堆个机器人出来。
所以对几何模型坐标的理解不能含糊。
坐标系遵循右手法则食指x中指y拇指z。
<link name="shoulder_link">
<visual>
<geometry>
<cylinder length="0.05" radius="0.025"/>
</geometry>
<origin xyz="0.0 0.0 0.025"/>
<material name="white"/>
</visual>
</link>
创建了一个圆柱几何模型高度为0.05,半径为0.025,单位是m,原点在其质心。
<origin xyz="0.0 0.0 0.025"/>一句进行模型xyz方向的偏移设置
即z方向往上偏移0.025
现在原点在几何模型的底部。
再一个连杆
<link name="upper_arm_link">
<visual>
<geometry>
<box size="0.1 0,01 0.01"/>
</geometry>
<origin rpy="0.0 1.5705 0.0" xyz="0.0 0.0 -0.05"/>
<material name="white"/>
</visual>
</link>
创建了一个x 10cm y 1cm z 1cm的长方条。横放10cm长。
<origin rpy="0.0 1.5705 0.0" xyz="0.0 0.0 -0.05"/>
rpy 设置旋转 沿着y轴转1.5705弧度{90度},变竖放10cm高,
此时原点没变,还在质点,
xyz 设置模型z方向向下5cm,
此时原点在竖长条顶部。
两个连杆之间的关节
<joint name="upper_arm_joint" type="revolute">
<parent link="shoulder_link"/>
<child link="upper_arm_link"/>
<origin xyz="0.0 0.0 0.05"/>
<axis xyz="0 0 1"/>
<limit effort="${arm_effort}"
lower="${-45.0 * deg_to_rad}" upper="${45.0 * deg_to_rad}"
velocity="${arm_velocity}"/>
<dynamics friction="${arm_friction}" damping="${arm_damping}"/>
<safety_controller k_position="20"
k_velocity="20"
soft_lower_limit="${-45.0 * deg_to_rad + arm_eps}"
soft_upper_limit="${ 45.0 * deg_to_rad - arm_eps}"/>
</joint>
关节体现了几何模型之间的位置和链接关系
<origin xyz="0.0 0.0 0.05"/>
是指关节位置相对于parent坐标系进行的偏移量。
shoulder的坐标系在模型底部,其高度为0.05,
由于偏移设置为沿着z方向往上0.05的位置,
所以这个关节在模型shoulder_link顶部的位置。
type=revolute设置为旋转关节。
<axis xyz="0 0 1"/>表示以z轴为旋转轴。
想象此时圆柱shoulder_link和细长条upper_arm_link应该顶部对齐。
长条可以像钻头一样在一定范围内+-45度旋转。