《精通ROS机器人编程(原书第2版) 》 —1.4 理解ROS的文件系统

举报
华章计算机 发表于 2020/02/10 13:09:31 2020/02/10
【摘要】 本节书摘来自华章计算机《精通ROS机器人编程(原书第2版) 》 一书中第1章,第1.4.1节,作者是[印度]郎坦·约瑟夫(Lentin Joseph)[意大利]乔纳森·卡卡切(Jonathan Cacace),张新宇 张志杰 等译 。

1.4 理解ROS的文件系统

ROS不仅是一个开发框架,它提供了各种工具和软件库,还提供了类似OS的功能(如硬件抽象、软件包管理、开发人员工具链等),因此我们可以将 ROS 视为一种超操作系统(meta-operating system)。与真正的操作系统一样, ROS 文件以特定的方式组织在硬盘上,如图1-1所示。

 image.png

图1-1 ROS文件系统级

以下是文件系统中每个模块的说明:

软件包:ROS软件包是ROS框架中最基本的单位,它们包含一个或多个ROS程序 (称为节点)、库、配置文件等。它们组合在一起作为一个单元。软件包是 ROS 软件中基本的构成项和发布项。

软件包清单:软件包清单文件位于软件包中,包含软件包基本信息、作者、许可协议、依赖项、编译标志等信息。ROS软件包内的package. xml 文件就是该包的清单文件。

超软件包:超软件包指的是一个或多个相关的软件包以松散的形式组合在一起。本质上讲,超软件包是一种虚拟软件包,不包含任何源代码,也不包含常见软件包中的各种文件。

超软件包清单:超软件包清单类似于软件包清单,区别在于它可能包含其他软件包,即那些运行时需要的依赖项,并且声明了一个export(导出)标识。

消息 (.msg):ROS消息是从一个ROS进程发送到另一个进程的一种信息。我们可以在一个软件包的 msg 文件夹中定义消息(my_package/msg/MyMessageType.msg),其中“.msg”是消息文件的扩展名。

服务(.srv):ROS服务是一种进程间的请求/应答方式。应答和请求的数据类型可以在一个软件包的srv文件夹内定义 (my_package/srv/MyServiceType.srv)。

软件包仓库:大多数ROS 软件包采用版本控制系统(Version Control System,VCS) 进行维护,如 Git、Subversion(svn)、Mercurial (hg) 等。在一个版本控制系统下的一组软件包称为软件包仓库,仓库中的软件包可以通过catkin自动发布工具bloom进行对外发布。

图1-2是一个软件包的文件和文件夹的组织示意图,后面几节将介绍如何创建这个软件包。

image.png

1.4.1 ROS软件包

ROS软件包的典型结构如图1-3所示。

 image.png

图1-3 C++ ROS软件包的典型结构

下面简单介绍每个文件夹和文件的用途:

config:ROS 软件包用到的所有配置文件都在此文件夹中。此文件夹由用户创建,一般习惯将其命名为 config,将配置文件放置其中。

include/package_name:此文件夹包含了ROS 软件包用到的头文件和库文件。

script:可执行的 Python 脚本放在此文件中。在图1-3中,我们可以看到两个示例脚本。

src:此文件夹存放C++ 源代码。

launch:此文件夹存放启动一个或多个 ROS 节点的启动文件。

msg:此文件夹包含用户定制化消息的定义。

srv:此文件夹包含各种服务的定义。

action:此文件夹包含动作文件。下一章将介绍这类文件的详细内容。

package.xml:这是软件包清单文件。

CMakeLists.txt:此文件包含编译软件包的各类指令。

为了能创建、修改、使用 ROS软件包,我们需要先了解一些常用命令。下面是一些使用ROS软件包的常用命令:

catkin_create_pkg:此命令用于创建一个新软件包。

rospack:此命令用于获取软件包相关的信息。

catkin_make:此命令用于在工作区中编译软件包。

rosdep:此命令将安装一个软件包所需的系统依赖项。

为了能使用软件包,ROS提供了一个类似bash的命令,将其命名为rosbash(http://wiki.ros.org/rosbash), 可用于浏览和操作ROS软件包。下面是若干rosbash 命令:

roscd:此命令用软件包的名称、软件包集的名称或特殊位置信息切换当前所在文件夹。如将软件包的名称作为参数传给该命令,系统将切换到那个软件包所在的文件夹。

roscp:此命令用于从软件包中复制文件。

rosed:此命令用于使用 vim 编辑器编辑一个文件。

rosrun:此命令用于在软件包内运行一个可执行文件。

图1-4显示了常见的软件包内package.xml 文件的定义。

 image.png

图1-4 软件包的package.xml 文件结构

package.xml 文件包括软件包名称、软件包版本、软件包描述、作者详细信息、编译软件包的依赖项和实时运行时的依赖项等。<build_depend></build_depend >标签包含了编译软件包源码所必需的其他软件包。<run_depend></run_depend>标签中包含的是软件包节点运行时必需的依赖项。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200