ROS文件系统概念
-
Packages(功能包): Packages是ROS软件的元级组织形式. 每一个功能包都包括libraries(库), executables(可执行文件), scripts(脚本)或其他文件
-
Manifest (package.xml): manifest是Packages的描述文件. 它的作用是定义Packages包之间的关系和获取指定Packages的的信息,如版本、维护者、注册信息等等。。。
通常我们在ROS中的代码都会分布在ROS系统的各部分.若要组织好这些代码单靠ls、cd这样的命令行工具是很难的,所以我们提供了一套ROS下的命令行工具,以此来方便我们的使用
rospack的使用
rospack 让我们可以察看Package的信息。在这篇教程中,我们只展示find选项的功能,它的作用是返回Packege的路径。
用法:
# rospack find [package_name]
例:
$ rospack find roscpp
返回:
如果你使用的是ubuntu下apt的方法安装的ROS,你得到的返回就是如下内容:
roscd的使用
roscd是rosbash集合中的一部分。它的作用是可以使我们跳至package或者是stack(功能包集)的目录下,这有点像ubuntu下的cd命令。
用法:
# roscd [locationname[/subdir]]
运行这个例子:
$ roscd roscpp
为了确认我们已经切换到roscpp功能包的目录下,我们可以在Unix系统下的pwd命令,来现实我们当前的工作目录:
$ pwd
你将会看到:
你可以看到YOUR_INSTALL_PATH/share/roscpp和上文例子中执行rospack find命令后的路径是一样的,即/opt/ros/hydro/share/roscpp
可以注意到,roscd和其他ROS命令一样,只能找到在ROS_PACKAGE_PATH(工作路径)下目录中存在的功能包。那么想要知道你的ROS_PACKAGE_PATH路径是在哪,你可以输入:
$ echo $ROS_PACKAGE_PATH
你的ROS_PACKAGE_PATH将会是一系列包含功能包的目录,它们之间会用冒号隔开,一个典型的ROS_PACKAGE_PATH应该是下面这样的(典型就是指ubuntu下apt方式安装的ROS系统)
和其他Similarly to other 环境路径一样,你可以添加自定义的路径到你的ROS_PACKAGE_PATH,但要注意每个路径都要用冒号分隔开
roscd还可以直接跳转到一个一个功能包或者功能包集的子目录下。
输入:
$ roscd roscpp/cmake
$ pwd
你就可以看到:
roscd log
roscd log 可以让我们跳转到ROS存储日志文件的文件夹下。注意如果之前没运行过任何ROS的程序,这里会产生一个提示说“it does not yet exist”(没有任何东西存在,即日志还未建立)
如果你之前已经有运行过ROS程序了,那么输入:
$ roscd log
(按提示来做,如果提示没有运行ros,就输入:
$ roscore
$ roscd log
rosls的用法
rosls 是rosbash集合中的一部分。它可以显示某一目录下所有文件或文件夹的名称,而不用像ls那样去到那个目录。
具体用法:
# rosls [locationname[/subdir]]
例:
$ rosls roscpp_tutorials
返回:
Tab键自动完成
一口气打完整个功能包的文件名无疑很费时。在上面的rosls例子中roscpp_tutorials这个名字就很长,所以ROS里也提供了UNIX系统下常用的TAB自动完成文件名输入的功能:
输入:
# roscd roscpp_tut<<< 在输入最后一个t之后按TAB键 >>>
我们可以看到显示:
$ roscd roscpp_tutorials/
试着输入:
# roscd tur<<< 在输入r后按TAB键 >>>
显示:
$ roscd turtle
然而,有时候会有几个包的名称开始都是turtle,那么我们就继续输入名称,直到能用TAB补充完整为止。
在终端输入:
$ roscd turtle
再打一个s,之后按TAB:
# roscd turtles<<< 按TAB >>>
现在这里就只有一个turtles开头的文件了:
$ roscd turtlesim/
复习
你可能已经注意到了,ROS命令的格式其实是有规律的:
- rospack = ros + pack(age)
- roscd = ros + cd
- rosls = ros + ls
这种命名方式同样适用于其他ROS命令工具。