⑤Pybullet之URDF文件说明及示例
Pybullet进行机器人导入时,肯定会使用到URDF文件。此处详细说明一下URDF文件具体内容及作用。
一、URDF概述
URDF全称为"统一机器人描述格式"(Unified Robot Description Format),可以理解为机器人领域的"说明书"。与计算机文件中的.txt文本格式、.jpg图像格式类似,URDF是一种专门用于描述机器人结构的XML格式文件。
URDF的设计目的在于提供一种尽可能通用的机器人描述规范。从机构学角度讲,机器人通常被建模为由连杆(Link)和关节(Joint)组成的结构。连杆是带有质量属性的刚体,而关节是连接、限制两个刚体相对运动的结构。关节也被成为运动副。通过关节将连杆依次连接起来,就构成了一个个运动链(也就是这里所定义的机器人模型)。
一个URDF文档即描述了这样的一系列关节与连杆的相对关系、惯性属性、几何特点和碰撞模型。具体来说,包括:
- 机器人模型的运动学与动力学描述
- 机器人的几何表示
- 机器人的碰撞模型
二、URDF基本结构
URDF文件本质上是XML格式的文件,具有清晰的层级结构。一个典型的URDF文件以<robot>
标签开始,包含多个<link>
和<joint>
标签,描述机器人的各个部件及其连接关系。
1、XML声明
它是所有合法XML文件的第一行,用于确保文件被正确解析。如下所示,告诉解析器,这个文件是一个XML文件,并且遵循XML 1.0规范。
<?xml version="1.0" ?>
2、顶层结构
URDF文件的最外层是<robot>
标签,它定义了整个机器人模型。<robot>
标签通常包含一个name
属性,用于指定机器人的名称。此外,也可以引入扩展。如Xacro是ROS对标准URDF XML格式的扩展,它允许在URDF文件中使用宏定义、变量、条件语句和数学表达式等,从而大大提高了URDF文件的可重用性和可维护性,避免了大量重复代码。
<?xml version="1.0"?>
<robot name="melfa_rv-8crl" xmlns:xacro="http://wiki.ros.org/xacro"><!-- link和joint定义放在这里 -->
</robot>
在这个例子中,机器人的名称是melfa_rv-8crl
,这通常暗示这是一个Melfa品牌的RV-8CRL型号的机器人。xmlns
是XML Namespaces的缩写,xacro
是自定义的命名空间前缀,"http://wiki.ros.org/xacro"
是该命名空间的URI(统一资源标识符)。如果没有这个声明,文件就只是一个标准的、相对基础的URDF文件。
3、Link(连杆)定义
<link>
标签描述机器人中一个刚体部分,每个Link都会成为一个坐标系。一个Link通常包含三个子标签:
<visual>
:定义外观属性(几何形状、颜色、纹理)<inertial>
:定义物理属性(质量、惯性矩阵等)<collision>
:定义碰撞属性检测的几何形状
<!-- Base Link --><link name="base_link"><visual><origin xyz="0 0 0" rpy="1.5708 -0 3.1416" /><geometry><mesh filename="package://melfa_rv-8crl/meshes/base.stl"/></geometry><material name="melfa_rv-8crl_grey"/></visual><collision><origin xyz="0 0 0" rpy="1.5708 -0 3.1416" /><geometry><mesh filename="package://melfa_rv-8crl/meshes/base.stl"/></geometry></collision><inertial><mass value="4.0"/><origin xyz="0 0 0" rpy="1.5708 -0 3.1416" /><inertia ixx="0.00443333156" ixy="0.0" ixz="0.0" iyy="0.00443333156" iyz="0.0" izz="0.0072"/></inertial></link>
4、Joint(关节)定义
<joint>
标签描述两个Link之间的关系,包括关节运动的位置和速度限制,描述机器人运行学属性。关节定义中包含以下重要属性和子标签:
type
:关节类型parent
:指定父Linkchild
:指定子Linkorigin
:定义关节相对于父Link坐标系的位置和姿态axis
:定义关节运动轴limit
:定义关节运动范围
关节类型有以下几种:
continuous
:一个不受限制的,绕着一根轴的转动副revolute
:一个转动角度受到限制的,绕着一根轴的转动副prismatic
:一个沿着一根轴的滑动副,并且有限位fixed
:固定关节floating
:这个关节允许六个自由度的运动,浮动关节
<!-- Link 1 --><joint name="joint_1" type="revolute"><origin rpy="0 0 0" xyz="0.0 0.0 0.0"/><axis xyz="0 0 1"/><parent link="base_link"/><child link="link_1"/><limit effort="0" lower="-2.96706" upper="2.96706" velocity="0"/></joint>
对于简单的机器人模型,可以直接手动编写URDF文件。使用任何文本编辑器,按照XML语法和URDF规范编写即可。对于复杂的机器人模型,通常使用三维建模软件创建模型,然后导出为URDF文件。常用的方法包括:
- 使用SolidWorks的SW2URDF插件
- 使用SketchUp导出为dae格式,然后转换为URDF
后续再详细介绍如何通过SolidWorks制作URDF文件。