本章的主要内容是对ROS的工作空间和编译系统的阐述。
ROS Wiki: http://wiki.ros.org/ROS
ROS自学笔记4--工作空间与编译系统: https://blog.csdn.net/qq_1648...
下图是ROS的一个工程结构,反映的是文件系统之间的关系。一个典型的ROS工程就是这个样子。
下面来具体介绍一下这个图的结构。
catkin是ROS定制的编译构建系统对CMake的扩展。简单来说catkin就是用来编译ROS工程的。我们所有的代码都放到catkin workspace这个文件夹里的,这个文件夹的名字可以自己起。
首先先建立一个工作空间:
mkdir -p ~/catkin_new/src
编译:
cd ~/catkin_new/ catkin_make source ~ catkin_new/devel/setup.zsh
需要注意的是一定要在相应工作空间下编译,然后编译完后source一下环境,如果没有这一步,就会导致我们生成的文件打不开。
在编译完成之后,会生成两个文件夹:build和devel。build是cmake和catkin缓存和中间文件,devel是目标文件。 只有src是我们需要写代码的文件。
我们日常写程序主要和src打交道。
src里面放的是各种各样的功能包package。package是catkin编译的基本单元。
package是ROS组成的基本细胞,是catkin编译的基本单元,我们在执行catkin_make指令时,编译系统会一个个的找package可执行包。所以多个pachage包放到同一个文件夹下也是可以的。catkin_make会递归的查找编译每个文件。
一个package并不一定包含一个可执行文件,一个package还可以包含多个可执行文件(节点),package架构最基本的结构:必须包含CMkelists.txt和package.xml。
CMakeList.txt规定了catkin编译的规则,例如:源文件、依赖项、目标文件。
package.xml定义了package的属性,例如:包名,版本号,作者,依赖等。相当于包的自我描述。
<package> <!--根标签--> <name> <!--包名--> <version> <!--版本号--> <description> <!--包描述--> <maintainer> <!--维护者--> <license> <!--软件许可--> <buildtool_depend> <!--编译工具--> <build_depend> <!--编译时的依赖--> <run_depend> <!--运行时的依赖--> </package> <!--根标签-->
有了上面这两个文件的package就是最基本的package。
ROS里面的可执行程序包括:(1)脚本,如shell或者python;(2)C++头文件或者源文件。 通常会在像下图一样。
我们还会放一些自定义的通信格式:包括消息(msg)、服务(srv)、动作(action)。 比如我们想在ROS下面自定义一个服务,那我们就在package下新建一个srv文件夹,然后在这个文件夹里放*.srv文件。我们还可以在package下放launch文件和配置文件。
launch的作用就是用来一次性运行多个文件。一帮放在launch文件中。配置文件一般放到config文件夹下。它的自由度比较高,一般用.yaml格式来写。