ROS9

URDF 文件是一个标准的 XML 文件,在 ROS 中预定义了一系列的标签用于描述机器人模型,机器人模型可能较为复杂,但是 ROS 的 URDF 中机器人的组成却是较为简单,可以主要简化为两部分:连杆(link标签) 与 关节(joint标签),接下来我们就通过案例了解一下 URDF 中的不同标签:

  • robot 根标签,类似于 launch文件中的launch标签
  • link 连杆标签
  • joint 关节标签
  • gazebo 集成gazebo需要使用的标签

gazebo标签在使用 gazebo 仿真时用于配置仿真环境所需参数,比如: 机器人材料属性、gazebo插件等,但是该标签不是机器人模型必须的,只有在仿真时才需设置。

robot

urdf 中为了保证 xml 语法的完整性,使用了robot标签作为根标签,所有的 link 和 joint 以及其他标签都必须包含在 robot 标签内,在该标签内可以通过 name 属性设置机器人模型的名称

属性

  • name:机器人模型名称

子标签

robot是根标签,其他标签都必须在robot标签内。

urdf 中的 link 标签用于描述机器人某个部件(也即刚体部分)的外观和物理属性,比如: 机器人底座、轮子、激光雷达、摄像头…每一个部件都对应一个 link, 在 link 标签内,可以设计该部件的形状、尺寸、颜色、惯性矩阵、碰撞参数等一系列属性。

link

属性

  • name:连杆名称

子标签

  • visual:描述外观(对应的数据是可视的)
    • geometry:连杆形状
      • 标签1: box(盒状)
        • 属性:size=长(x) 宽(y) 高(z)
      • 标签2: cylinder(圆柱)
        • 属性:radius=半径 length=高度
      • 标签3: sphere(球体)
        • 属性:radius=半径
      • 标签4: mesh(为连杆添加皮肤)
        • 属性: filename=资源路径(格式:package:////文件)
    • origin :偏移量与倾斜弧度
      • 属性1: xyz=x偏移 y偏移 z偏移
      • 属性2: rpy=x翻滚 y俯仰 z偏航 (单位是弧度)
    • metrial:材料属性(颜色)
      • 属性: name
      • 标签: color
        • 属性: rgba=红绿蓝权重值与透明度 (每个权重值以及透明度取值[0,1])
  • collision:连杆碰撞属性
  • Inertial : 连杆惯性矩阵

案例实现

编写可视化部分 visual标签

基本几何形状 geometry标签

分成生成长方体、圆柱与球体的机器人部件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<robot name="robot">
<link name="base_link">
<!-- 可视化标签-->
<visual>
<!-- 形状-->
<geometry>
<!-- 长方体-->
<!-- <box size="1 0.5 0.2"/> -->
<!-- 圆柱体-->
<!-- <cylinder radius="0.3" length="1"/> -->
<!-- 球体-->
<!-- <sphere radius="0.4"/> -->
<!-- 外观-->
</geometry>
</visual>
</link>
</robot>
image-20220827212317037

加载模型文件 mesh标签

1
2
3
4
5
6
7
8
9
10
11
<robot name="robot">
<link name="base_link">
<!-- 可视化标签-->
<visual>
<!-- 形状-->
<geometry>
<!-- 模型 -->
<mesh filename="package://功能包/模型路径"/>
</geometry>
</visual>
</link>
image-20220827165551299

设置偏移量与欧拉角 origin标签

我们可以看到上面加载的小车模型的姿态是垂直于平面的,我们可以通过origin标签实现小车的移动与倾斜。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<robot name="robot">
<link name="base_link">
<!-- 可视化标签-->
<visual>
<!-- 形状-->
<geometry>
<!-- 长方体-->
<!-- <box size="1 0.5 0.2"/> -->
<!-- 圆柱体-->
<!-- <cylinder radius="0.3" length="1"/> -->
<!-- 球体-->
<!-- <sphere radius="0.4"/> -->
<!-- 外观-->
<mesh filename="package://urdf_test/meshes/autolabor_mini.stl"/>
</geometry>
<origin xyz="0 0 0" rpy="0 0 0"></origin>
</visual>
</link>
</robot>

平移 xyz

image-20220827170900235

翻滚 rpy:x

image-20220827171118010

俯仰 rpy:y

image-20220827171454587

偏航 rpy:z

image-20220827171607695

通过改变模型的翻滚角度设为90度,弧度约为1.57,就可以使小车模型平行于平面。

image-20220827172646892

设置颜色 material标签

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<robot name="robot">
<link name="base_link">
<!-- 可视化标签-->
<visual>
<!-- 形状-->
<geometry>
<mesh filename="package://urdf_test/meshes/autolabor_mini.stl"/>
</geometry>
<origin xyz="0 0 0" rpy="1.57 0 0"></origin>
<material name="color" >
<color rgba="0 0 1 1"></color>
</material>
</visual>
</link>
</robot>

image-20220827173219841

joint

urdf 中的 joint 标签用于描述机器人关节的运动学和动力学属性,还可以指定关节运动的安全极限,机器人的两个部件(分别称之为 parent link 与 child link)以”关节”的形式相连接,不同的关节有不同的运动形式: 旋转、滑动、固定、旋转速度、旋转角度限制….,比如:安装在底座上的轮子可以360度旋转,而摄像头则可能是完全固定在底座上。

joint标签对应的数据在模型中是不可见的

joint

属性

  • name —> 为关节命名
  • type —> 关节运动形式
    • continuous: 旋转关节,可以绕单轴无限旋转
    • revolute: 旋转关节,类似于 continues,但是有旋转角度限制
    • prismatic: 滑动关节,沿某一轴线移动的关节,有位置极限
    • planer: 平面关节,允许在平面正交方向上平移或旋转
    • floating: 浮动关节,允许进行平移、旋转运动
    • fixed: 固定关节,不允许运动的特殊关节

子标签

  • parent (必填)

    parent link的名字是一个强制的属性:

    • link:父级连杆的名字,是这个link在机器人结构树中的名字。
  • child(必填)

    child link的名字是一个强制的属性:

    • link:子级连杆的名字,是这个link在机器人结构树中的名字。
  • origin

    • 属性: xyz=各轴线上的偏移量 rpy=各轴线上的偏移弧度。
  • axis

    • 属性: xyz用于设置围绕哪个关节轴运动。