URDF 玩虚拟机的时候用得着, 因为它可以用来在rviz跟gazebo里面用xml定义出一个虚拟的机器人, 全称为Universal Robot Discription Format, 记住这个, 就不会老记成urdf/udrf, 傻傻分不清楚了..
这里有很多别人的urdf:
http://wiki.ros.org/urdf/Examples
xml是如何对模型, 传感器, 关节之类进行编码的呢?
首先模型
http://wiki.ros.org/urdf/XML/model
如上图, 一个机器人, 根儿是Link1, 通过关节1, 2 连接Link3, Link2, 然后Link3通过关节2连接Link4.
格式基本上是这样:
<robot name="pr2"> <link> ... </link> <link> ... </link> <link> ... </link> <joint> .... </joint> <joint> .... </joint> <joint> .... </joint> </robot>
Link就是能单独移动的东西,比如轮子啦, 机械臂之类:
<link name="my_link"> <inertial> <origin xyz="0 0 0.5" rpy="0 0 0"/> <mass value="1"/> <inertia ixx="100" ixy="0" ixz="0" iyy="100" iyz="0" izz="100" /> </inertial> <visual> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <box size="1 1 1" /> </geometry> <material name="Cyan"> <color rgba="0 1.0 1.0 1.0"/> </material> </visual> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <cylinder radius="1" length="0.5"/> </geometry> </collision> </link>
结合上面的图, 看看下面的实例:
<link name="my_link"> <inertial> <origin xyz="0 0 0.5" rpy="0 0 0"/> <mass value="1"/> <inertia ixx="100" ixy="0" ixz="0" iyy="100" iyz="0" izz="100" /> </inertial> <visual> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <box size="1 1 1" /> </geometry> <material name="Cyan"> <color rgba="0 1.0 1.0 1.0"/> </material> </visual> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <cylinder radius="1" length="0.5"/> </geometry> </collision> </link>
先不管惯性跟碰撞, 先看看有关visual的部分, 就是外貌啊.. : )
xyz就是xyz, 没啥可解释的, rpy, 这个...听着很污啊, 其实是roll, pitch, yaw, 中文只有一个字形容这三个状态, 就是滚, 但是英语里面分为向前滚, 向侧面滚, 跟就地旋转三个词, 厉害吧, 其实科学点说, 是前倾角, 侧倾角, 偏航角, 玩过G-Sensor的就是熟悉这个了.
origin就是相对frame的起始位置
geometry就是外形, 如果是个立方体, 就是直接用box, size...不用说了吧.
还有类似的: cylinder(圆柱), sphear(球体)
meterial就是刷漆, 刷什么颜色的漆, 或者贴图.
当你导入类似dae, stl的结构文件的时候, 就需要制定导入的文件, 用mesh:
<geometry> <mesh filename="package://carModel/meshes/l_finger.dae"/> </geometry>