ROS笔记(中科大视频)

2020-07-18  本文已影响0人  SEU小翔哥

Catkin编译系统

对于源代码包,我们只有编译才能在系统上运行。而Linux下的编译器有gcc、g++,随着源文件的增加,直接用gcc/g++命令的方式显得效率低下,人们开始用Makefile来进行编译。然而随着工程体量的增大,Makefile也不能满足需求,于是便出现了Cmake工具。CMake是对make工具的生成器,是更高层的工具,它简化了编译构建过程,能够管理大型项目,具有良好的扩展性。对于ROS这样大体量的平台来说,就采用的是CMake,并且ROS对CMake进行了扩展,于是便有了Catkin编译系统。


流程

早期的ROS编译系统是rosbuild,但随着ROS的不断发展,rosbuild逐渐暴露出许多缺点,不能很好满足系统需要。在Groovy版本面世后,Catkin作为rosbuild的替代品被正式投入使用。Catkin操作更加简化且工作效率更高,可移植性更好,而且支持交叉编译和更加合理的功能包分配。目前的ROS同时支持着rosbuild和Catkin两种编译系统,但ROS的核心软件包也已经全部转换为Catkin。rosbuild已经被逐步淘汰,所以建议初学者直接上手Catkin。

Catkin的特点

Catkin是基于CMake的编译构建系统,具有以下特点:
1、Catkin沿用了包管理的传统像 find_package()基础结构,pkg-config
扩展了CMake,例如
(1)软件包编译后无需安装就可使用
(2)自动生成find_package()代码,pkg-config文件
(3)解决了多个软件包构建顺序问题
2、一个Catkin的软件包(package)必须要包括两个文件:
package.xml: 包括了package的描述信息
(1)name, description, version, maintainer(s), license
(2)opt. authors, url's, dependencies, plugins, etc...
3、CMakeLists.txt: 构建package所需的CMake文件
(1)调用Catkin的函数/宏
(2)解析package.xml
(3)找到其他依赖的catkin软件包
(4)将本软件包添加到环境变量

Catkin工作流程

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

使用catkin_make进行编译

要用catkin编译一个工程或软件包,只需要用catkin_make指令。一般当我们写完代码,执行一次catkin_make进行编译,调用系统自动完成编译和链接过程,构建生成目标文件。编译的一般性流程如下,在1.5节我们编译ROS-Academy-for-Beginners教学包就是这样的流程。
$ cd ~/catkin_ws #回到工作空间,catkin_make必须在工作空间下执行
$ catkin_make #开始编译
$ source ~/catkin_ws/devel/setup.bash #刷新坏境

上一篇下一篇

猜你喜欢

热点阅读