Unified Robot Description Format,简称为URDF(标准化机器人描述格式),是一种用于描述机器人及其部分结构、关节、自由度等的XML格式文件。
一、创建第一个URDF文件
将要创建的URDF文件描述的是一种最常见的移动机器人,它有四个轮子、一个带有抓取器的手臂。
为了打好基础,我们先做一个带有四个轮子的机器人底座。在 chapter7_tutorials/robot1_description/urdf 文件夹创建一个新文件并命名为robot1.urdf,其内容如下:
二、常见标签说明
连接(link)标签
标签 | 功能 |
---|---|
连接的可视化、碰撞和惯性属性设置 | |
设置连接的可视化属性 | |
设置连接的碰撞计算属性 | |
设置连接的惯性属性 | |
输入模型的形状。提供box、cylinder、sphere等形态 | |
设置相对于连接相对坐标系的移动和旋转 | |
设置连接的颜色和纹理 | |
连接重量(单位:kg)的设置 |
关节(joint)标签
标签 | 功能 |
---|---|
与连接的关系和关节类型的设置 | |
关节的父连接 | |
关节的子连接 | |
将父连接坐标系转换为子连接坐标系 | |
设置旋转轴 | |
设置关节的速度、力和半径(仅当关节是revolute或prismatic时) |
transmission标签
标签 | 功能 |
---|---|
设置关节和舵机之间的变量 | |
设置力的传递方式的形状 | |
设置关节信息设置 | |
设置硬件接口 | |
设置舵机信息 | |
设置舵机与关节之间的齿轮比 |
注:这里的起点位置是相对与父连杆的位置,并不是绝对坐标。另外连接又称连杆。
三、解释文件格式
如你在代码中所见,有两种用于描述机器人几何结构的基本字段:连接(link)和关节(joint)。
第一个连接的名字是base_link(基本连接),这个名字在文件中必须唯一:
- link name:定义连接名称为base_link
- visual:让定义的物体结构可见
- geometry:定义几何形状(圆柱体、立方体、球体和网格)为box,尺寸为0.2*0.3*0.1
- origin:rpy-起点位置无位移,xyz-绕z轴旋转
- material:定义材质(颜色和纹理),这里只定义了颜色为rgba="1 1 1 1"
然后使用以下代码定义关节:
- joint name:定义关节名称为base_to_wheel1,类型为固定关节
- parent link:父连接是base_link
- child link:子连接是wheel_1
- origin:起点位置相对父连接无位移
关节类型
- fiexd:固定关节,不允许运动的特殊关节
- continuous:转动关节,可以绕单轴无线旋转
- revolute:旋转关节,类似于continuous,但旋转角度有限
- prismatic:滑动关节,沿某一轴线移动的关节,带有位置极限
- floating:浮动关节,允许进行平移、旋转运动
- planar:平面关节,允许在平面正交方向上平移或者旋转
四、检查URDF语法
ROS为用户提供了一个检查URDF语法的命令:
check_urdf robot1.urdf
如果一切正常,将会有如下显示:
robot name is: Robot1
---------- Successfully Parsed XML ---------------
root Link: base_link has 4 child(ren)
child(1): wheel1
child(2): wheel2
child(3): wheel3
child(4): wheel4
如果你希望以图形的方式来查看它,那么可以使用urdf_to_graphiz
命令工具:
$ urdf_to_graphiz robot1.urdf
此命令将生成两个文件:robot1.gv 和 robot1.pdf。可以使用 evince 打开:
evince robot1.pdf
显示如下:
五、在rviz里查看3D模型
新建launch文件
在robot1_description/launch文件夹下新建display.launch文件,代码如下:
运行launch文件
$ roslaunch robot1_description display.launch model:="`rospack find robot1_description`/urdf/robot1.urdf"
注:把文件直接拖进终端就可以直接显示文件位置信息。
显示如下:
默认状态下画面中什么都没有,此时需要做出调整。在左下角的add按钮中添加RobotModel,然后将Fixed Frame选为base_link。
六、添加基座臂、连接臂和夹持臂
补充urdf文件
在前增添以下代码:
运行launch文件
$ roslaunch robot1_description display.launch model:="`rospack find robot1_description`/urdf/robot1.urdf"
显示如下:
七、使机器人模型运动
最常用的关节是转动关节。例如,我们在 arm_1_to_arm_base 上使用的就是,其代码如下所示:
旋转转动轴来运动。- limit 标签用于选择以下属性:effort(关节所承受的最大力),lower(赋值给关节的下限,旋转关节的单位是弧度,移动关节的单位是米),upper(赋值给关节的上限),velocity(强制关节的最大速度)。
要判断关节的轴或转动限值是否合适,有一种好的办法就是使用 joint_state_publisher GUI 运行 rviz(加上了gui:=true):
$ roslaunch robot1_description display.launch model:="`rospack find robot1_description`/urdf/robot1.urdf" gui:=true
joint_state_publisher GUI 运行界面显示如下:
urdf文件中每一个axis对应一个调节器,joint_state_publisher应该是ros中自带的调节joint的功能,所以直接调用就可以。另外界面中的每个滑块都能控制一个关节。
八、物理属性和碰撞属性
如果你想要在 gazebo 或者其他仿真软件上进行机器人仿真,就需要添加物理属性和碰撞属性。这意味着我们需要设定几何尺寸来计算可能的碰撞,例如设定重量我们才能够计算惯性等。
你需要保证模型文件中的所有连接都有这些参数,否则就无法对这些机器人进行仿真。
在下面的代码中,你会看到我们向名为 base_link 的连接添加这两个属性:
...
对于其他的连接也要这么做。记住,要为所有连接添加 collision 和 inertial 属性,因为如果你不这样做的话,gazebo 将无法使用这些模型。
你能够在 robot1_description/urdf/robot1_physics.urdf 中查看带有所有参数的完整文件。
参考:
ROS-URDF仿真