ROS——Gazebo仿真——四轮小车(SmartCar)详细教程——urdf文件详解

清疚 2022-03-10 09:42 1511阅读 0赞

文章目录

    1. Link元素结构
    1. link详细属性解析
    1. joint元素结构
    1. Joint详细属性解析
    1. SmartCar——urdf
  • 参考文献

1. Link元素结构

  link元素描述了具有惯性,视觉特征和碰撞特性的刚体。简单的link文件如下所示

  1. <link name="my_link">
  2. <inertial>
  3. <origin xyz="0 0 0.5" rpy="0 0 0"/>
  4. <mass value="1"/>
  5. <inertia ixx="100" ixy="0" ixz="0" iyy="100" iyz="0" izz="100" />
  6. </inertial>
  7. <visual>
  8. <origin xyz="0 0 0" rpy="0 0 0" />
  9. <geometry>
  10. <box size="1 1 1" />
  11. </geometry>
  12. <material name="Cyan">
  13. <color rgba="0 1.0 1.0 1.0"/>
  14. </material>
  15. </visual>
  16. <collision>
  17. <origin xyz="0 0 0" rpy="0 0 0"/>
  18. <geometry>
  19. <cylinder radius="1" length="0.5"/>
  20. </geometry>
  21. </collision>
  22. </link>

  上述代码对应的结构图如下,在其中定义了惯性、视觉、碰撞特性,通常一个joint连接两个link

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE2Nzc1Mjkz_size_16_color_FFFFFF_t_70

2. link详细属性解析

  • name (必选)
    link自己的名字,自己任意指定,在这里名字为my_link
  • inertial(可选元素)

    • origin(可选:如果未指定,则默认为identity)
      这是惯性参考系相对于链路参考系的姿态。惯性参考系的原点需要位于重心处。惯性参考系的轴不需要与惯性的主轴对齐。
      xyz(可选:默认为零向量)
      表示 x x x, y y y, z z z 偏移量。
      rpy(可选:如果未指定,则默认为identity)
      表示以弧度表示的固定轴滚动,俯仰和偏航角度。
    • mass
      链接的质量由此元素的value属性表示
    • inertia
      3x3转动惯量矩阵,以惯性框架表示。因为转动惯量矩阵是对称的,所以这里使用属性ixx,ixy,ixz,iyy,iyz,izz仅指定该矩阵的6个以上对角线元素。
  • 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 (必选)

      视觉对象的形状。这可以是以下之一:

      • box (立方体)
        size属性包含框的三个边长。立方体的原点在它的中心。
      • cylinder (圆柱)
        指定半径和长度。圆柱的原点位于其中心,原点如图所示,其他立方体的原点类似。
      • sphere (球)
        指定半径。球体的原点位于其中心。
      • mesh
        当想添加更为复杂的模型时,可以通过.stl等mesh文件导入模型。

20190310165632134.png

  • material(可选)
    视觉元素的材料。允许在顶层’robot’元素中指定’link’对象之外的材质元素。然后,您可以在链接元素中按名称引用材料。

    • name
      材料的名称
    • color(可选)
      rgba由四个数字组成的材料颜色,表示红色/绿色/蓝色/ alpha,每个数字的范围为[0,1]。alpha即色彩空间,也就是透明度/不透明度。
    • texture(可选)
      材质的纹理由文件名指定。
  • collision(可选)

      链接的碰撞属性。请注意,这可能与链接的可视属性不同,例如,通常使用更简单的碰撞模型来减少计算时间。注意:同一链接可以存在多个collision标记实例。它们定义的几何的联合形成了链接的碰撞表示。该属性主要是在模拟时模型会与其他模型发生碰撞,不设置该属性的话会出现两个模型相互穿过的情况,设置该属性后在geometry设定的形状内两个模型会发生碰撞。

    • name(可选)
      指定链接几何的一部分的名称。这对于能够引用链接几何的特定位是有用的。
    • origin(可选:如果未指定,则默认为identity)
      碰撞元素的参考系相对于链接的参考系。
      xyz(可选:默认为零向量)
      表示 x x x, y y y, z z z偏移量。
      rpy(可选:如果未指定,则默认为identity)
      表示以弧度表示的固定轴滚动,俯仰和偏航角度。
    • geometry
      请参阅上述可视元素中的几何描述。

3. joint元素结构

  joint元素描述了机器人关节的运动学和动力学,并且指定了关节的安全限制。

下面是一个使用joint元素的例子:

  1. <joint name="my_joint" type="floating">
  2. <origin xyz="0 0 1" rpy="0 0 3.1416"/>
  3. <parent link="link1"/>
  4. <child link="link2"/>
  5. <calibration rising="0.0"/>
  6. <dynamics damping="0.0" friction="0.0"/>
  7. <limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" />
  8. <safety_controller k_velocity="10" k_position="15" soft_lower_limit="-2.0" soft_upper_limit="0.5" />
  9. </joint>

上述代码对应的结构图如下,在其中定义了父link、子link以及两者之间的链接状态。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE2Nzc1Mjkz_size_16_color_FFFFFF_t_70 1

