1.Catkin编译系统
我们知道,在Linux下编译器有gcc/g++,但是随着原文件数量的增加,直接使用gcc/g++的方式效率太低,于是出现了makefile来进行编译,然而随着工程文件的增加,makefile也不能满足编译的需求,于是出现了Cmake工具。Cmake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性。对于ROS这样大体量的平台来说,就采用的是CMake,并且ROS对CMake进行了扩展,于是便有了Catkin编译系统。
2.catkin工作空间
Catkin工作空间是创建、修改、编译catkin软件包的目录。说白了就是一个仓库,里面装载着ROS的各种项目工程,便于系统组织管理调用。接下来,可以通过如下命令创建并初始化catkin工作空间
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make #初始化工作空间
注意:
- catkin_make命令必须在工作空间这个路径上执行
-
原先的初始化命令catkin_init_workspace仍然保留
通过tree命令可以看到catkin工作空间的结构,它包括了 src 、 build 、 devel 三个路径
$ cd ~/catkin_ws
$ sudo apt install tree
$ tree
- src/: ROS的catkin软件包(源代码包package,我们写的程序就放在这),其中package是catkin工作空间的基本单元。
- build/: catkin(CMake) 的缓存信息和中间文件
- devel/: 生成的目标文件(包括头文件,动态链接库,静态链接库,可执行文件等) 、环境变量
3.package软件包
package软件包是ROS应用程序代码的组织单元,组成一个个的功能模块,位于我们刚刚创建的catkin工作空间的src文件下,如图所示。我们平常写的C++程序或者Python程序都在package中,最后我们调用catkin_make也是对package软件包进行编译。
- package包含的文件:
注意: CMakeLists.txt 和 package.xml 这两个文件是package中必不可少的,其余路径根据软件包是否需要来决定。
- CMakeLists.txt: 定义package的包名、依赖、源文件、目标文件等编译规则,是package不可少的成分
- package.xml: 描述package的包名、版本号、作者、依赖等信息,是package不可少的成分
- src/: 存放ROS的源代码,包括C++的源码和(.cpp)以及Python的module(.py)
- include/: 存放C++源码对应的头文件
- scripts/: 存放可执行脚本,例如shell脚本(.sh)、Python脚本(.py)
- msg/: 存放自定义格式的消息(.msg)
- srv/: 存放自定义格式的服务(.srv)
- models/: 存放机器人或仿真场景的3D模型(.sda, .stl, .dae等)
- urdf/: 存放机器人的模型描述(.urdf或.xacro)
- launch/: 存放launch文件(.launch或.xml)
- package的创建
格式:catkin_create_pkg [软件包的名字] [软件包的依赖]
例如:新建一个package叫做 test_pkg ,依赖roscpp、rospy、std_msgs(常用依赖)。
catkin_create_pkg test_pkg roscpp rospy std_msgs