3 most important points

  1. URDF 使用 XML 格式描述机器人文件
  2. 使用 link 描绘不同部件的外形,包括形状、材质(颜色)、初始位置、初始角度
  3. 使用 joint 描述部件之间的关系,包括位置关系和旋转关系

5 thoughts

Notes

URDF(Unified Robot Description Format)统一机器人描述格式,URDF 使用 XML 格式描述机器人文件。

XML

XML 规定了数据格式。 示例,类似 HTML:

<?xml version="1.0"?>
<robot name="阿童木">
<link name="大手臂">具体的描述</link>
<joint name="胳膊肘">具体的描述</joint>
<link name="小手臂">具体的描述</link>
</robot>

其中包括:

  • 标签:如 robotlink
  • 属性:如 name

XML 格式在线校验工具:在线代码格式化

  • URDF 的组成
    • 声明信息
      • XML 声明:<?xml version="1.0"?>
      • 机器人声明:如 <robot name="阿童木">
    • 关键组件
      • link:机器人的部件,比如躯体、轮子、IMU、雷达、支撑轮等、
        • visual:描述形状
          • geometry:几何形状
            • box:长方体,属性 size 长宽高
            • sphere:球体,属性 radius 半径
            • cylinder:圆柱体,属性 radius 半径、length 高度
            • mesh:第三方导出的模型文件,属性 filename
          • origin:原始位姿,默认在物体几何中心,属性 xyz 默认零矢量、rpy 为弧度表示的翻滚、俯仰、偏航
          • material:材质,属性 name
            • color:属性 rgba
        • collision:碰撞属性 即描述碰撞体,类似 visual ^4328bb
          • geometry:碰撞体的几何形状
          • origin:碰撞体的原始位姿
          • material可选 碰撞体的材料
        • inertial:惯性参数、质量等 ^4ba58f
          • mass:质量
          • inertia:旋转惯量,属性 ixx\ixy\ixz\iyy\iyz\izz 有特定计算方法
      • joint:Link 和 Link 之间的链接部分称为关节,写明父子关系
        • 属性 type
          • revolute:旋转关节,绕单轴旋转,角度有上下限,比如舵机 0-180
          • continuous:旋转关节,可以绕单轴无限旋转,比如自行车的前后轮
          • fixed:固定关节,不允许运动的特殊关节
          • prismatic:滑动关节,沿某一轴线移动的关节,有位置极限
          • planer:平面关节,允许在 xyz,rxryrz 六个方向运动
          • floating:浮动关节,允许进行平移、旋转运动
        • parent:父 link 名称,属性 link
        • child:子 link 名称,属性 link
        • origin:父子的关系,属性 xyzrpy
        • axis:围绕旋转的关节轴,属性 xyz
<?xml version="1.0"?>
<robot name="fishbot">
 
	<!-- base link -->
	<link name="base_link">
		<visual>
			<origin xyz="0 0 0.0" rpy="0 0 0"/>
			<geometry>
				<cylinder length="0.12" radius="0.10"/>
			</geometry>
		</visual>
	</link>
	
	<!-- laser link -->
	<link name="laser_link">
		<visual>
			<origin xyz="0 0 0" rpy="0 0 0"/>
			<geometry>
				<cylinder length="0.02" radius="0.02"/>	
			</geometry>
			<material name="black">
				<color rgba="0.0 0.0 0.0 0.5" /> 
			</material>
		</visual>
	</link>
	
	<!-- laser joint -->
	<joint name="laser_joint" type="fixed">
		<parent link="base_link" />
		<child link="laser_link" />
		<origin xyz="0 0 0.075" />
	</joint>
 
</robot>

两轮差速模型示意图

<?xml version="1.0"?>
<robot name="fishbot">
    
	<!-- base link -->
	<link name="base_link">
		<visual>
			<origin xyz="0 0 0.0" rpy="0 0 0"/>
			<geometry>
				<cylinder length="0.12" radius="0.10"/>
			</geometry>
		</visual>
	</link>
	
	<!-- laser link -->
	<link name="laser_link">
		<visual>
			<origin xyz="0 0 0" rpy="0 0 0"/>
			<geometry>
				<cylinder length="0.02" radius="0.02"/>	
			</geometry>
			<material name="black">
				<color rgba="0.0 0.0 0.0 0.5" /> 
			</material>
		</visual>
	</link>
	
	<!-- laser joint -->
	<joint name="laser_joint" type="fixed">
		<parent link="base_link" />
		<child link="laser_link" />
		<origin xyz="0 0 0.075" />
	</joint>
 
	<link name="imu_link">
		<visual>
			<origin xyz="0 0 0.0" rpy="0 0 0"/>
			<geometry>
				<box size="0.02 0.02 0.02"/>
			</geometry>
		</visual>
	</link>
 
	<!-- imu joint -->
	<joint name="imu_joint" type="fixed">
		<parent link="base_link" />
		<child link="imu_link" />
		<origin xyz="0 0 0.02" />
	</joint>
 
	
	<link name="left_wheel_link">
		<visual>
			<origin xyz="0 0 0" rpy="1.57079 0 0"/>
			<geometry>
				<cylinder length="0.04" radius="0.032"/>
			</geometry>
			<material name="black">
				<color rgba="0.0 0.0 0.0 0.5" /> 
			</material>
		</visual>
	</link>
    
	<joint name="left_wheel_joint" type="continuous">
		<parent link="base_link" />
		<child link="left_wheel_link" />
		<origin xyz="-0.02 0.10 -0.06" />
		<axis xyz="0 1 0" />
	</joint>
 
	<link name="right_wheel_link">
		<visual>
			<origin xyz="0 0 0" rpy="1.57079 0 0"/>
			<geometry>
				<cylinder length="0.04" radius="0.032"/>
			</geometry>
			<material name="black">
				<color rgba="0.0 0.0 0.0 0.5" /> 
			</material>
		</visual>
	</link>
    
	<joint name="right_wheel_joint" type="continuous">
		<parent link="base_link" />
		<child link="right_wheel_link" />
		<origin xyz="-0.02 -0.10 -0.06" />
		<axis xyz="0 1 0" />
	</joint>
	
	<link name="caster_link">
		<visual>
			<origin xyz="0 0 0" rpy="1.57079 0 0"/>
			<geometry>
				<sphere radius="0.016"/>
			</geometry>
			<material name="black">
				<color rgba="0.0 0.0 0.0 0.5" /> 
			</material>
		</visual>
	</link>
    
	<joint name="caster_joint" type="fixed">
		<parent link="base_link" />
		<child link="caster_link" />
		<origin xyz="0.06 0.0 -0.076" />
		<axis xyz="0 1 0" />
	</joint>
 
</robot>

Reference