【Rviz可视化系列】

您所在的位置:网站首页 publisher文件怎么打开 【Rviz可视化系列】

【Rviz可视化系列】

2024-07-15 13:22| 来源: 网络整理| 查看: 265

目录 一、URDF介绍 1.1 URDF的语法类型 1.2 URDF的缺陷 1.3 URDF的改进 1.3.1 SDF格式 1.3.2 XACRO格式 1.4 URDF、XACRO、SDF三种文件的转换 1.4.2 URDF生成SDF 1.4.3 XACRO生成URDF 1.4.4 XACRO生成SDF 1.4.5 SDF生成URDF 1.4.6 SDF生成XACRO 1.5 URDF配套工具 1.5.1 在RVIZ中可视化URDF模型 1.5.2 可视化URDF结构关系 1.5.3 检查URDF文件的合法性 二、URDF描述机器人 2.1 URDF的拓扑结构 2.2 link元素 2.2.1 inertial 2.2.2 visual 2.2.2.1 geometry子标签 2.2.2.2 material子标签 2.2.3 collision 2.3 joint元素 三、RVIZ可视化URDF模型 3.1 RVIZ加载URDF模型的原理 3.2 RVIZ加载URDF模型的方法 3.3 URDF模型的文件组织结构 3.4 使机器人模型运动 3.4.1 URDF的joint设置 3.4.2 joint_state_publisher 3.4.3 robot_state_pubilsher 一、URDF介绍

URDF是统一机器人描述格式(United Robotics Description Format),是一个XML语法框架下用来描述机器人的语言格式。

1.1 URDF的语法类型

URDF的标签在XML文件中总共有9种,如下图所示:

其中重要的有两个标签,分别是link和joint:

link:用来描述机器人的连杆物理性质,内部包含连杆的质量、惯量、颜色等属性; joint:用来描述机器人的关节执行机构,如旋转电机、直线电机等,内部包含关节种类、颜色等属性。

其它的标签介绍如下:

robot:URDF格式的根节点,标签内部使用name属性设置名称; sensor/proposal:一个提议的标签,还未加进去; transmission:用于描述关节与驱动器之间的关系,是PR2机器人模型独有的元素; gazebo:是URDF模型在gazebo软件中仿真时提供的接口; sensor:用于描述传感器,但是ROS的wiki上提到,该标签从未被实际使用过,已经被放弃了; model_state:用于描述模型当前状态,正在进行开发,尚未实际使用; model:用于描述模型运动学参数和动态参数,包含了link和joint两个元素。 1.2 URDF的缺陷

URDF是ROS开发团队推出的一种机器人模型描述文件,本来用作RVIZ中显示和Gazebo中仿真,在时代的发展过程中,URDF逐渐暴露了很多缺点:

模型冗长,重复内容过多 参数硬编码,修改麻烦,不便于二次开发 没有变量和参数计算的功能 URDF语法大量使用XML属性破坏了正确的格式设置,没有向后兼容的机制 只支持树状结构机器人,不支持闭环机器人,如平行关节的机器人 在仿真时,只能描述机器人模型,不能描述仿真场景的其它元素,如灯光,高度图等 URDF只能单独指定单个机器人的运动学和动力学特性,无法描述多个机器人。 URDF无法指定世界中机器人本身的姿势。 URDF不能指定摩擦和其他物理特性。

ROS团队开发URDF格式的初衷是提供能在RVIZ中显示和Gazebo中进行仿真,但由于以上缺点,URDF格式在Gazebo仿真场景中受到的限制极大。

1.3 URDF的改进

针对URDF的改进分为两条路线,分别是Gazebo开发团队推出的SDF格式、ROS开发团队推出的XACRO格式。

SDF格式解决了URDF仿真困难问题,XACRO格式则解决了URDF的代码冗余问题。

1.3.1 SDF格式

以下介绍Gazebo发展的历史背景:

Gazebo最早是在2002年,由南加州大学的Andrew Howard和他的学生NateKoenig开发的。在接下来的几年中Nate在完成他的PhD学位的同时开发着Gazebo。 在2009年,Willow公司的一个高级研究工程师JohnHsu,把ROS和PR2与Gazebo整合在一起。自此Gazebo就成为了ROS社区中的一个基本工具。 在2011年的春天,Willow Garage公司开始为Gazebo的开发提供商业支持。在2012年,开源机器人联盟(Open Source Robotics Foundation, OSRF)从Willow Garage公司脱离出来,同时接管了Gazebo项目。

