对URDF文件中坐标关系的理解
URDF文件中主要的标签有两个,分别是joint
和link
,这两个标签基本决定了仿真模型的运动关系与物理属性
下面是一段URDF的示例,主要包括两个连杆(base_link和RH_link)以及一个关节(RH_joint)
inertial标签中,除了origin标签之外,mass和inertia标签的值并不严谨,仅供参考
<link name="base_link">
<inertial>
<origin xyz="0.596011105031066 1.16160216601102E-06 1.16287812206338" rpy="0 0 0" />
<mass value="6" />
<inertia ixx="6" ixy="6" ixz="6" iyy="6" iyz="6" izz="6" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="package://human_description/meshes/base_link.STL" />
</geometry>
<material name="">
<color rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="package://human_description/meshes/base_link.STL" />
</geometry>
</collision>
</link>
<link name="RH_link">
<inertial>
<origin xyz="-0.0012979855121128 0.0524535818083725 -0.169637336770835" rpy="0 0 0" />
<mass value="6" />
<inertia ixx="6" ixy="6" ixz="6" iyy="6" iyz="6" izz="6" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="package://human_description/meshes/RH.STL" />
</geometry>
<material name="">
<color rgba="0.752941176470588 0.752941176470588 0.752941176470588 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="package://human_description/meshes/RH.STL" />
</geometry>
</collision>
</link>
<joint name="RH_joint" type="revolute">
<origin xyz="0.5795 -0.20593 0.81311" rpy="0.069813 0 0" />
<parent link="base_link" />
<child link="RH_link" />
<axis xyz="0 1 0" />
<limit lower="0" upper="0" effort="0" velocity="0" />
</joint>
下面进行分析。
link中的origin
在link中,主要有三个子标签:inertial
, visual
, collision
,与下图完美对应
我们将这三个子标签认为是连杆对象的三个子模型,即:惯性模型,可视化模型,碰撞模型
这三个子模型分别有自己的坐标系,它们的描述也就是对应的origin
在origin中:
x y z
是这个子模型在对应连杆坐标系中的偏移量r p y
是这个子模型在对应连杆坐标系中的旋转角度
但至此我们还不知道连杆坐标系在哪里,继续往下看。
joint中的origin
joint标签相对比较单纯:它的作用是连接parent 和 child 对应的link,其origin则是这个joint在它的参考坐标系中的坐标
但是它的参考坐标在哪呢?由图中可看出位于parent frame处,也就是parent link的“原点处”
图中可见,joint frame = child frame
,那么其实也能够类比看出来:parent frame的“原点处“其实也对应了一个joint的frame,也就是说,parent frame = parent_joint frame
,joint的origin是相对于前一个joint对应frame进行的偏移和旋转
joint的frame就是它的child link的坐标系,即这个link的连杆坐标系
仿真环境中展示
joint标签对应的数据在仿真环境中是不可见的,我们在仿真环境中只能看到连杆的坐标信息,
但是,由上面的分析我们知道,连杆的frame其实也就对应着joint的信息,见下图:
link的惯性模型,可视化模型,碰撞模型对应的frame是不可见的
rviz中对比验证:
小结
略。