1.ROS文件系统中的基本概念
Packages: Package是ROS系统中最底层最基本的组织,里面存放各种文件:库、工具、可执行文件等.
Manifest: 一个package描述xml文件,定义package之间的依赖关系.
Stacks: package的集合,比package这个概念高一级别
Stack Manifest: 作用类似package manifest文件,但是它是针对stack的.
在文件系统中很容易识别package和stack:
package是一个包含 manifest.xml 文件的目录.
stack是一个包含 stack.xml 文件的目录.
2.文件系统工具
ROS中大量代码分散在众多的packages和stacks之中. 命令工具ls 和 cd已不能满足检索要求。因此ROS提供了一套自己的命令工具来完成与这些命令相似的工作.
(1) 使用rospack和rosstack
两个命令用于获取相应package或者stack的目录路径.
$ rospack find [package_name] $ rosstack find [stack_name]
$ rospack find roscpp 结果:/opt/ros/indigo/share/roscpp
(2) 使用roscd
【1】改变当前目录,允许你直接切换(cd)工作目录到某个package或者stack的目录.
$ roscd [locationname[/subdir]] Eg:$ roscd roscpp
为了验证我们已经切换到了roscpp package 目录. 我们使用unix的命令查看路径pwd:
$ pwd 结果:/opt/ros/indigo/share/roscpp
可以看到YOUR_INSTALL_PATH/share/roscpp和之前使用rospack find得到的路径是一样的。
命令 roscd及其它的ROS命令仅适用于环境变量$ROS_PACKAGE_PATH中存在的目录路径. 使用下面的命令查看环境变量$ROS_PACKAGE_PATH:
$ echo $ROS_PACKAGE_PATH 结果:/home/wj/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks
$ROS_PACKAGE_PATH可以添加任意目录路径,目录路径之间 ‘:‘ 分开。
【2】roscd 也能够直接进入一个 package 或 stack的子目录中.
$ roscd roscpp/cmake $ pwd 结果:/opt/ros/indigo/share/roscpp/cmake
(3)roscd log
命令切换到ROS储存日志文件的目录。注意如果从未运行过任何ROS程序,命令会返回目录不存在的错误。
(4)使用 rosls
作用是列出指定的package或stack中的文件及目录.
$ rosls [locationname[/subdir]]
$ rosls roscpp_tutorials 结果:cmake launch package.xml srv
(5)Tab 自动完成输入
当要输入一个完整的软件包名称时会变得比较繁琐。在之前的例子中roscpp tutorials是个相当长的名称,幸运的是,一些ROS工具支持TAB 自动完成输入的功能。
Eg:roscd roscpp_tut<<< 现在请按TAB键 >>>
命令行中应该会自动补充剩余部分: $ roscd roscpp_tutorials/
总结:
ROS命令工具的的命名方式:
rospack = ros + pack(age)
roscd = ros + cd
rosls = ros + ls