机器人操作系统(ROS)教程5:ROS文件系统的操作
在操作ROS的命令行时,要注意:1.如果你安装ROS时是临时性的配置环境变量,则要在终端中运行一下:source /opt/ros/indigo/setup.bash
或者你工作空间的setup.bash(这个后面会讲到)。否则会提示找不到包或者文件。
2.要以管理员的身份执行ROS中的命令,否则很有可能会出现“Permission denied”。
3.有些ROS的命令是要在roscore这个节点运行之后才能用的。
上面是经验之谈。。。
接着来讲ROS的文件系统,文件系统是一个系统上源码和文件的组织方式。一个高效的文件系统会让系统读取文件、数据的速度更快。 而ROS中有无数的节点、消息、服务、工具和库文件,所以需要一个有效的结构去管理这些代码。就像Windows的树状层分的盘符、文件夹一样,ROS也有:包(package)、堆(stack)。
1.包(package)
ROS的软件是以包的方式组织起来的。包里面包含节点、ROS依赖库、数据套、配置文件、第三方软件、或者任何其他逻辑构成。包的目标是提供一种易于使用的结构以便于软件的重复使用。
2.堆(stack)
堆是包的集合,它提供一个完整的功能,像“navigation stack”。
通俗点理解就是:很多的细胞(文件)组成了一个器官【包(package)】,而很多功能类似的器官又组成了系统【堆(stack)】,最后很多堆(stack)组成了ROS。。。
看下图的文件组织形式就明白了。
为了进行开发的方便,ROS为文件系统提供了几个很有用的命令行的工具,专门用来对ROS的文件系统进行操作。
1.rospack
它被用来获取一个包的相关信息,这里只介绍它的find选项,用法如下:
rospack find 例如,在一个终端中输入:
rospack find roscpp 就可以找到roscpp这个包的位置信息,可能会返回类似于下面的这种结果:
/opt/ros/indigo/share/roscpp
2.roscd
它允许您利用包的名字直接切换到相应的文件目录下,当然这是对ROS文件系统而言,它的使用方法如下:
roscd ]例如,在一个终端中输入:roscd roscpp命令执行后,你会发现“#”前面的路径已经切换到了roscpp的路径下。
roscd这个命令是基于ROS的文件系统来检索包的,然后切换到相应的路径下。因此它只能打开存在于环境变量ROS_PACKAGE_PATH中的目录及其子目录,您可以使用如下命令来查看ROS_PACKAGE_PATH中的内容:
echo $ROS_PACKAGE_PATH 您可能会看到如下的结果:/opt/ros/indigo/share:/opt/ros/indigo/stacks
每一个路径使用“:”分割。
roscd log命令将会把您带到ROS存储日志文件的目录下面,当然如果您之前没有运行过任何的ROS程序的话,那么将会提示一个错误,即log文件夹不存在。
3.rosls
它能够让您直接利用包的名字,去列举包中的所有文件和文件夹,而不用使用绝对路径。它的使用和roscd是一样的,只有存在于ROS_PACKAGE_PATH中的目录及其子目录才能使用这个命令。使用方法如下:rosls ]例如,在一个终端中输入:
rosls roscpp_tutorials返回的结果如下:
cmakepackage.xmlsrv
表明roscpp_tutorials这个包下,有cmake package.xml srv这三个文件或者文件夹。
最后,ROS仍然保留了linux的tab键命令补完功能。
例如,输入:
roscd roscpp_tut<<< now push the TAB key >>>ROS将会把命令补全成:roscd roscpp_tutorials/这个功能在操作一些文件名很长的文件时会省事很多。
页:
[1]