起源
URDF全称(United Robotics Description Format)统一机器人描述格式,是一个XML语法框架下用来描述机器人的语言格式.
详细文档参见: https://wiki.ros.org/urdf/XML
单位
- 长度单位: m
- 质量单位: kg
- 速度单位: m/s
层次结构
示例
<robot name="my_robot">
<link name="link_a">
<inertial></inertial>
<visual></visual>
<collision></collision>
</link>
<link name="link_b"></link>
<!-- other link --->
<joint name="joint_a" type="fixed">
<parent link="link_a" />
<child link = "link_b" />
<origin xyz="-0.055 0.075 0" rpy="0 0 0" />
</joint>
<!-- other joint --->
</robot>
link
link 是一个完整的部件, 主要含有三个属性: inertial, collision, visual等三个.
<link name="link_a">
<visual>
<origin xyz=" 0 0 0" rpy="0 0 0" />
<geometry>
<cylinder length="0.005" radius="0.13"/>
</geometry>
<material>
<color rgba="1 0.4 0 1"/>
</material>
</visual>
<inertial>
<mass value="2" />
<origin xyz="0 0 0 .0" />
<inertia ixx="0.01" ixy= "0.0" ixz="0.0"
iyy="0.01" iyz="0.0" izz="0.5" />
</inertial>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<cylin der length="${base_link_length}"
radius="${base_link_radius}"/>
</geometry>
</collision>
</link>
visual
visual 为部件的可视化描述
- origin: 位置, 放置物体的全局坐标位置
- geometry: 几何形状, 有box, cylinder, sphere, mesh等属性, 放置时以其几何中心点对齐到origin位置
- material: 材质属性, 属性color的每个权重值范围是[0,1]
inertial
inertial 为部件的惯性描述
- mass: 质量大小
- origin: 质量的中心点
- inertia: 各个方向的惯性系数
collision
collision 为部件的碰撞描述
- origin: 碰撞点的偏移描述
- geometry: 几何形状
joint
joint 是表述link 之间的关系, 这种关系是一个树状结构
- 一个child link 只能有一个parent link
- 一个模型只能由一个root link
- 只有root link可以有多个分支
<joint name="joint_a" type="fixed">
<parent link="link_a" />
<child link = "link_b" />
<origin xyz="-0.055 0.075 0" rpy="0 0 0" />
</joint>
- origin: 位置, 当放置好child link后, child link需要再次变动的描述
type
type 指明joint运动形式
- continuous: 绕轴旋转的连续铰链关节,没有上下限
- revolute: 沿轴旋转的铰链关节,其范围由上限和下限指定
- prismatic: 沿轴滑动的滑动关节,具有由上限和下限指定的有限范围
- planar: 该关节允许在垂直于轴的平面上运动
- floating: 该关节允许所有 6 个自由度的运动
- fixed: 这并不是真正的关节,因为它不能移动。 所有自由度均被锁定。 这种类型的关节不需要<axis>、<calibration>、<dynamics>、<limits>或<safety_controller>
rpy
- roll:翻滚角ϕ \phiϕ(视角旋转)。向右滚为正,反之为负
- pitch:俯仰角θ \thetaθ(往上往下)。抬头为正,反之为负
- yaw:侧航角ψ \psiψ(往左往右)。右偏航为正,反之为负
常量
在同一个urdf文件中, 定义常量, 方便值的修改
定义
<?xml version="1.0"?>
<robot name="robot_na me" xmlns:xacro="http://www.ros.org/wiki/xacro>">
<xacro:property name="M_PI" value="3.14159"/>
</robot>
使用
<?xml version="1.0"?>
<robot name="robot_na me" xmlns:xacro="http://www.ros.org/wiki/xacro>">
<!-- ... -->
<link name="link_a">
<visual>
<geometry>
<origin xyz="0 0 0" rpy="${M_PI/2} 0 0" />
</geometry>
</visual>
</link>
</robo>
宏
在同一个urdf文件中, 定义宏, 方便相同描述的重复利用
定义
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:macro name="my_wheel" params="name">
<link name="${name}">
<inertial>
<mass value="0.001" />
<origin xyz="0 0 0" />
<inertia ixx="0.0001" ixy="0.0" ixz="0.0"
iyy="0.0001" iyz="0.0" izz="0.0001" />
</inertial>
<!-- ... -->
</link>
<!-- ... -->
</xacro:macro>
</robot>
使用
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
<!-- ... -->
<my_wheel name="top"/>
</robot>