《精通ROS机器人编程(原书第2版) 》(ros机器人编程实战 pdf)
636
2022-05-29
1.4 理解ROS的文件系统
ROS不仅是一个开发框架,它提供了各种工具和软件库,还提供了类似OS的功能(如硬件抽象、软件包管理、开发人员工具链等),因此我们可以将 ROS 视为一种超操作系统(meta-operating system)。与真正的操作系统一样, ROS 文件以特定的方式组织在硬盘上,如图1-1所示。
图1-1 ROS文件系统级
以下是文件系统中每个模块的说明:
软件包:ROS软件包是ROS框架中最基本的单位,它们包含一个或多个ROS程序 (称为节点)、库、配置文件等。它们组合在一起作为一个单元。软件包是 ROS 软件中基本的构成项和发布项。
超软件包:超软件包指的是一个或多个相关的软件包以松散的形式组合在一起。本质上讲,超软件包是一种虚拟软件包,不包含任何源代码,也不包含常见软件包中的各种文件。
超软件包清单:超软件包清单类似于软件包清单,区别在于它可能包含其他软件包,即那些运行时需要的依赖项,并且声明了一个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是一个软件包的文件和文件夹的组织示意图,后面几节将介绍如何创建这个软件包。
1.4.1 ROS软件包
ROS软件包的典型结构如图1-3所示。
图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 文件的定义。
图1-4 软件包的package.xml 文件结构
软件开发
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。