ROS学习:ROS文件系统--Catkin

一、Catkin编译系统

对于源代码包,我们只有编译才能在系统上运行。而Linux下的编译器有gcc、g++,随着源文件的增加,直接用gcc/g++命令的方式显得效率低下,人们开始用Makefile来进行编译。然而随着工程体量的增大,Makefile也不能满足需求,于是便出现了Cmake工具。CMake是对 make工具的生成器,是更高层的工具,它简化了编译构建过程,能够管理大型项目,具有良好的扩展性。对于ROS这样大体量的平台来说,就采用的是CMake,并且ROSCMake进行了扩展,于是便有了Catkin编译系统。
在这里插入图片描述
Catkin操作比早期的ROS编译系统rosbuild更加简化且工作效率更高,可移植性更好,而且支持交叉编译和更加合理的功能包分配。目前的ROS同时支持着rosbuild和Catkin两种编译系统,但ROS的核心软件包也已经全部转换为Catkin

Catkin特点

catkin编译的工作流程如下:

  1. 首先在工作空间catkin_ws/src/下递归的查找其中每一个ROSpackage
  2. package中会有package.xmlCMakeLists.txt 文件,Catkin(CMake)编译系统依 据CMakeLists.txt文件,从而生成makefiles(放在 *catkin_ws/build/ *)。
  3. 然后make刚刚生成的makefiles等文件,编译链接生成可执行文件(放在catkin_ws/devel)。

也就是说,Catkin就是将cmakemake指令做了一个封装从而完成整个编译过程的工具。 catkin有比较突出的优点,主要是:

  • 操作更加简单
  • 一次配置,多次使用
  • 跨依赖项目编译
使用 catkin_make 进行编译

要用catkin编译一个工程或软件包,只需要用catkin_make指令。一般当我们写完代码,执行 一次catkin_make进行编译,调用系统自动完成编译和链接过程,构建生成目标文件。编译的 一般性流程如下:

$ cd ~/catkin_ws     	 #回到工作空间,catkin_make必须在工作空间下执行 
$ catkin_make			#开始编译 
$ source  ~/catkin_ws/devel/setup.bash	   #刷新坏境

注意:catkin编译之前需要回到工作空间目录catkin_make在其他路径下编译不会成功。编译完成后,如果有新的目标文件产生(原来没有),那么一般紧跟着要source刷新环境,使得系统能够找到刚才编译生成的ROS可执行文件。这个细节比较容易遗漏,致使后面出现可执行文件无法打开等错误。
catkin_make 命令也有一些可选参数,可以通过命令查询:

$ catkin_make --help

二、catkin工作空间

Catkin工作空间是创建、修改、编译catkin软件包的目录。catkin的工作空间,直观的形容就是一个仓库,里面装载着ROS的各种项目工程,便于系统组织管理调用。在可视化图形界面里是一个文件夹。我们自己写的ROS代码通常就放在工作空间中。

初始化catkin工作空间

首先我们要在计算机上创建一个 初始的 catkin_ws/ 路径,这也是 catkin 工作空间结构的最高层级。输入下列指令,完成初始创建。

$ mkdir -p ~/catkin_ws/src   
$ cd ~/catkin_ws/ 
$ catkin_make	#初始化工作空间

第一行代码直接创建了第二层级的文件夹src,这也是我们放ROS软件包的地方。
第二行代码使得进程进入工作空间,然后再是catkin_make

注意:

  1. catkin_make命令必须在工作空间这个路径上执行
  2. 原先的初始化命令 catkin_init_workspace 仍然保留
结构介绍

catkin的结构十分清晰,具体的catkin工作空间结构图如下。初看起来catkin工作空间看起来极其复杂,其实不然,catkin工作空间的结构其实非常清晰。
在工作空间下用tree命令,显示文件结构。

$ cd ~/catkin_ws 
$ sudo apt install tree 
$ tree

通过tree命令可以看到catkin工作空间的结构,它包括了 srcbuilddevel 三个路径,在有些编译选项下也可能包括其他。但这三个文件夹是catkin编译系统默认的。它们的具体作用 如下:

  • src/: ROS的catkin软件包(源代码包)。
  • build/: catkin(CMake)的缓存信息和中间文件 。
  • devel/: 生成的目标文件(包括头文件,动态链接库,静态链接库,可执行文件等)、环境变量。

在编译过程中,它们的工作流程如图:
在这里插入图片描述
后两个路径由catkin系统自动生成、管理,我们日常的开发一般不会去涉及,而主要用到的是 src文件夹,我们写的ROS程序、网上下载的ROS源代码包都存放在这里。

在编译时,catkin编译系统会递归的查找和编译 src/ 下的每一个源代码包。因此你也可以把 几个源代码包放到同一个文件夹下,如下图所示:
在这里插入图片描述
catkin工作空间基本就是以上的结构,packagecatkin工作空间的基本单元,我们在ROS开发时,写好代码,然后catkin_make,系统就会完成所有编译构建的工作。

=================================================================
本文作为笔记查阅之用,无涉其他用途。

发布了25 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43667745/article/details/89977359