URDF格式在ROS中是一个非常重要的机器人模型描述格式,URDF采用各种标签描述具体的机器人模型
1 机器人名称描述
<robot name="mrobot_chassis">
..........
</robot>
robot name定义了机器人的名称
<robot name>标签是完整机器人模型最顶层的标签,<link>和<jiont>.....等其他标签都必须包含在
<robot name>....................................</robot>里面
2 <link>描述标签
<link name="base_link">
<inertial>
<mass value="0.001"/>
<origin xyz="0 0 0"/>
<inertia ixx="0.000" ixy="0.0" ixz="0.0" iyy="0.000" iyz="0.0" izz="0.000"/>
</inertial>
<visual>
<origin xyz=" 0 0 0" rpy="0 0 0" />
<geometry>
<cylinder length="0" radius="0"/>
</geometry>
<material name="yellow">
<color rgba="0 0 0 0"/>
</material>
</visual>
<collision>
<origin xyz="0.0 0.0 0.0" rpy="0 0 0" />
<geometry>
<box size="0.0 0.0 0.0" />
</geometry>
</collision>
</link>
link标签用于描述机器人某个刚体部分的外观和物理属性,包括尺寸 颜色 形状 惯性矩阵和碰撞参数等
其中 <inertial>.........</inertial>用于描述link的惯性参数,<visual> .........</visual>用于描述机器人link部件
的外观参数,<collision>..........</collision>用于描述link的碰撞属性,一般检测碰撞区域大于外观可视的
区域,只要与collision区域相交即可认为与该部件发生碰撞
3 机器人关节属性连接标签<jiont>
<jiont>标签用于描述机器人关节运动学和动力学属性,包括关节运动位置速度等,关节的type运动形式为以下几种
<jiont>标签
<joint name="joint" type="continuous">
<origin xyz="0 0 0" rpy="0 0 0"/>
<parent link="left_motor"/>
<child link="left_wheel_link"/>
<calibration............/>
<dynamics.............../>
<limit................../>
<axis xyz="0 1 0"/>
</joint>
<joint>必须指定parent link和child link参数,其他参数可选
<calibration>关节的参考位置,用于矫正关节的绝对位置
<dynamics>用于描述关节的物理属性,若阻尼 摩擦等
<limit>用于描述运动的一些极限值,比如关节的上下运动的极限角度等
4 创建一个简单机器人模型例子解析
<?xml version="1.0" ?>
<robot name="mrobot_chassis">
//robot name 标签用于定义所描述机器人的名称
<link name="base_link">
<visual> //
<origin xyz=" 0.1 0.1 0.1" rpy="0 0 0" />
<geometry>
<cylinder length="0.005" radius="0.13"/>
</geometry>
<material name="yellow">
<color rgba="1 0.4 0 1"/>
</material>
</visual>
</link>
//link标签描述了机器人某个刚体部分的外观和物理属性,包括尺寸,颜色,形状惯性和碰撞参数等,visual...../visual 标签描述机器人某个部件的外观参数等。origin 标签描述了所绘制外观geometry的坐标起点,一般对于规则形状的外观坐标起点位于规则形状的重心位置, cylinder 标签描述了这个圆柱体的尺寸,material 标签用于描述外观的颜色等信息
<joint name="base_left_motor_joint" type="fixed"> //joint...../joint标签用于描述机器人关节的运动学和动力属性
<origin xyz="0.1 0.1 0.1" rpy="0 0 0" />
<parent link="base_link"/>
<child link="left_motor" />
</joint>
//上述joint...../joint标签中一般描述origin parent child等参数,origin描述了joint连接点基于parent link="base_link"
坐标的偏移量,一般在rviz仿真中左上角Fixed Frame 的map选项设置成base_link,则base_link在rviz中为坐标原点,那么 origin所描述的joint为基于坐标原点的偏移量,parent为jiont的支撑连接部件,child为子部件,joint就为子部件和支撑连接部件 的关节
<link name="left_motor">
<visual>
<origin xyz="0.2 0.2 0.2" rpy="0 0 0" />
<geometry>
<cylinder radius="0.02" length = "0.08"/>
</geometry>
<material name="gray">
<color rgba="0.75 0.75 0.75 1"/>
</material>
</visual>
</link>
//link name="left_motor"标签为base_left_motor_joint连接件的子部件,其中origin描述了该部件基于base_left_motor_joint关节
坐标的偏移点,base_left_motor_joint关节的坐标原点为origin xyz="0.1 0.1 0.1",若left_motor部件的origin xyz="0.2 0.2 0.2"
则表示left_motor所描述部件基于base_left_motor_joint关节坐标xyz="0.1 0.1 0.1"的偏移量为xyz="0.2 0.2 0.2"
<joint name="left_wheel_joint" type="continuous">
<origin xyz="0.5 0.0485 0" rpy="0 0 0"/>
<parent link="left_motor"/>
<child link="left_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
//连接关节joint name="left_wheel_joint" 为left_motor和left_wheel_link关节点,left_wheel_link为left_motor的子部件,其中
left_wheel_joint的基础坐标是基于parent link="left_motor"的关节joint name="base_left_motor_joint" 的基础坐标偏移量
而非left_motor的origin偏移量
.......
..........
</robot>
5 关于<joint>坐标偏移量,如下图所示一个运动部分由好几个关节组成
图中左下角为坐标参考点,在rviz仿真中机器人部件的坐标参考点是可以修改,rviz界面左上角Fixed Frame 的
map选项中可以修改。假设图中参考点为第4点中<link name="base_link">参考点,那么后面关节描述的origin坐
标是关于参考点或者前一个相连接的关节为参考,如上图joint3的关节坐标的偏移是以jiont2为参考,而跟link3部
分的origin坐标偏移无关,如joint name="left_wheel_joint"是joint name="base_left_motor_joint" 的子关节,那么
joint name="left_wheel_joint"的origin坐标偏移是以joint name="base_left_motor_joint" 的origin坐标为偏移,而
跟link name="left_motor"部件的origin坐标偏移无关,link name="left_motor"部件的origin坐标偏移表示该部件
偏移joint name="base_left_motor_joint"坐标的量。