Catkin是ROS定制的编译构建系统,对CMake的扩展,编写原则和CMake很像。
--》Catkin是用来编译ROS程序的
--》Catkin就是一个文件夹,用来组织和管理ROS功能包。对它的创建,修改,克隆都在这里面。
---帮助初始化catkin工作空间(catkin workspace)
- #创建工作空间
- mkdir -p ~/catkin_ws/src
- cd ./catkin_ws
- catkin_make
---编译--》一般编写好代码需要进行catkin_make,系统帮我们自动构建,生成我们的目标文件。
- cd ./catkin_ws
- catkin_make #编译
- source ~/catkin_ws/devel/setup.bash #编译完成后要source刷新环境
初学者一定要注意的地方:
1.catkin_make之前一定要回到catkin_workspace,在其他目录下进行catkin_make会失败的。
2.在catkin_make后应source一下工作空间里面的setup.bash(将刚刚编译完的workspace刷新到环境变量里面去,这样系统才会知道我们生成的ROS可执行文件放在哪里,然后才能运行)
初始化catkin工作空间后,会多出两个文件夹(build和devel),其中build里面放的是cmake&catkin缓存信息和中间文件、devel放的是生成的目标文件(头文件,动态链接库,静态链接库,可执行文件)。
src文件夹里是真正写代码的地方
Rosbuild是ROS早期采用的编译系统,目前主流的ROS项目已不采用;catkin是为了取代rosbuild。
package是catkin编译的基本单元,catkin编译的对象就是一个又一个的package。catkin编译系统在编译的时候会在src目录下递归地查找每一个package,可以将几个package放到一个文件夹下。
package
package是ROS软件的基本组织形式(ROS就是由一个个package组成的,package就是ROS的细胞)
package是catkin编译的基本单元,catkin编译的对象就是一个又一个的package。编译系统会一个个寻找package,然后生成目标文件。
多个可执行文件
一个package可以包含多个可执行文件(节点)
一个软件包如果想被catkin编译系统认定为是一个package,至少包含CMakeLists.txt,package.xml文件。
CMakeLists.txt:规定了catkin编译规则(告诉编译系统怎样编译package里面的代码,要编译哪些文件,需要哪些依赖,生成哪些可执行目标,怎样链接等);编译出现了什么问题,就与CMakeList.txt有关
package.xml:定义了package的属性(包名,版本号,作者,依赖项等)
manifest.xml:比较老的package.xml写法,是rosbuild编译系统采用的包信息清单。
有了CMakeList.txt和manifest.xml文件就构成了一个精简的package:
note:
* 实现节点的语言可以不同
代码文件:
ROS里面可执行程序有两种来源,一种是可执行脚本(Linux的shell脚本,python脚本),二种是C++文件(头文件,源文件)。
在package下:
(1)建一个scripts路径用来放可执行脚本*.py和*.sh脚本
(2)建一个include和src路径分别放C++头文和源文件
(3)src里面也可以放置Python源文件
package下还可以放一些我们自定义的通信格式,如:消息(message),服务(service),动作(action)
package里面还可以放置launch以及配置文件config:launch文件(*.launch)和配置文件(*.yaml)
如果有多个可执行文件要同时 运行,直接把他们组织到一个launch文件里就可以的。
Launch文件就是启动文件
launch作用就是可以一次性运行多个可执行文件。