0 引言
我们在windows下使用集成IDE创建工程的时候,是不需要自己手写cmake/makefile去管理工程的,但是在linux下新建c/cpp项目的时候,在创建文件夹的时候,就需要想好文件的层级结构,以及手动编写cmake/makefile管理工程。
在linux下怎么创建ros项目呢?
我个人理解,ros相当于一个集成的IDE,我们用对应的指令去创建项目的时候,系统会自动生成管理项目的cmake文件。
1 ROS文件系统
在介绍怎么创建ros项目之前,先要理解ROS文件系统的相关概念。
ROS文件系统级指的是在硬盘上ROS源代码的组织形式,其结构大致可以如下图所示:
WorkSpace --- 自定义的工作空间 |--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。 |--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。 |--- src: 源码 |-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成 |-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件 |-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml) |-- scripts 存储python文件 |-- src 存储C++源文件 |-- include 头文件 |-- msg 消息通信格式文件 |-- srv 服务通信格式文件 |-- action 动作格式文件 |-- launch 可一次性运行多个节点 |-- config 配置信息 |-- CMakeLists.txt: 编译的基本配置
2 ROS工作空间创建
2.1 创建工作空间
1> 创建工作空间
mkdir -p ros_ws/src cd ros_ws/src catkin_init_workspace //初始化工作空间
2> 编译工作空间
cd ros_ws catkin_make
3> 设置环境变量
source devel/setup.bash
我们只是在当前目录创建了ros_ws/src目录,编译完之后,会发现目录变成了这样
2.2 创建功能包
1> 进入刚才创建工作空间的src目录
cd ~/work/2.study/ros_ws/src catkin_create_pkg com_topic std_msgs roscpp
2> 编译功能包
cd ~/work/2.study/ros_ws catkin_make source devel/setup.bash
NOTE: 同一工作空间下,不允许存在同名功能包
不同工作空间下,允许存在同名功能包
2.3 src目录下CMakeLists.txt和package.xml文件
1> CMakeLists.txt
文件CMakeLists.txt是CMake构建系统的输入,用于构建软件包。任何兼容CMake的软件包都包含一个或多个CMakeLists.txt文件,这些文件描述了如何构建代码以及将代码安装到何处。
2> package.xml
该文件定义有关软件包的属性,例如软件包名称,版本号,作者,维护者以及对其他catkin软件包的依赖性。请注意,该概念类似于旧版 rosbuild 构建系统中使用的manifest.xml文件。
在项目中添加了依赖库,或者新加了文件,都需要修改这两个文件才能生效