统一机器人描述格式——URDF

URDF(Unified Robot Description Format,统一机器人描述格式)是ROS中一个非常重要的机器人模型描述格式,ROS同时也提供URDF文件的C++解析器,可以解析URDF文件中使用XML格式描述的机器人模型。

在使用URDF文件构建机器人模型之前,有必要先梳理一下URDF文件中常用的XML标签,对URDF有一个大概的了解。

clike 复制代码
<link>标签

<link> 标签用于描述机器人某个刚体部分的外观和物理属性,包括尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等。

机器人的link结构一般如图6-1所示,其基本的URDF描述语法如下:

clike 复制代码
<link name="<link name>">
	<inertial> . . . . . . </inertial>
	<visual> . . . . . . </visual>
	<collision> . . . . . . </collision>
</link>

标签用于描述机器人link部分的外观参数,标签用于描述link的惯性参

数,而标签用于描述link的碰撞属性。从下图可以看到,检测碰撞的link区域大于外

观可视的区域,这就意味着只要有其他物体与collision区域相交,就认为link发生碰撞。

标签用于描述机器人关节的运动学和动力学属性,包括关节运动的位置和速度限制。根据机器人的关节运动形式,可以将其分为六种类型

URDF模型中的joint类型

与人的关节一样,机器人关节的主要作用是连接两个刚体link,这两个link分别称为parent link和child link,如图

标签的描述语法如下:

clike 复制代码
<joint name="<name of the joint>">
	<parent link="parent_link"/>
	<child link="child_link"/>
	<calibration .... />
	<dynamics damping ..../>
	<limit effort .... />
	....
</joint>

其中必须指定joint的parent link和child link,还可以设置关节的其他属性。

calibration>:关节的参考位置,用来校准关节的绝对位置。

dynamics>:用于描述关节的物理属性,例如阻尼值、物理静摩擦力等,经常在动力学仿真中用到。

limit>:用于描述运动的一些极限值,包括关节运动的上下限位置、速度限制、力矩限制等。

mimic>:用于描述该关节与已有关节的关系。

safety_controller>:用于描述安全控制器参数。

robot>标签

是完整机器人模型的最顶层标签,和标签都必须包含在标签 内。

如下图所示,一个完整的机器人模型由一系列和组成。

clike 复制代码
<robot name="<name of the robot>">
	<link> ....... </link>
	<link> ....... </link>
	<joint> ....... </joint>
	<joint> ....... </joint>
</robot>

标签

标签用于描述机器人模型在Gazebo中仿真所需要的参数,包括机器人材料的属性、Gazebo插件等。该标签不是机器人模型必需的部分,只有在Gazebo仿真时才需加入。

该标签的基本语法如下:

clike 复制代码
<gazebo reference="link_1">
<material>Gazebo/Black</material>
</gazebo>

创建机器人URDF模型

在ROS中,机器人的模型一般放在RobotName_description功能包下。下面尝试仿照MRobot 机器人从零开始创建一个移动机器人的URDF模型

创建机器人描述功能包

可以使用如下命令创建一个新的功能包:

clike 复制代码
catkin_create_pkg mrobot_description urdf xacro

mrobot_description功能包中包含urdf、meshes、launch和config四个文件夹

  • urdf:用于存放机器人模型的URDF或xacro文件。
  • meshes:用于放置URDF中引用的模型渲染文件。
  • launch:用于保存相关启动文件。
  • config:用于保存rviz的配置文件

创建URDF模型

在之前的学习中,我们已经大致了解了URDF模型中常用的标签和语法,接下来使用这些基本语法创建一个如图所示的机器人底盘模型。

这个机器人底盘模型有7个link和6个joint。

7个link包括1个机器人底板、2个电机、2个驱动轮和2个万向轮;

6个joint负责将驱动轮、万向轮、电机安装到底板上,并设置相应的连接方式。

先来看一下该模型文件mrobot_description/urdf/mrobot_chassis.urdf的具体内容:

clike 复制代码
<?xml version="1.0" ?>
<robot name="mrobot_chassis">
<link name="base_link">
	<visual>
	<origin xyz=" 0 0 0" 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>
<joint name="base_left_motor_joint" type="fixed">
	<origin xyz="-0.055 0.075 0" rpy="0 0 0" />
	<parent link="base_link"/>
	<child link="left_motor" />
 </joint>
<link name="left_motor">
	<visual>
	<origin xyz="0 0 0" rpy="1.5707 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>
<joint name="left_wheel_joint" type="continuous">
<origin xyz="0 0.0485 0" rpy="0 0 0"/>
<parent link="left_motor"/>
<child link="left_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="left_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.033" length = "0.017"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="base_right_motor_joint" type="fixed">
<origin xyz="-0.055 -0.075 0" rpy="0 0 0" />
<parent link="base_link"/>
<child link="right_motor" />
</joint>
<link name="right_motor">
<visual>
<origin xyz="0 0 0" rpy="1.5707 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>
<joint name="right_wheel_joint" type="continuous">
<origin xyz="0 -0.0485 0" rpy="0 0 0"/>
<parent link="right_motor"/>
<child link="right_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="right_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.033" length = "0.017"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="front_castor_joint" type="fixed">
<origin xyz="0.1135 0 -0.0165" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="front_castor_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="front_castor_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry>
 <sphere radius="0.0165" />
</geometry>
<material name="black">
<color rgba="0 0 0 0.95"/>
</material>
</visual>
</link>
</robot>

URDF提供了一些命令行工具,可以帮助我们检查、梳理模型文件,需要在终端中独立安装:

clike 复制代码
sudo apt-get install liburdfdom-tools

然后使用check_urdf命令对mrobot_chassis.urdf文件进行检查:

clike 复制代码
check_urdf mrobot_chassis.urdf

check_urdf命令会解析URDF文件,并且显示解析过程中发现的错误。如果一切正常,在终端中会输出如图所示的信息。

还可以使用urdf_to_graphiz命令查看URDF模型的整体结构:

clike 复制代码
urdf_to_graphiz mrobot_chassis.urdf

执行urdf_to_graphiz命令后,会在当前目录下生成一个pdf文件,打开该文件,可以看到模型的整体结构图

相关推荐
泰迪智能科技011 小时前
高校深度学习视觉应用平台产品介绍
人工智能·深度学习
盛派网络小助手2 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
Eric.Lee20212 小时前
Paddle OCR 中英文检测识别 - python 实现
人工智能·opencv·计算机视觉·ocr检测
cd_farsight2 小时前
nlp初学者怎么入门?需要学习哪些?
人工智能·自然语言处理
AI明说2 小时前
评估大语言模型在药物基因组学问答任务中的表现:PGxQA
人工智能·语言模型·自然语言处理·数智药师·数智药学
Focus_Liu2 小时前
NLP-UIE(Universal Information Extraction)
人工智能·自然语言处理
PowerBI学谦2 小时前
使用copilot轻松将电子邮件转为高效会议
人工智能·copilot
audyxiao0013 小时前
AI一周重要会议和活动概览
人工智能·计算机视觉·数据挖掘·多模态
Jeremy_lf3 小时前
【生成模型之三】ControlNet & Latent Diffusion Models论文详解
人工智能·深度学习·stable diffusion·aigc·扩散模型