link元素描述了具有惯性,视觉特征和碰撞特性的刚体。简单的link文件如下所示
<link name="my_link">
<inertial>
<origin xyz="0 0 0.5" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="100" ixy="0" ixz="0" iyy="100" iyz="0" izz="100" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box size="1 1 1" />
</geometry>
<material name="Cyan">
<color rgba="0 1.0 1.0 1.0"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder radius="1" length="0.5"/>
</geometry>
</collision>
</link>
上述代码对应的结构图如下,在其中定义了惯性、视觉、碰撞特性,通常一个joint
连接两个link
。
name (必选)
link自己的名字,自己任意指定,在这里名字为my_link
。
inertial(可选元素)
visual (可选元素)
link的可视属性。此元素指定对象的形状(例如:立方体(box),圆柱(cylinder)等)以用于可视化目的。注意:同一链接可以存在多个visual标记实例。个人感觉该属性是必选属性,要想在仿真软件里看到该模型,就必须设置该属性。
name
指定链接几何的一部分的名称。不常用属性。
origin (optional: defaults to identity if not specified)
The reference frame of the visual element with respect to the reference frame of the link.
xyz(可选:默认为零向量)
表示 x x x, y y y, z z z偏移量。
rpy(可选:如果未指定,则默认为identity)
表示以弧度表示的固定轴滚动,俯仰和偏航角度。
geometry (必选)
视觉对象的形状。这可以是以下之一:
.stl
等mesh文件导入模型。material(可选)
视觉元素的材料。允许在顶层’robot’元素中指定’link’对象之外的材质元素。然后,您可以在链接元素中按名称引用材料。
collision(可选)
链接的碰撞属性。请注意,这可能与链接的可视属性不同,例如,通常使用更简单的碰撞模型来减少计算时间。注意:同一链接可以存在多个collision标记实例。它们定义的几何的联合形成了链接的碰撞表示。该属性主要是在模拟时模型会与其他模型发生碰撞,不设置该属性的话会出现两个模型相互穿过的情况,设置该属性后在geometry设定的形状内两个模型会发生碰撞。
name(可选)
指定链接几何的一部分的名称。这对于能够引用链接几何的特定位是有用的。
origin(可选:如果未指定,则默认为identity)
碰撞元素的参考系相对于链接的参考系。
xyz(可选:默认为零向量)
表示 x x x, y y y, z z z偏移量。
rpy(可选:如果未指定,则默认为identity)
表示以弧度表示的固定轴滚动,俯仰和偏航角度。
geometry
请参阅上述可视元素中的几何描述。
joint元素描述了机器人关节的运动学和动力学,并且指定了关节的安全限制。
下面是一个使用joint元素的例子:
<joint name="my_joint" type="floating">
<origin xyz="0 0 1" rpy="0 0 3.1416"/>
<parent link="link1"/>
<child link="link2"/>
<calibration rising="0.0"/>
<dynamics damping="0.0" friction="0.0"/>
<limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" />
<safety_controller k_velocity="10" k_position="15" soft_lower_limit="-2.0" soft_upper_limit="0.5" />
</joint>
上述代码对应的结构图如下,在其中定义了父link、子link以及两者之间的链接状态。
joint元素中拥有两个属性:
name (必选)
指定joint的名字(唯一的)
type (必选)
指定joint的类型,有下列选项:
origin (optional: defaults to identity if not specified)
从parent link到child link的变换,joint位于child link的原点,具体如图所示。
parent (必选)
parent link的名字是一个强制的属性,是这个link在机器人结构树中的名字。 可以理解为parent是主题,child是固定在主体上的配件。
child> (必选)
child link的名字是一个强制的属性,是这个link在机器人结构树中的名字。
axis (可选: defaults to (1,0,0))
joint的axis轴在joint的坐标系中。这是revolute joint旋转的轴,prismatic joint移动的轴,是planar joint的标准平面。这个轴在joint坐标系中被指定。fixed和floating类型的joint不需要用到这个字段。
calibration (可选)
joint的参考点,用来矫正joint的绝对位置。
rising (可选)
当joint正向运动时,参考点会触发一个上升沿。
falling (可选)
当joint正向运动时,参考点会触发一个下降沿。
dynamics (可选)
该元素用来指定joint的物理性能。它的值被用来描述joint的建模性能,尤其是在仿真的时候。
limit (只有 type 为 revolute and prismatic 时必选)
该元素包含以下属性:
mimic (可选) (New with ROS Groovy. See issue)
这个标签用于指定已定义的joint来模仿已存在的joint。这个joint的值可以用以下公式计算 value = multiplier * other_joint_value + offset. 有如下可选的属性: joint (required)
需要模仿的joint的名字。
safety_controller (可选)
该元素包含下列属性:
下载相关文件点击这里
下面对小车的urdf进行详细的介绍。
<?xml version="1.0"?>
<robot name="smartcar">
<link name="base_link"> <!-- 定义最基本的link作为小车的车体,其他link通过jiont固定在该link上 -->
<visual> <!-- 视觉信息 -->
<geometry>
<box size="0.25 .16 .05"/> <!-- 选择0.25cm x 0.16cm x 0.05cm 的立方体作为小车车体 -->
</geometry>
<origin rpy="0 0 1.57075" xyz="0 0 0"/> <!-- 车体绕着z轴旋转90度 -->
<material name="blue">
<color rgba="0 .5 .8 1"/>
</material>
</visual>
</link>
为更直观的看 的作用,在rviz中显示如下图
将其改为
后,在rviz中显示如下图
右前轮的link定义如下,至于为什么右前轮没有
进行转动,因为在其后的定义的right_front_wheel_joint中将其旋转链接在base_link
上。
<link name="right_front_wheel">
<visual>
<geometry>
<cylinder length=".02" radius="0.025"/>
</geometry>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
</link>
下面是连接车体和右前轮的joint,名字为right_front_wheel_joint
<joint name="right_front_wheel_joint" type="continuous"> <!-- 类型为continuous,连续型的铰链关节,可以绕一个轴旋转,没有最大值和最小值限制 -->
<axis xyz="0 0 1"/> <!-- 设置z轴为旋转轴 -->
<parent link="base_link"/> <!-- 其父link为base_link,即车体 -->
<child link="right_front_wheel"/> <!-- 子link为右前轮,将其固定在车体上 -->
<origin rpy="0 1.57075 0" xyz="0.08 0.1 -0.03"/> <!-- 由于轮子初始状态为圆柱,像本章第二张图所示,因此需要将其绕着y轴旋转90度 -->
<limit effort="100" velocity="100"/> <!-- 转动时最大力为100,最大速度也为100 -->
<joint_properties damping="0.0" friction="0.0"/> <!-- 设置阻尼值和摩擦力均为0 -->
</joint>
下面为其他轮子的定义,以及与车体的link,不再做详细解释,跟上面的类同。
<link name="right_back_wheel">
<visual>
<geometry>
<cylinder length=".02" radius="0.025"/>
</geometry>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
</link>
<joint name="right_back_wheel_joint" type="continuous">
<axis xyz="0 0 1"/>
<parent link="base_link"/>
<child link="right_back_wheel"/>
<origin rpy="0 1.57075 0" xyz="0.08 -0.1 -0.03"/>
<limit effort="100" velocity="100"/>
<joint_properties damping="0.0" friction="0.0"/>
</joint>
<link name="left_front_wheel">
<visual>
<geometry>
<cylinder length=".02" radius="0.025"/>
</geometry>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
</link>
<joint name="left_front_wheel_joint" type="continuous">
<axis xyz="0 0 1"/>
<parent link="base_link"/>
<child link="left_front_wheel"/>
<origin rpy="0 1.57075 0" xyz="-0.08 0.1 -0.03"/>
<limit effort="100" velocity="100"/>
<joint_properties damping="0.0" friction="0.0"/>
</joint>
<link name="left_back_wheel">
<visual>
<geometry>
<cylinder length=".02" radius="0.025"/>
</geometry>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
</link>
<joint name="left_back_wheel_joint" type="continuous">
<axis xyz="0 0 1"/>
<parent link="base_link"/>
<child link="left_back_wheel"/>
<origin rpy="0 1.57075 0" xyz="-0.08 -0.1 -0.03"/>
<limit effort="100" velocity="100"/>
<joint_properties damping="0.0" friction="0.0"/>
</joint>
<link name="head">
<visual>
<geometry>
<box size=".02 .03 .03"/>
</geometry>
<material name="white">
<color rgba="1 1 1 1"/>
</material>
</visual>
</link>
<joint name="tobox" type="fixed">
<parent link="base_link"/>
<child link="head"/>
<origin xyz="0 0.08 0.025"/>
</joint>
</robot>
urdf官方教程
link官方教程
joint官方教程