Gazebo的CEO提到,使用URDF的唯一原因是它在ROS中一直被使用!

"The only reason to use URDF is because it has been historically used within ROS." -----Nate Koenig Adminidtrator of Gazebos

Gazebo研发团队于2012年从ROS研发团队脱离后,为了能够更好的对机器人进行仿真,于是舍弃了URDF格式,而是推出了SDF格式进行仿真。

1.3.2 XACRO格式

ROS开发团队则继续在URDF的基础上进行了修修补补,推出了XACRO格式。

针对URDF的缺点,XACRO借鉴了函数的思想,在精简模型代码方面提供了创建宏定义和文件包含,同时也提供了可编程接口,例如引入了常量,变量,数字计算,条件语句等功能。这些特性降低了模型的开发难度。

RVIZ中推荐使用XACRO格式可视化机器人模型,但也支持URDF和SDF格式的文件。

1.4 URDF、XACRO、SDF三种文件的转换

URDF、XACRO、SDF这三种文件相互转换的可行性见下表:

1.4.1 URDF生成XACRO

XACRO是URDF的升级版,一般都是使用XACRO生成URDF,而不是根据URDF生成XACRO。

1.4.2 URDF生成SDF

Gazebo官方提供一种命令行方法,实现URDF转SDF,在URDF所在目录下打开终端,执行如下命令:

gz sdf -p my_model.urdf > my_model.sdf

其中my_model.urdf是原URDF的名称,my_model.sdf为生成的SDF名称。

注意:如果是要在gazebo中进行机器人仿真,建议直接写SDF格式,而不是先写URDF再生成SDF,因为这样无法利用SDF中的很多特性!

1.4.3 XACRO生成URDF

ROS官方提供一种命令行方法,实现XACRO转URDF,在URDF所在目录下打开终端,执行如下命令:

rosrun xacro xacro.py mbot.xacro > mbot.urdf

其中mbot.xacro是原XACRO的名称,mbot.urdf为生成的URDF名称。

1.4.4 XACRO生成SDF

第一种:利用URDF作为中间结果进行转换,即XACRO->URDF->SDF。

第二种:利用大佬提供的工具

https://github.com/gezp/xacro4sdf https://github.com/gezp/xmacro

具体参考大佬博客:https://www.guyuehome.com/18744/feed

1.4.5 SDF生成URDF

官方没有提供SDF生成URDF的工具,但好在有大佬自己开发了可行的工具——pysdf功能包。

项目的github地址:https://github.com/andreasBihlmaier/pysdf

1.4.6 SDF生成XACRO

SDF无法生成XACRO文件!

1.5 URDF配套工具 1.5.1 在RVIZ中可视化URDF模型

ROS提供一个urdf_tutorial包,可以在RVIZ中查看URDF模型。

roslaunch urdf_tutorial display.launch model:=01-myfirst.urdf

display.launch内容如下:

它主要做了三件事:

1.把urdf文件中描述的模型导入参数服务器; 2.运行joint_state_publisher和robot_state_publisher节点,并发布sensor_msgs/JointSate话题; 3.运行一个有配置文件的Rviz。 1.5.2 可视化URDF结构关系

ROS提供了命令行工具可以让URDF图像化显示出来:

urdf_to_graphiz my_robot.urdf

该命令会根据URDF文件生成机器人模型结构的PDF文件,打开该文件即可看到图形化的URDF:

1.5.3 检查URDF文件的合法性

ROS提供了相应的工具可以检查URDF文件是否存在语法错误:

check_urdf my_robot.urdf

如果一切正常,将会有如下显示:

robot name is: test_robot ---------- Successfully Parsed XML --------------- root Link: link1 has 2 child(ren) child(1): link2 child(2): link3 child(1): link4 二、URDF描述机器人

URDF主要通过link和joint两个标签描述机器人。

下图展示了一个由link和joint组成的机器人模型。

对于上述机器人模型,其URDF文件大致如下:

... ... ... .... .... .... 2.1 URDF的拓扑结构

URDF存在着一定的拓扑结构限制,即URDF不能定义一个闭环的连杆模型,对于URDF用法就是:

一个robot模型只能有一个root link,其没有parent joint通过父子关系将两侧的link连接起来,各个link通过joint进行连接 link作为child时,只能找一个joint作为parent,不能同时有个parent

如下图所示,右侧的模型是不能使用URDF文件进行描述的

左侧的模型对应的URDF文件如下:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3