ROS:文件结构与解释

每次提到功能包时,指的是一种特定的文件结构和文件夹组合。这种结构如下所示:

1)bin/ 这是我们编译和链接程序后,用于存储可执行文件的文件夹。

2)include/package_name/ 这个目录包含了我们所需要的库的头文件。

3)msg/ 如果我们需要开发非标准信息,需要把文件放在这里。

4)scripts/ 其中包括Bash,Python或任何其他脚本的可执行脚本文件。

5)src/ 这是存储程序源文件的地方。

6)srv/ 这是存储服务类型的文件。

7)CMakeLists.txt 这是CMake的生成文件

8)manifest.xml 这是功能包清单文件。

为了创建,修改或使用功能包,ROS给我们提供了一些工具:

1)rospack 使用此命令来获取信息或在系统中查找功能包,如rospack find XXX

2)roscreate-pkg 使用该命令来创建一个新的功能包

3)rosmake 使用此命令来编译功能包

4)rosdep 使用此命令来安装功能包的系统依赖项

5)rxdeps 使用此命令来查看功能包的依赖关系

如果想要在文件夹和功能包之间移动文件,ROS提供非常有用的rosbash功能包,其中包含了一些类似于LINUX中的命令

1)roscd 此命令用来更改目录

2)rosed 此命令用来编辑文件

3)roscp 此命令用于从一些功能包复制文件

4)rosd 此命令列出功能包的目录

5)rosls 此命令列出功能包下的文件。


创建自己的ROS目录

就直接创建了一个名为catkin_ws的工作空间,当然也可以为其他的名字。这个是无所谓的。
使用cd命令:
mkdir -p /catkin_ws/src
cd ~/catkin_ws/src

进入到catkin_ws/src目录下,可以看到catkin_ws和src目录下都是空的。
注:“~”是用户目录的意思,就是只执行cd命令时,linux会进入的那个目录。
这时,执行:
cd ~/catkin_ws/
进入工作空间的目录。
再执行:
catkin_make
构建(build)这个工作空间。这时就会发现,在catkin_ws这个工作空间下,多出了两个文件夹“build”和“devel”。在devel文件夹下,还可以看到很多setup.*sh文件。输入如下命令就可以配置工作空间:
source devel/setup.bash
上面的命令是在catkin_ws目录下执行的,意思是把catkin_ws目录下,devel文件夹里的setup.bash文件挂载到ROS的文件系统里去,这样当用户执行一些文件系统的命令时,就不会提示找不到该工作空间里的包或者文件了。
创建一个ROS的包
一个包主要由以下几部分组成:(1)必须包括一个package.xml文件,(2)必须包括一个CMakeLists.txt文件,(3)在每一个文件夹下只能有一个包,且包不允许嵌套。包就是存在于工作空间下,由很多代码文件组成的具有一定功能的集合(找不到合适的词了,联想到了很多乱七八糟的东西被打成一包。。)。一个最简单的包类似于如下的形式:
my_package/
CMakeLists.txt
package.xml

接着你可以在包的文件夹下创建装各种源文件的文件夹。如:
这里写图片描述

接着来介绍如何在工作空间中创建一个包。
首先输入:
cd ~/catkin_ws/src

进入我们之前创建的空的工作空间。
接着输入
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

可以创建一个名字为beginner_tutorials的包,它直接依赖于后面的三个包:std_msgs,rospy以及roscpp。
进入beginner_tutorials的文件夹可以看到package.xml和CMakeLists.txt。
使用catkin_create_pkg命令的时候,要求你给出包的名字,及选择性的给出所创建的包依赖于哪一个包。它的使用方法如下:
catkin_create_pkg [depend1] [depend2] [depend3]

这样,我们的一个包就创建好了,我们可能会需要对包之间的依赖性做一下解释。我们可以使用rospack命令来查看包之间的依赖关系,输入:
rospack depends1 beginner_tutorials

会看到返回:
roscpp
rospy
std_msgs

可以看到,返回的结果正是我们使用catkin_create_pkg时,所使用的参数。我们还可以直接在beginner_tutorials包下的package.xml中查看包的依赖关系。使用命令:
roscd beginner_tutorials

cat package.xml
每个包里的package.xml文件记录了本包与其他包的依赖关系。
在通常情况下,一个包所依赖的包又会依赖许多其它的包,这称为间接依赖。我们使用如下命令来查看rospy依赖的包:
rospack depends1 rospy
回的结果如下:
genpy
rosgraph
rosgraph_msgs
roslib
std_msgs

一个包可以有很多的间接依赖关系,我们可以使用命令:
rospack depends beginner_tutorials

来进行查看。返回beginner_tutorials包所有的间接依赖关系。结果如下:
cpp_common
rostime
roscpp_traits
roscpp_serialization
genmsg
genpy
message_runtime
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
catkin
rospack
roslib
rospy

猜你喜欢

转载自blog.csdn.net/qq_25241325/article/details/80708874