3 most important points
- URDF 使用 XML 格式描述机器人文件
- 使用
link描绘不同部件的外形,包括形状、材质(颜色)、初始位置、初始角度 - 使用
joint描述部件之间的关系,包括位置关系和旋转关系
5 thoughts
Notes
URDF(Unified Robot Description Format)统一机器人描述格式,URDF 使用 XML 格式描述机器人文件。
XML
XML 规定了数据格式。 示例,类似 HTML:
<?xml version="1.0"?> <robot name="阿童木"> <link name="大手臂">具体的描述</link> <joint name="胳膊肘">具体的描述</joint> <link name="小手臂">具体的描述</link> </robot>其中包括:
- 标签:如
robot和link- 属性:如
nameXML 格式在线校验工具:在线代码格式化
- URDF 的组成
- 声明信息
- XML 声明:
<?xml version="1.0"?> - 机器人声明:如
<robot name="阿童木">
- XML 声明:
- 关键组件
link:机器人的部件,比如躯体、轮子、IMU、雷达、支撑轮等、visual:描述形状geometry:几何形状box:长方体,属性size长宽高sphere:球体,属性radius半径cylinder:圆柱体,属性radius半径、length高度mesh:第三方导出的模型文件,属性filename
origin:原始位姿,默认在物体几何中心,属性xyz默认零矢量、rpy为弧度表示的翻滚、俯仰、偏航material:材质,属性namecolor:属性rgba
collision:碰撞属性 即描述碰撞体,类似visual^4328bbgeometry:碰撞体的几何形状origin:碰撞体的原始位姿material:可选 碰撞体的材料
inertial:惯性参数、质量等 ^4ba58fmass:质量inertia:旋转惯量,属性ixx\ixy\ixz\iyy\iyz\izz有特定计算方法
joint:Link 和 Link 之间的链接部分称为关节,写明父子关系- 属性
typerevolute:旋转关节,绕单轴旋转,角度有上下限,比如舵机 0-180continuous:旋转关节,可以绕单轴无限旋转,比如自行车的前后轮fixed:固定关节,不允许运动的特殊关节prismatic:滑动关节,沿某一轴线移动的关节,有位置极限planer:平面关节,允许在 xyz,rxryrz 六个方向运动floating:浮动关节,允许进行平移、旋转运动
parent:父 link 名称,属性linkchild:子 link 名称,属性linkorigin:父子的关系,属性xyz、rpyaxis:围绕旋转的关节轴,属性xyz
- 属性
- 声明信息
<?xml version="1.0"?>
<robot name="fishbot">
<!-- base link -->
<link name="base_link">
<visual>
<origin xyz="0 0 0.0" rpy="0 0 0"/>
<geometry>
<cylinder length="0.12" radius="0.10"/>
</geometry>
</visual>
</link>
<!-- laser link -->
<link name="laser_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder length="0.02" radius="0.02"/>
</geometry>
<material name="black">
<color rgba="0.0 0.0 0.0 0.5" />
</material>
</visual>
</link>
<!-- laser joint -->
<joint name="laser_joint" type="fixed">
<parent link="base_link" />
<child link="laser_link" />
<origin xyz="0 0 0.075" />
</joint>
</robot>两轮差速模型示意图
<?xml version="1.0"?>
<robot name="fishbot">
<!-- base link -->
<link name="base_link">
<visual>
<origin xyz="0 0 0.0" rpy="0 0 0"/>
<geometry>
<cylinder length="0.12" radius="0.10"/>
</geometry>
</visual>
</link>
<!-- laser link -->
<link name="laser_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder length="0.02" radius="0.02"/>
</geometry>
<material name="black">
<color rgba="0.0 0.0 0.0 0.5" />
</material>
</visual>
</link>
<!-- laser joint -->
<joint name="laser_joint" type="fixed">
<parent link="base_link" />
<child link="laser_link" />
<origin xyz="0 0 0.075" />
</joint>
<link name="imu_link">
<visual>
<origin xyz="0 0 0.0" rpy="0 0 0"/>
<geometry>
<box size="0.02 0.02 0.02"/>
</geometry>
</visual>
</link>
<!-- imu joint -->
<joint name="imu_joint" type="fixed">
<parent link="base_link" />
<child link="imu_link" />
<origin xyz="0 0 0.02" />
</joint>
<link name="left_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.57079 0 0"/>
<geometry>
<cylinder length="0.04" radius="0.032"/>
</geometry>
<material name="black">
<color rgba="0.0 0.0 0.0 0.5" />
</material>
</visual>
</link>
<joint name="left_wheel_joint" type="continuous">
<parent link="base_link" />
<child link="left_wheel_link" />
<origin xyz="-0.02 0.10 -0.06" />
<axis xyz="0 1 0" />
</joint>
<link name="right_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.57079 0 0"/>
<geometry>
<cylinder length="0.04" radius="0.032"/>
</geometry>
<material name="black">
<color rgba="0.0 0.0 0.0 0.5" />
</material>
</visual>
</link>
<joint name="right_wheel_joint" type="continuous">
<parent link="base_link" />
<child link="right_wheel_link" />
<origin xyz="-0.02 -0.10 -0.06" />
<axis xyz="0 1 0" />
</joint>
<link name="caster_link">
<visual>
<origin xyz="0 0 0" rpy="1.57079 0 0"/>
<geometry>
<sphere radius="0.016"/>
</geometry>
<material name="black">
<color rgba="0.0 0.0 0.0 0.5" />
</material>
</visual>
</link>
<joint name="caster_joint" type="fixed">
<parent link="base_link" />
<child link="caster_link" />
<origin xyz="0.06 0.0 -0.076" />
<axis xyz="0 1 0" />
</joint>
</robot>