软件包/功能包(Packages)
在ROS中,所有的软件都被组织成包的形式,成为RO软件包/功能包。ROS 软件包是用一组用于实现特定功能的相关文件的集合,包括可执行文件和其它支持文件。(个人理解类似于windows下编程所建立的项目project)。
所有的ROS软件都是一个软件包或者其它软件包的一部分。
在ROS的每一个软件包中都有一个清单文件(package.xml),这个清单文件包含了该软件包的一些细节,主要有名称、版本、维护者和依赖关系。包含有package.xml的文件目录被称作软件包目录(ROS软件包的定义:任何能找到package.xml文件的目录就是软件包目录)。
工作区(workspace)
mkdir -p ~/wy_ros/catkin_ws/src/
上述命令中,mkdir 是Linux下用于创建文件目录的命令。
参数 -p 意味着可以创建一个连续的不存在目录,即比如上面的wy_ros 不存在的话将会自动创建一个,同理会创建catkin_ws这个目录,以及src这个目录。
在这个例子中,catkin_ws 就是我们创建的工作区。其中的子目录src就是我们用来放置源文件的目录。
上述工作完成后接着执行:
cd ~/wy_ros/catkin_ws/src
执行这条命令的作用是进入src这个目录中。 在Linux中,cd 命令标识切换到某个目录。
切换到上述src目录之后,就可以在这个目录中创建一个功能包了。命令如下:
kin_create_pkg 是ROS中创建功能包的命令,后面的‘’是命令包的名称。这个名称就随便起了,看个人爱好,就像给变量取名一样。
catkin_create_pkg beginner_turotial
上述命令执行结束之后,我们可以查看文件。看看这条命令做了哪些工作。
我们发现在执行上述命令之后,在src目录下生成了一个子目录beginner_tutorial,并且在该子目录下还生成了两个文件:
第一个叫配置文件,package.xml,就是前面提到了清单文件,主要包含了这个功能包的一些细节,比如名称、版本、维护者和依赖关系。
第二个文件,CMakeLists.txt。这个文件大家都比较熟悉了, 就是和Cmake有关的文件。这个文件中有Cmake指令,包括了应该生成哪种可执行文件,需要哪些源文件,以及在哪里可以找到所需要的头文件和链接库。这样说明了catkin编译使用了Cmake。
接着我们就可以编译这个功能包了, 虽然这个功能包里面什么正经事儿都没有做,但是它是一个完整的功能包了。在编译功能包的时候需要返回到功能包的目录下,完成上一步之后我们是在src目录下。我们应该回到src的父目录下,也就是catkin_ws目录下。为此执行:
cd ~/wy_ros/catkin-ws/
接下来我们执行编译命令:
catkin_make
然后执行了一大堆。
就出现了下面的画面:
我们高兴地看到,经过我们的编译,在功能包里面又多出了两个文件夹。它们是build和devel文件夹,目前,这两个文件夹和src是兄弟姐妹关系。
这样,一个功能包就算完成了。
最后一步是: 将工作空间加入ROS环境,干了这么多,必须让ROS知道啊。于是执行下面的一句命令:
~/wy_ros/catkin_ws/devel/setup.bash
完工!
其实还有将自己的信息添加到package.xml的步骤,如果你的软件包要发布的话,必须把你的姓名啊,邮箱啊放入。万一出了问题,人家可以找到作者嘛。