ROS Catkin 工作空间
前面介绍了 ROS 编译系统 Catkin 的工作原理,本文将继续介绍 Catkin 的使用,包括工作空间的创建以及目录结构的说明。
创建工作空间
通常,在创建 ROS 软件包之前需要先创建 ROS 工作空间(也称为 Catkin 工作空间)。所谓的工作空间,也就是存储 ROS 软件包的地方。在工作空间中,我们可以创建新的软件包、安装现有的软件包,以及编译生成新的可执行文件。
Catkin 工作空间的目录(文件夹)对路径和名称没有任何要求,也就是说你可以任意命名。不过,工作空间中必须有一个 src 目录(该名称不能修改)。
例如,在用户家目录下创建一个 catkin_ws 目录作为工作空间:
$ mkdir -p ~/catkin_ws/src
切换到工作空间的 src 目录:
$ cd ~/catkin_ws/src
执行初始化命令使其成为一个新的 ROS 工作空间:
$ catkin_init_workspace
可以看到在 ~/catkin_ws/src
目录出现了一个 CMakeLists.txt 文件:
rudy@Latitude-3420:~/catkin_ws/src$ catkin_init_workspace
Creating symlink "/home/rudy/catkin_ws/src/CMakeLists.txt" pointing to "/opt/ros/noetic/share/catkin/cmake/toplevel.cmake"
rudy@Latitude-3420:~/catkin_ws/src$ ls
CMakeLists.txt
注意:如果不初始化工作空间,就不能正确地创建、编译和链接软件包。
至此,Catkin 工作空间已经创建完毕。我们可以尝试编译一下它!首先,切换到 src 的上一级目录,然后执行 catkin_make
命令即可。如下所示:
$ cd ..
$ catkin_make
编译完成后,可以看到 catkin_ws 目录下除了 src,还增加了 build 和 devel 目录。
rudy@Latitude-3420:~/catkin_ws$ ls
build devel src
下面将详细介绍它们的作用。
目录结构
src 目录
Catkin 工作空间中的 src 目录是存储新创建的软件包或者从远程代码库复制软件包的地方。src 目录可以包含多个 Package,如下图所示。
ROS 软件包只有在 src 目录中才可以被创建或者编译执行。当我们在工作空间中执行 catkin_make
命令时,该命令会递归检查 src 目录中的每个软件包并一一编译它们。软件包(Package)是 catkin 工作空间的基本单元,也是我们后续编写代码的地方。
build 目录
执行 catkin_make
命令后,Catkin 工具会在 build 目录中创建一些中间编译文件和中间缓存文件。这些缓存文件可以避免再次执行 catkin_make
命令时重新编译所有的软件包。因此,如 果你想重新编译所有 ROS 软件包,删除 build 目录即可。
devel 目录
当执行 catkin_make
命令时,所有的软件包都会被编译。如果编译成功,那么目标可执行文件将会被创建,这些可执行文件就存储在 devel 目录中。
devel 目录还包含一些脚本文件,可将当前工作空间添加到 ROS 的系统工作空间目录中。只有运行这些脚本后,才可以访问当前工作空间的软件包。命令如下:
$ source ~/<workspace_name>/devel/setup.bash