这个urdf文件,URDF(Unified Robot Description Format), 是一种特殊的xml文件格式, 作为机器人的一种描述文件, 在ROS里面大量使用. 在仿真中用的很多,用于创建机器人的仿真模型
在URDF文件中, 第一个出现的就是下图, 很形象的将URDF要定义的主要内容给展现了出来. 一般, 机器人都是由link和joint进行描述. 都会呈现为树状(想象数据结构里面的树), 如图1, 由一个根link(link1)向上, 分别出现了两个分支–link2和link3, 分别由joint连接link. link4就可以类似的理解.
了解机器人的一般描述方式之后, 我们来看一下下图中这个形状的机器人该怎么来描述它.
//命名
//父节点
//子节点 //关节
而现在,你们肯定想要问,link是怎么放得呢,还有他的形状是什么样的呢?请往下看。
为了能够确定位置,我们可以使用origin
子标签进行定义link所应该在的位置. 但是有一点应该注意到, link和link之间是使用joint进行连接, 那么link的位置, 就由连接他的joint确定. 所以, 该子标签是定义在joint内.
而且link不是个质点,而是个刚体所以光有描述点的x,y,z是不够用的, 还需要使用rpy. rpy角是描述船舶在海中航行时姿态的一种方法. 将船的行驶方向取为z轴, 绕z轴旋转称为滚动(Roll), 绕y轴旋转称为俯仰(Pitch), 绕x轴旋转称为偏转(Yaw). 这种描述方式大量运用于各个领域.(z是指机器人的上方,y是指机器人的左侧,x是指右侧,rpy中第一个参数是绕x轴转的角度,第二个为y,第三个是z,注意这里的角度是弧度值)
下面为代码块
rpy="0 0 0" />
下面为我写的代码块的具体实现
在解决了每个link的相对位置之后, 还有一个很关键的问题, 就是每个link长什么样子呢? 圆的? 扁的? 还是奇形怪状的? 下面示例了一些常用的形状, 其中box表示长方体,cylinder是圆柱,sphere球
但可以导入stl格式的文件, 还可以导入dae格式.下述示例中导入了一个小刀.
origin rpy="0 -1.57 0" xyz="0 0 0"/>
当然, 每个link一般是不会产生重合的, 在运动规划的时候, 也会去避免碰撞到自己, 所以针对于每一个link, 还有一个collision标签, 和visual标签内容完全一样.
前面内容可以看到, 每个link可以看作是一个刚体, 刚体和刚体之间是通过joint进行连接, 那么, 问题就来了. 这个joint是固定的? 还是可以任意的动? 如果可以动, 那么, 问题又来了, 极限位置是多少? 等等等等…
比如, 我们限定joint2只能沿着y轴旋转, 则需要添加
, 类似的, 可以指定其他关节的转动轴, 例如
.
比如, 我们要限定joint2的移动范围, 则需要添加
, 从标签中可以看到, 上下限以及速度, 力矩等都是可以指定的.
下附一篇注释比较详细的代码