Catkin工作空间 (重点)
[TOC]
1 Catkin工作空间
工作空间(workspace)是一个存放工程开发相关文件的文件夹。
src:代码空间(Source Space) build:编译空间(Build Space) devel:开发空间(Development Space) install:安装空间(Install Space)
Catkin工作空间是创建、修改、编译catkin软件包的目录。catkin的工作空间,直观的形容就是一个仓库,里面装载着ROS的各种项目工程,便于系统组织管理调用。在可视化图形界面里是一个文件夹。
我们自己写的ROS代码通常就放在工作空间中,本节就来介绍catkin工作空间的结构。
1.1 创建catkin工作空间
创建一个 catkin 工作空间:
$ mkdir -p ~/catkin_ws/src # 创建了第二层级的文件夹src,这是放ROS软件包的地方
$ cd ~/catkin_ws/src # 进入工作空间,catkin_make必须在工作空间这个路径上执行
$ catkin_init_workspace # 初始化src目录,生成的CMakeLists.txt为功能包编译配置
1.2 编译工作空间
$ cd ~/catkin_ws # 回到工作空间,catkin_make必须在工作空间下执行;
$ catkin_make # 开始编译,调用系统自动完成编译和链接过程,构建生成目标文件
注意: catkin编译之前需要回到工作空间目录,catkin_make
在其他路径下编译不会成功。
==编译完成后,如果有新的目标文件产生(原来没有),那么一般紧跟着要source刷新环境,使得系统能够找到刚才编译生成的ROS可执行文件。==这个细节比较容易遗漏,致使后面出现可执行文件无法打开等错误。
catkin_make
命令也有一些可选参数,例如:
catkin_make [args]
-h, --help 帮助信息
-C DIRECTORY, --directory DIRECTORY
工作空间的路径 (默认为 '.')
--source SOURCE src的路径 (默认为'workspace_base/src')
--build BUILD build的路径 (默认为'workspace_base/build')
--use-ninja 用ninja取代make
--use-nmake 用nmake取'make
--force-cmake 强制cmake,即使已经cmake过
--no-color 禁止彩色输出(只对catkin_make和CMake生效)
--pkg PKG [PKG ...] 只对某个PKG进行make
--only-pkg-with-deps ONLY_PKG_WITH_DEPS [ONLY_PKG_WITH_DEPS ...]
将指定的package列入白名单CATKIN_WHITELIST_PACKAGES,
之编译白名单里的package。该环境变量存在于CMakeCache.txt。
--cmake-args [CMAKE_ARGS [CMAKE_ARGS ...]]
传给CMake的参数
--make-args [MAKE_ARGS [MAKE_ARGS ...]]
传给Make的参数
--override-build-tool-check
用来覆盖由于不同编译工具产生的错误
注意, 对于 Python 3 用户,在一个空的 catkin 工作空间中第一次运行 catkin_make的命令应为:
$ catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3
这将会配置 catkin_make 使用 Python 3.你可以在随后的构建中只使用 catkin_make
。
1.3 设置环境变量
另外,如果你查看一下当前目录应该能看到 'build' 和 'devel' 这两个文件夹。在 'devel' 文件夹里面你可以看到几个 setup.*sh
文件。source
这些文件中的任何一个都可以将当前工作空间设置在ROS工作环境的最顶层。接下来首先 source
一下新生成的 setup.*sh
文件:
$ source devel/setup.bash # 刷新坏境
1.4 检查环境变量
要想保证工作空间已配置正确,需确保ROS_PACKAGE_PATH
环境变量包含你的工作空间目录,采用以下命令查看:
$ echo $ROS_PACKAGE_PATH
# 出现 /home/<youruser>/catkin_ws/src:/opt/ros/kinetic/share
到此你的工作环境已经搭建完成。
创建好了一个ROS的工作空间了,接下来就是在catkin_ws工作空间下的src目录下新建功能包并进行功能包程序。