关于urdf书写的一些常识
·
1.<link>可以理解为机器人的一个骨骼部分,为实物。
在link中,我们可以定义3个东西:样式,碰撞体,惯性参数
样式<visual>:在仿真/可视化中看到的形状、颜色、位置
碰撞体<collision>:用于物理引擎计算碰撞
惯性参数<inertial>:其中包括物体的质量和描述这个部件旋转时的“惯性”,影响物理仿真的真实感。
<!-- ===== 红色正方体===== -->
<link name="cube1">
<visual>
<geometry>
<box size="0.3 0.3 0.3"/>
</geometry>
<material name="cube_red"/>
</visual>
<collision>
<geometry>
<box size="0.3 0.3 0.3"/>
</geometry>
</collision>
<inertial>
<mass value="0.5"/>
<inertia ixx="0.01" ixy="0" ixz="0" iyy="0.01" iyz="0" izz="0.01"/>
</inertial>
</link>
2.<joint>:关节
joint 就是连接两个 link 的约束,它定义了父 link 和子 link 之间的相对位置和运动方式。
<joint name="关节名字" type="关节怎么动">
其中name是关键的唯一标识,方便在控制器、话题、调试中引用。
type告诉关键应该怎么动,一般包括以下五类:
| 类型 | 含义 |
|---|---|
fixed |
完全固定,不能动 |
continuous |
无限旋转(360°无限制) |
revolute |
有限旋转(-90° 到 +90°) |
prismatic |
直线滑动(前后伸缩) |
planar |
平面运动(x-y 平面) |
在<joint>中,以下是定义与作用:
<parent link>:固定的那一端
<child link>:会动的那一端
<origin>:child link 相对于parent link 的位置(xyz)和旋转(rpy)
<axis>:对于旋转类关节,指定绕哪个轴旋转
<limit>:运动限制,其中包括lower(最小角度), upper(最大角度), effort(最大力度), velocity(最快速度)
<joint name="cube_joint" type="continuous">
<parent link="base_link"/>
<child link="cube"/>
<origin xyz="0 0 0.25" rpy="0 0 0"/>
<axis xyz="0 1 0"/>
<limit effort="10.0" velocity="2.0"/>
</joint>
以下是完整代码和效果实现:
<?xml version="1.0"?>
<robot name="simple_cube">
<!-- ===== 1. 定义颜色 ===== -->
<material name="red">
<color rgba="1 0 0 1"/>
</material>
<material name="gray">
<color rgba="0.5 0.5 0.5 1"/>
</material>
<!-- ===== 2. 世界(根节点) ===== -->
<link name="world"/>
<!-- ===== 3. 底座 link ===== -->
<link name="base_link">
<visual>
<geometry>
<box size="0.8 0.8 0.1"/>
</geometry>
<material name="gray"/>
</visual>
<collision>
<geometry>
<box size="0.8 0.8 0.1"/>
</geometry>
</collision>
<inertial>
<mass value="1.0"/>
<inertia ixx="0.1" ixy="0" ixz="0" iyy="0.1" iyz="0" izz="0.1"/>
</inertial>
</link>
<!-- ===== 4. 底座固定到世界 ===== -->
<joint name="world_joint" type="fixed">
<parent link="world"/>
<child link="base_link"/>
<origin xyz="0 0 0.05" rpy="0 0 0"/>
</joint>
<!-- ===== 5. 红色方块 link ===== -->
<link name="cube">
<visual>
<geometry>
<box size="0.3 0.3 0.3"/>
</geometry>
<material name="red"/>
</visual>
<collision>
<geometry>
<box size="0.3 0.3 0.3"/>
</geometry>
</collision>
<inertial>
<mass value="0.5"/>
<inertia ixx="0.01" ixy="0" ixz="0" iyy="0.01" iyz="0" izz="0.01"/>
</inertial>
</link>
<!-- ===== 6. 方块连接到底座(绕 Y 轴旋转) ===== -->
<joint name="cube_joint" type="continuous">
<parent link="base_link"/>
<child link="cube"/>
<origin xyz="0 0 0.25" rpy="0 0 0"/>
<axis xyz="0 1 0"/>
<limit effort="10.0" velocity="2.0"/>
</joint>
</robot>

用的直接可以看的网站Robot Viewer,不需要先放在ros中先编译部署。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)