前言:ROS机器人采用urdf文件描述运动学和动力学特征,视觉表示,碰撞模型等。
在URDF中,机器人模型由连接件(link)和连接件的关节(joint)、传感器(sensor)传动件(transmission)等部件组成。
1.连接件
在urdf支持连接件的标签为link,link标签用于描述具有惯性和视觉特征的刚体,也即机器人的物理部件。link标签通过name属性描述连接件的名称。
link标签可包含inertial(惯性特征),visual(视觉特征),collision(碰撞特征)等标签
(1)惯性特征
物体的惯性和物体的质量,形状,以及质量分布有关,出于计算复杂性和刚体特征考虑,通常默认质量是均匀分布的。
对于半径r和质量为m的实心球体,其选红钻惯性矩阵为:
球体:
<!-- Macro for inertia matrix -->
<xacro:macro name="sphere_inertial_matrix" params="m r">
<inertial>
<mass value="${m}" />
<inertia ixx="${2*m*r*r/5}" ixy="0" ixz="0"
iyy="${2*m*r*r/5}" iyz="0"
izz="${2*m*r*r/5}" />
</inertial>
</xacro:macro>
球体矩阵模块使用:
<sphere_inertial_matrix m="${caster_mass}" r="${caster_radius}" />
对于宽度w、高h、长为d、质量为m的实心立方体,其旋转惯性矩阵为:
立方体惯性矩阵模块:
<xacro:macro name="Box_inertial_matrix" params="m l w h">
<inertial>
<mass value="${m}" />
<inertia ixx="${m*(h*h + l*l)/12}" ixy = "0" ixz = "0"
iyy="${m*(w*w + l*l)/12}" iyz= "0"
izz="${m*(w*w + h*h)/12}" />
</inertial>
</xacro:macro>
对于半径r、高为h、质量为m、的实心圆柱体,其旋转惯性矩阵为:
圆柱体定义:
<xacro:macro name="cylinder_inertial_matrix" params="m r h">
<inertial>
<mass value="${m}" />
<inertia ixx="${m*(3*r*r+h*h)/12}" ixy = "0" ixz = "0"
iyy="${m*(3*r*r+h*h)/12}" iyz = "0"
izz="${m*r*r/2}" />
</inertial>
</xacro:macro>
圆柱体惯性矩阵使用:
<cylinder_inertial_matrix m="${wheel_mass}" r="${wheel_radius}" h="${wheel_length}" />
(2)视觉特征
visual标签定义了连接件的视觉特征,可包含的子标签有origin、geometry、material、mesh等。其中origin标签定义了连接件的位姿;geometry定义了连接件的几何特征。
目前支持立方体(box),圆柱体(cylinder)、球体(sphere)等。material定义了连接件的材料特征,支持颜色(color),纹理(texture)等;mesh定义了导入三维建模文件,格式为dae,stl等
视觉特征定义使用RGB色表
<!-- Defining the colors used in this robot -->
<material name="blue">
<color rgba="0 0 0.8 1"/>
</material>
<material name="black">
<color rgba="0 0 0 0.95"/>
</material>
<material name="green">
<color rgba="1 0 0 1"/>
</material>
<material name="white">
<color rgba="1 1 1 1"/>
</material>
URDF:
<material name="blue" />
xacro:
<gazebo reference="${prefix}_wheel_link">
<material>Gazebo/Gray</material>
</gazebo>
(3)碰撞特征
collision标签定义了连接件的碰撞特征,可包含的子标签有origin,geometry等。其中origin标签定义了连接件的位姿检测区相对于link的偏移位置;geometry定义了连接件的几何特征,目前支持立方体(box),圆柱体(cylinder)、球体(sphere)等。
需要注意的是,origin标签是利用空间笛卡尔直角坐标系和欧拉角来描述位姿,其中xyz属性描述了连接件X,Y,Z轴上的偏移;rpy属性描述了连接件X,Y,Z轴上的旋转角度,即欧拉角中的滚转角(Roll)、俯仰角(Pitch),偏航角(Yaw),顺时针为正,逆时针为负
<collision>
<origin xyz="0 0 0" rpy="${M_PI/2} 0 0" />
<geometry>
<cylinder radius="${wheel_radius}" length = "${wheel_length}"/>
</geometry>
</collision>