4. Joint详细属性解析

joint元素中拥有两个属性:

  • name (必选)
    指定joint的名字(唯一的)
  • type (必选)
    指定joint的类型,有下列选项:

    • revolute - 可以绕着一个轴旋转的铰链关节,有最大值和最小值限制。
    • continuous - 连续型的铰链关节,可以绕一个轴旋转,没有最大值和最小值限制。
    • prismatic - 滑动关节,可以沿着一个轴滑动,有最大值和最小值限制。
    • fixed - 这不是一个实际的关节,因为它无法运动,所有的自由度都被锁定。这种类型的关节不需要指定轴、动力学特征、标度和最大值最小值限制。
    • floating - 这是一个具有6个自由度的关节。
    • planar - 此关节在一个平面内运动,垂线是运动轴。
  • origin (optional: defaults to identity if not specified)
    从parent link到child link的变换,joint位于child link的原点,具体如图所示。

    • xyz (optional: defaults to zero vector)
      代表 x x x, y y y, z z z 轴方向上的偏移,单位米。
    • rpy (optional: defaults ‘to zero vector ‘if not specified)
      代表绕着固定轴旋转的角度:roll绕着x轴,pitch绕着y轴,yaw绕着z轴,用弧度表示。
  • 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不需要用到这个字段。

    • xyz (required)
      代表轴向量的 x x x, y y y, z z z 分量,这应该是一个标准化的向量。
  • calibration (可选)
    joint的参考点,用来矫正joint的绝对位置。
  • rising (可选)
    当joint正向运动时,参考点会触发一个上升沿。
  • falling (可选)
    当joint正向运动时,参考点会触发一个下降沿。
  • dynamics (可选)
    该元素用来指定joint的物理性能。它的值被用来描述joint的建模性能,尤其是在仿真的时候。

    • damping (可选, defaults to 0)
      joint的阻尼值。(移动关节为 N ⋅ s m \frac{N \cdot s}{m} mN⋅s​,旋转关节为 N ⋅ m ⋅ s r a d \frac{N \cdot m \cdot s }{rad} radN⋅m⋅s​
    • friction (可选, defaults to 0)
      joint的摩擦力值(移动关节为 N N N, 旋转关节为 N ⋅ m N \cdot m N⋅m).
  • limit (只有 type 为 revolute and prismatic 时必选)
    该元素包含以下属性:

    • lower (可选, defaults to 0)
      指定joint运动范围下界的属性(revolute joint的单位为弧度,prismatic joint的单位为米),连续型的joint忽略该属性。
    • upper (可选, defaults to 0)
      指定joint运动范围上界的属性(revolute joint的单位为弧度,prismatic joint的单位为米),连续型的joint忽略该属性。
    • effort (必选)
      该属性指定了joint运行时的最大的力。 ( ∣ | ∣applied effort ∣ < ∣ | < | ∣<∣effort ∣ | ∣)。 详见安全限制
    • velocity (必选)
      该属性指定了joint运行时的最大的速度。 详见安全限制
  • mimic (可选) (New with ROS Groovy. See issue)
    这个标签用于指定已定义的joint来模仿已存在的joint。这个joint的值可以用以下公式计算 value = multiplier * other_joint_value + offset. 有如下可选的属性: joint (required)
    需要模仿的joint的名字。

    • multiplier (可选)
      指定上述公式中的乘数因子。
    • offset (可选)
      指定上述公式中的偏移项。默认值为0(revolute joint的单位为弧度,prismatic joint的单位为米)。
  • safety_controller (可选)
    该元素包含下列属性:

    • soft_lower_limit (可选, defaults to 0)
      该属性指定了joint安全控制边界的下界,是joint安全控制的起始限制点。这个值需要大于上述的limit中的lower值。 更多细节 详见安全限制。
    • soft_upper_limit (可选, defaults to 0)
      该属性指定了joint安全控制边界的上界,是joint安全控制的起始限制点。这个值需要小于上述的limit中的upper值。 更多细节 详见安全限制。
    • k_position (可选, defaults to 0)
      本属性用于说明位置和速度之间的关系。 更多细节 详见安全限制。
    • k_velocity (必选)
      本属性用于说明力和速度之间的关系。 更多细节 详见安全限制。

5. SmartCar——urdf

下载相关文件点击这里
下面对小车的urdf进行详细的介绍。

  1. <?xml version="1.0"?>
  2. <robot name="smartcar">
  3. <link name="base_link"> <!-- 定义最基本的link作为小车的车体,其他link通过jiont固定在该link上 -->
  4. <visual> <!-- 视觉信息 -->
  5. <geometry>
  6. <box size="0.25 .16 .05"/> <!-- 选择0.25cm x 0.16cm x 0.05cm 的立方体作为小车车体 -->
  7. </geometry>
  8. <origin rpy="0 0 1.57075" xyz="0 0 0"/> <!-- 车体绕着z轴旋转90度 -->
  9. <material name="blue">
  10. <color rgba="0 .5 .8 1"/>
  11. </material>
  12. </visual>
  13. </link>

为更直观的看 的作用,在rviz中显示如下图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE2Nzc1Mjkz_size_16_color_FFFFFF_t_70 2

将其改为 <origin rpy="0 0 0" xyz="0 0 0"/>后,在rviz中显示如下图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE2Nzc1Mjkz_size_16_color_FFFFFF_t_70 3 明显可以看出图中只有车体绕着z轴转动了90度,轮子等其他部分没有变动。

  右前轮的link定义如下,至于为什么右前轮没有<origin rpy="0 0 1.57075" xyz="0 0 0"/>进行转动,因为在其后的定义的right_front_wheel_joint中将其旋转链接在base_link上。

  1. <link name="right_front_wheel">
  2. <visual>
  3. <geometry>
  4. <cylinder length=".02" radius="0.025"/>
  5. </geometry>
  6. <material name="black">
  7. <color rgba="0 0 0 1"/>
  8. </material>
  9. </visual>
  10. </link>

下面是连接车体和右前轮的joint,名字为right_front_wheel_joint

  1. <joint name="right_front_wheel_joint" type="continuous"> <!-- 类型为continuous,连续型的铰链关节,可以绕一个轴旋转,没有最大值和最小值限制 -->
  2. <axis xyz="0 0 1"/> <!-- 设置z轴为旋转轴 -->
  3. <parent link="base_link"/> <!-- 其父link为base_link,即车体 -->
  4. <child link="right_front_wheel"/> <!-- 子link为右前轮,将其固定在车体上 -->
  5. <origin rpy="0 1.57075 0" xyz="0.08 0.1 -0.03"/> <!-- 由于轮子初始状态为圆柱,像本章第二张图所示,因此需要将其绕着y轴旋转90度 -->
  6. <limit effort="100" velocity="100"/> <!-- 转动时最大力为100,最大速度也为100 -->
  7. <joint_properties damping="0.0" friction="0.0"/> <!-- 设置阻尼值和摩擦力均为0 -->
  8. </joint>

下面为其他轮子的定义,以及与车体的link,不再做详细解释,跟上面的类同。

  1. <link name="right_back_wheel">
  2. <visual>
  3. <geometry>
  4. <cylinder length=".02" radius="0.025"/>
  5. </geometry>
  6. <material name="black">
  7. <color rgba="0 0 0 1"/>
  8. </material>
  9. </visual>
  10. </link>
  11. <joint name="right_back_wheel_joint" type="continuous">
  12. <axis xyz="0 0 1"/>
  13. <parent link="base_link"/>
  14. <child link="right_back_wheel"/>
  15. <origin rpy="0 1.57075 0" xyz="0.08 -0.1 -0.03"/>
  16. <limit effort="100" velocity="100"/>
  17. <joint_properties damping="0.0" friction="0.0"/>
  18. </joint>
  19. <link name="left_front_wheel">
  20. <visual>
  21. <geometry>
  22. <cylinder length=".02" radius="0.025"/>
  23. </geometry>
  24. <material name="black">
  25. <color rgba="0 0 0 1"/>
  26. </material>
  27. </visual>
  28. </link>
  29. <joint name="left_front_wheel_joint" type="continuous">
  30. <axis xyz="0 0 1"/>
  31. <parent link="base_link"/>
  32. <child link="left_front_wheel"/>
  33. <origin rpy="0 1.57075 0" xyz="-0.08 0.1 -0.03"/>
  34. <limit effort="100" velocity="100"/>
  35. <joint_properties damping="0.0" friction="0.0"/>
  36. </joint>
  37. <link name="left_back_wheel">
  38. <visual>
  39. <geometry>
  40. <cylinder length=".02" radius="0.025"/>
  41. </geometry>
  42. <material name="black">
  43. <color rgba="0 0 0 1"/>
  44. </material>
  45. </visual>
  46. </link>
  47. <joint name="left_back_wheel_joint" type="continuous">
  48. <axis xyz="0 0 1"/>
  49. <parent link="base_link"/>
  50. <child link="left_back_wheel"/>
  51. <origin rpy="0 1.57075 0" xyz="-0.08 -0.1 -0.03"/>
  52. <limit effort="100" velocity="100"/>
  53. <joint_properties damping="0.0" friction="0.0"/>
  54. </joint>
  55. <link name="head">
  56. <visual>
  57. <geometry>
  58. <box size=".02 .03 .03"/>
  59. </geometry>
  60. <material name="white">
  61. <color rgba="1 1 1 1"/>
  62. </material>
  63. </visual>
  64. </link>
  65. <joint name="tobox" type="fixed">
  66. <parent link="base_link"/>
  67. <child link="head"/>
  68. <origin xyz="0 0.08 0.025"/>
  69. </joint>
  70. </robot>

参考文献

urdf官方教程
link官方教程
joint官方教程

发表评论

表情:
评论列表 (有 0 条评论,1511人围观)

还没有评论,来说两句吧...

相关阅读