获取机器人URDF模型文件的途径通常有  
  • 自己写
  • 机器人制造商提供其机器人的URDF模型
  • 通过机械设计软件导出URDF文件
  本节我们学习怎么自己写一个简单的URDF模型,但这并不是鼓励大家自己写 urdf 文件,是为了让大家理解 urdf 好能够自行修改。我个人的建议是尽量在cad软件导出来的 urdf 里面做修改,这样可能会简单容易些。   1. URDF模型代码   这里我们学习怎么用URDF建立一个简单的,由两根连杆组成的单摆模型。新建一个文件输入以下代码,并保存为 double_pendulum.urdf.  
<robot name = "linkage">
	<!-- links section -->>
	<link name = "link A">
		<inertial>
			<origin xyz = "0 0 0" />
			<mass value = "0.5" />
			<inertia ixx = "0.5" iyy = "0.5" izz = "0.5" ixy = "0" ixz = "0" iyz = "0" />
		</inertial>
		<visual>
			<origin xyz = "0 0 0" />
			<geometry>
				<box size = "0.5 0.5 0.1" />
			</geometry>
			<material name = "gray A">
				<color rgba = "0.1 0.1 0.1 1" />
			</material>
		</visual>
	</link>
	<link name = "link B">
		<inertial>
			<origin xyz = "0 0 -0.5" />
			<mass value = "0.5" />
			<inertia ixx = "0.5" iyy = "0.5" izz = "0.5" ixy = "0" ixz = "0" iyz = "0" />
		</inertial>
		<visual>
			<origin xyz = "0 0 -0.5" />
			<geometry>
				<cylinder radius = "0.05" length = "1"  />
			</geometry>
			<material name = "gray B">
				<color rgba = "0.3 0.3 0.3 1" />
			</material>
		</visual>
	</link>
	<link name = "link C">
		<inertial>
			<origin xyz = "0 0 -0.5" />
			<mass value = "0.5" />
			<inertia ixx = "0.5" iyy = "0.5" izz = "0.5" ixy = "0" ixz = "0" iyz = "0" />
		</inertial>
		<visual>
			<origin xyz = "0 0 -0.5" />
			<geometry>
				<cylinder radius = "0.05" length = "1"  />
			</geometry>
			<material name = "gray C">
				<color rgba = "0.5 0.5 0.5 1" />
			</material>
		</visual>
	</link>

	<!-- joints section -->>
	<joint name = "joint A" type = "continuous">
		<parent link = "link A" />
		<child link = "link B" />
		<origin xyz = "0 0 -0.05" />
		<axis xyz = "0 1 0" />
	</joint>
	<joint name = "joint B" type = "continuous">
		<parent link = "link B" />
		<child link = "link C" />
		<origin xyz = "0 0 -1" />
		<axis xyz = "0 1 0" />
		<dynamics damping ="0.002" />
	</joint>
</robot>
  2. 代码解读   上面的代码建立了一个名叫“linkage”的机械模型,该模型包括了三个连杆,分别为link A,link B,link C。parent 和 child 主从关系展示了连杆之间的连接方式,Link A 跟link B通过关节 joint 1连在一起,link B 为child link;Link B和link C通过关节joint 2 连在一起,link C为child link。Link A没有parent link,因此为root link,也就是所谓的根连杆。   Link A 中的 inertial 部分定义了link A的重量,惯量矩和惯量积。注意:urdf单位遵循 SI 单位标准。Link A 的 visual 部分定义了连杆的几何形状和颜色。该连杆的形状是一个宽和长度都为0.5m,高为0.1m的方形。 inertial,visual 里的 origin 部分定义了从参考坐标系到惯性参考坐标系和视觉参考坐标系的变换。类似的定义在link B和link C里面也能看到。   joint 里面的类型属性定义了关节类型为continuous,一种没有转动上下限的转动关节。 origin 定义了转动轴相对于参考坐标系的位置,比如link A里的 origin 部分定义了转轴相对于参考坐标系-z方向有着0.05m的位移。并且该关节是以[0,1,0]也就是+y轴为转轴进行旋转的。   下图展示了该模型的所有模块——连杆和关节以及他们包含的各种坐标系,R代表连杆的参考坐标系,I代表连杆的惯性参考坐标系,V代表连杆的视觉坐标系,J代表关节参考坐标系,默认J与child link的参考坐标系相对静止   微信图片_20210120160248