ROS(四)——创建工作空间与功能包 & Catkin编译系统
catkin编译系统
ROS 的 Catkin 编译系统的一个特点是将程序做成 package (称为 catkin package 或者 ROS package) 的形式,可以理解成模块化。 典型的 ROS workspace 中包含 src, build, devel 三个文件夹,在分享时只需要分享 src 中的某个 package 即可,所有的编译信息都在此 package 中。
工作空间 workspace
工作空间是一个存放工程开发相关文件的文件夹。就像用IDE创建工程的工程目录一样
有4个主要文件夹
- src:代码空间(Source Space)
- build:编译空间(Build Space)
- devel:开发空间(Development Space)
- install:安装空间(Install Space)
catkin编译系统下的的工作空间结构
创建工作空间
mkdir catkin_ws cd catkin_ws mkdir src
catkin_ws这个名字是自己定义的
catkin_init_workspace
注意与上图对比,未进行初始化和初始化之后,初始化之后目录中多了CMakeLists.txt
有这样一个文件也就说明我们当前的路径是一个ROS的工作空间了
编译工作空间
编译不在src下,要回到catkin_ws下
catkin_make
通过这个指令可以编译src下面所有功能包的源码,结果会放到devel和install中
这是执行编译前
执行编译后
可以看到多了devel和build目录
但是并没有产生install这个空间
catkin_make install
就产生install目录了
可以看到此时build、devel、install目录中都有不少文件了
install是安装空间,最终编译生成的可执行文件都会放在这
devel是开发空间,放置开发过程中的可执行文件和库
build是开发过程中的一些中间文件,二进制文件,我们基本上是用不到的
下面我们就能在这样的工作空间中开发代码了
创建功能包
在创建代码的时候一定要创建一个功能包。功能包放置在src目录下
功能包是放置ROS源码的最小单元
所有源码必须全部放在功能包里面,不能直接放在src下面去编译,这是不允许的
同一个工作空间下,不允许存在同名功能包。不同工作空间下,允许存在同名功能包
catkin_create_pkg 包名 依赖
std_msgs是标准的消息结构
rospy是python依赖
roscpp是c++依赖
执行命令之前
执行命令之后
可以看到出现了test_pkg
include放置头文件
src放置功能包代码
CMakeLists.txt 和 packages.xml是每个功能包必须要存在的两个文件
编译功能包
回到catkin_ws中
catkin_make
因为里面没有任何代码,所以没有什么编译的效果
编译成功之后,如果想运行功能包里的某个程序的话,要先设置一下工作空间的环境变量
source devel/setup.bash
只有设置了这个环境变量之后我们才能让系统找到我们的工作空间
可以看到$ROS_PACKAGE_PATH 中包含了功能包的路径就ok了