Catkin包和工作空间
1.Carkin包简介
Catkin是ROS的官方构建系统,也是原始ROS构建系统rosbuild的继承者。catkin结合了CMake宏和Python脚本,在CMake的正常工作流程之上提供了一些功能。 被设计为比更传统的rosbuild,允许更好的分发包、更好的交叉编译的支持,以及更好的便携性。catkin的工作流程与CMake的工作流程非常相似,但增加了对自动“查找包”基础架构的支持,同时还构建了多个依赖项目。
ROS 的早期开发者 Willow Garage根据办公室周围柳树上的花取了 catkin 这个名字。
Catkin 工作空间本质上是一个目录,我们可以在这里编写、修改并安装 catkin 包。通常当我们开发基于 ROS 的机器人或项目时,需要在单独的工作空间里完成。
这个单独的工作空间需要保存大量不同的 catkin 包,所有 ROS 软件组件都以 catkin 包的形式组织并发布。和工作空间类似 catkin 包,不过是目录包括了大量资源,这些资源在一起就构成了一些有用的模块。Catkin 包可能包括节点的源代码,有用的脚本、配置文件等等。
接下来的部分包括
如何创建 catkin 工作空间向其添加包管理包内部的依赖关系编译所有内容
ROS软件被组织并分发到包中,这些包可能包含ROS节点,库,数据集等的源代码。每个包还包含一个带有构建指令的文件 - CMakeLists.txt文件 - 以及一个包含有关包的信息的package.xml文件。软件包使ROS用户能够以方便且可重用的格式组织有用的功能。
2.Catkin工作区
catkin工作区是一个顶级目录,您可以在其中构建,安装和修改catkin包。工作区包含项目的所有包,以及catkin系统在从源代码构建可执行文件和其他目标时使用的其他几个目录。
3.创建Catkin工作区
第1步:mkdir -p ~/catkin_ws / src
首先,创建顶级catkin工作空间目录和名为src的子目录。顶级目录的名称是任意的,但通常被称为catkin_ws(catkin_workspace的缩写),因此我们将遵循此约定。可以使用一个命令创建这两个目录:
$ mkdir -p ~/catkin_ws/src
第2步:cd ~/ catkin_ws / src
接下来,使用cd命令导航到该src目录:
$ cd ~/catkin_ws/src
第3步:catkin_init_workspace
初始化catkin工作区:
$ catkin_init_workspace
列出当前目录的内容
$ ls -l
CMakeLists.txt已创建符号链接(symbol link ) /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
第4步:cd~ / catkin_ws
返回顶级目录,
$ cd ~/catkin_ws
第5步:catkin_make
并构建工作区。
$ catkin_make
若想深入了解catkin构建系统的内容请参考ROS维基。
完成后,应该在输出结尾处看到以下行:
-- BUILD_SHARED_LIBS is on-- Configuring done-- Generating done-- Build files have been written to: /home/robo/catkin_ws/build######## Running command: "make -j2 -l2" in "/home/robo/catkin_ws/build"####robo@robo-virtual-machine:~/catkin_ws$
再次使用ls命令
$ ls
现在有两个新目录:build和devel。build目录是C ++包的构建空间,在大多数情况下我们不会与它进行交互。devel目录确实包含一些有趣的内容,一个名为的文件setup.bash。必须在使用catkin工作区之前获取此setup.bash脚本。
4.catkin工作区常规目录结构:
(1)推荐的布局
推荐的开发布局如下
workspace_folder/ --工作区src/ --source space来源空间CMakeLists.txt --这是与catkin / cmake / toplevel.cmake的符号链接package_1/CMakeLists.txtpackage.xml...package_n/CATKIN_IGNORE--可选地放置此空标记文件以排除处理package_n的CMakeLists.txtCMakeLists.txtpackage.xmlbuild/ --BUILD SPACE(这是调用构建系统的地方,不一定在工作区内)CATKIN_IGNORE --在抓取包时标记要忽略的文件夹(当源空间位于工作空间的根目录时,文件是emtpy时需要)devel/ --DEVEL SPACE(目标转到此处,可参数化,但默认为Build Space的同行)bin/etc/include/lib/share/.catkin --将文件夹标记为开发空间(该文件包含以分号分隔的源空间路径列表)env.bashsetup.bashsetup.sh...install/--INSTALL SPACE(这是测试安装的已安装目标,不一定在工作区内)bin/etc/include/lib/share/.catkin --将文件夹标记为安装空间(该文件为emtpy)env.bashsetup.bashsetup.sh...
(2)工作区的元素
在谈论开发中使用的工作空间时,有几个名称需要注意
工作区(Workspace)
工作区是您将在其中积极开发的文件夹。将文件保存在具有连接开发的文件夹中有助于保持开发模型的分离。
源空间(Source Space)
源空间是catkin在构建时期望查找包的文件夹。此文件夹很容易识别,因为它是从catkin项目链接到toplevel.cmake的位置。
每个需要从源代码编译的catkin项目都应该这个目录中的子目录中检出。包可以递归方式找到,因此它们不必是直接子文件夹。
构造空间(Build Space)
构造空间是调用cmake的文件夹,并生成诸如CMakeCache之类的构件。
遵循推荐的布局时,典型的cmake调用将如下所示。
cmake ../src
开发空间(Development)
开发空间是catkin生成二进制文件和运行时库的地方,这些库在安装之前是可执行的。此文件夹将是FHS布局的近似值,但仅包含来自关联源空间的构件。
在构建步骤之后,在此文件夹中,需要运行已构建的包中的节点所需的一切。
开发空间不能是包含子文件夹中的ROS包的文件夹。它不能等于工作区根目录,因为这将使源空间成为子文件夹,从而导致多次找到包。
安装空间
如果调用make install,这是cmake将针对所有安装的目录。再次创建一个FHS样式的目录结构。在root用户中,可以使用-DCMAKE_INSTALL_PREFIX=/any/directory作为cmake的选项将其设置为任何目录。cmake默认值是/usr/local
与开发空间相同的限制适用于安装空间。这也意味着安装空间和开发空间不能相互嵌套。
系统安装空间(system install space)
系统安装空间是安装空间的一个特殊类别,预计将是系统上所有用户的共享安装。通常这是从您的包管理器安装的。此位置的默认值为/ opt / ros / ROSDISTRO,其中ROSDISTRO是正在使用的ROS发行版的代号。
结果空间(result space)
术语“结果空间”可用于开发空间或安装空间。如果这两个特定术语中的任何一个都适用,则应该使用通用术语。为了在视觉上区分结果空间和具有直接文件夹名称对应的空间(例如安装空间的文件夹安装),建议 在文档中将结果空间称为RESULT-SPACE,例如:
source RESULT-SPACE / setup.sh
(3)覆盖(overlays)
在catkin风格的工作区中,支持将一个工作区覆盖在另一个工作区之上。每个覆盖层都可以构建在另一个覆盖层的顶部,而任何位于较高覆盖层中的包都将屏蔽位于较低覆盖层中的包。
注意:当覆盖任何包时,如果要使用依赖于该包的所有包,则必须覆盖它们。创建覆盖的用户必须检查这一点。如果一个核心包被覆盖并改变了它的工作方式,任何依赖于它并依赖于旧行为(无论是运行时,还是链接时间)的包都会崩溃。
Catkin在devel中创建FHS[引用FHS]样式的布局并安装空间。可以使用指向devel空间或install空间的CMAKE_PREFIX_PATH将这些空间包含到另一个工作区中。如果是已安装空间,则必须调用make install;如果是devel空间,则必须使用make构建它。
例子
以下是一些基本用法的实例
假设我们的主文件夹(~/)中有几个catkin工作区。
~/workspace1/src/build/devel/~/workspace2/src/build/devel/~/workspace3/src/build/devel/
例1:将工作区1安装到系统
export CMAKE_INSTALL_PREFIX=/opt/ros/groovycd ~/workspace1/buildcmake ../srcmakemake install
或者在第三步调用cmake时可以设置CMAKE_INSTALL_PREFIX
cd ~/workspace1/buildcmake -DCMAKE_INSTALL_PREFIX=/opt/ros/groovy ../srcmakemake install
例2:在工作区1的顶部覆盖工作区2
source ~/workspace1/devel/setup.bashcd ~/workspace2/buildcmake ../srcmake
例3:在系统安装空间顶部的workspace1的开发空间顶部覆盖工作区间2
source ~/workspace1/devel/setup.bashcd ~/workspace2/buildcmake ../srcmake
例4 :在系统安装空间顶部的workspace1开发空间顶部的本地workspace2上安装工作空间3
cd ~/workspace2/buildcmake -DCMAKE_INSTALL_PREFIX=~/ws2_installed ../srcmakemake installsource ~/ws2_installed/setup.bashcd ~/workspace3/buildcmake ../srcmake
(4)混合catkin和rosbuild工作区
catkin的设计允许rosbuild包裹坐在catkin之上。这是通过使用叠加来完成的。rosbuild叠加层可以覆盖catkin工作区开发空间或安装空间。rosbuild工作区的setup.* sh文件在获取时,也会获取catkin工作区的相应setup.* sh文件。
虽然可以在技术上将相同的文件夹用于rosbuild工作区和catkin工作区,但建议的布局是将rosbuild和catkin工作区隔离在自己的文件夹中。
~/rosbuild_ws/dry_pkg1/...dry_pkgN/setup.bashsetup.sh~/catkin_ws/src/wet_pkg1/...wet_pkgN/build/devel/setup.bashsetup.shinstall/setup.bashsetup.sh
实现此布局的步骤是:
创建catkin_ws和catkin_ws / src文件夹在catkin_ws中运行catkin_make运行rosws init~ / rosbuild_ws /〜/ catkin_ws / devel(或安装)
参考:
Naming Conventions for Catkin Based Workspaces
如果觉得《Udacity机器人软件工程师课程笔记(九)-ROS-Catkin包 工作空间和目录结构》对你有帮助,请点赞、收藏,并留下你的观点哦!