Catkin是ROS的官方构建系统,也是原始ROS构建系统rosbuild的继承者。catkin结合了CMake宏和Python脚本,在CMake的正常工作流程之上提供了一些功能。 被设计为比更传统的rosbuild,允许更好的分发包、更好的交叉编译的支持,以及更好的便携性。catkin的工作流程与CMake的工作流程非常相似,但增加了对自动“查找包”基础架构的支持,同时还构建了多个依赖项目。
ROS 的早期开发者 Willow Garage根据办公室周围柳树上的花取了 catkin 这个名字。
Catkin 工作空间本质上是一个目录,我们可以在这里编写、修改并安装 catkin 包。通常当我们开发基于 ROS 的机器人或项目时,需要在单独的工作空间里完成。
这个单独的工作空间需要保存大量不同的 catkin 包,所有 ROS 软件组件都以 catkin 包的形式组织并发布。和工作空间类似 catkin 包,不过是目录包括了大量资源,这些资源在一起就构成了一些有用的模块。Catkin 包可能包括节点的源代码,有用的脚本、配置文件等等。
接下来的部分包括
ROS软件被组织并分发到包中,这些包可能包含ROS节点,库,数据集等的源代码。每个包还包含一个带有构建指令的文件 - CMakeLists.txt文件 - 以及一个包含有关包的信息的package.xml文件。软件包使ROS用户能够以方便且可重用的格式组织有用的功能。
catkin工作区是一个顶级目录,您可以在其中构建,安装和修改catkin包。工作区包含项目的所有包,以及catkin系统在从源代码构建可执行文件和其他目标时使用的其他几个目录。
首先,创建顶级catkin工作空间目录和名为src的子目录。顶级目录的名称是任意的,但通常被称为catkin_ws(catkin_workspace的缩写),因此我们将遵循此约定。可以使用一个命令创建这两个目录:
$ mkdir -p ~/catkin_ws/src
接下来,使用cd命令导航到该src目录:
$ cd ~/catkin_ws/src
初始化catkin工作区:
$ catkin_init_workspace
列出当前目录的内容
$ ls -l
CMakeLists.txt已创建符号链接(symbol link ) /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
返回顶级目录,
$ cd ~/catkin_ws
并构建工作区。
$ 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脚本。
推荐的开发布局如下
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...
在谈论开发中使用的工作空间时,有几个名称需要注意
工作区是您将在其中积极开发的文件夹。将文件保存在具有连接开发的文件夹中有助于保持开发模型的分离。
源空间(Source Space)
源空间是catkin在构建时期望查找包的文件夹。此文件夹很容易识别,因为它是从catkin项目链接到toplevel.cmake的位置。
每个需要从源代码编译的catkin项目都应该这个目录中的子目录中检出。包可以递归方式找到,因此它们不必是直接子文件夹。
构造空间是调用cmake的文件夹,并生成诸如CMakeCache之类的构件。
遵循推荐的布局时,典型的cmake调用将如下所示。
cmake ../src
开发空间是catkin生成二进制文件和运行时库的地方,这些库在安装之前是可执行的。此文件夹将是FHS布局的近似值,但仅包含来自关联源空间的构件。
在构建步骤之后,在此文件夹中,需要运行已构建的包中的节点所需的一切。
开发空间不能是包含子文件夹中的ROS包的文件夹。它不能等于工作区根目录,因为这将使源空间成为子文件夹,从而导致多次找到包。
如果调用make install,这是cmake将针对所有安装的目录。再次创建一个FHS样式的目录结构。在root用户中,可以使用-DCMAKE_INSTALL_PREFIX=/any/directory作为cmake的选项将其设置为任何目录。cmake默认值是/usr/local
与开发空间相同的限制适用于安装空间。这也意味着安装空间和开发空间不能相互嵌套。
系统安装空间是安装空间的一个特殊类别,预计将是系统上所有用户的共享安装。通常这是从您的包管理器安装的。此位置的默认值为/ opt / ros / ROSDISTRO,其中ROSDISTRO是正在使用的ROS发行版的代号。
术语“结果空间”可用于开发空间或安装空间。如果这两个特定术语中的任何一个都适用,则应该使用通用术语。为了在视觉上区分结果空间和具有直接文件夹名称对应的空间(例如安装空间的文件夹安装),建议 在文档中将结果空间称为RESULT-SPACE,例如:
source RESULT-SPACE / setup.sh
在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/
export CMAKE_INSTALL_PREFIX=/opt/ros/groovy
cd ~/workspace1/build
cmake ../src
make
make install
或者在第三步调用cmake时可以设置CMAKE_INSTALL_PREFIX
cd ~/workspace1/build
cmake -DCMAKE_INSTALL_PREFIX=/opt/ros/groovy ../src
make
make install
source ~/workspace1/devel/setup.bash
cd ~/workspace2/build
cmake ../src
make
source ~/workspace1/devel/setup.bash
cd ~/workspace2/build
cmake ../src
make
cd ~/workspace2/build
cmake -DCMAKE_INSTALL_PREFIX=~/ws2_installed ../src
make
make installsource ~/ws2_installed/setup.bashcd ~/workspace3/build
cmake ../src
make
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
实现此布局的步骤是:
参考:
Naming Conventions for Catkin Based Workspaces
包和gazebo仿真 1.添加包 (1)克隆simple_arm包 克隆现有的包并将其添加到我们新创建的工作区。 首先导航到src目录,然后从其github仓库克隆本课程 simple_arm 的包。 $ cd ~/catkin_ws/src $ git clone https://github.com/udacity/si...
强化学习(六) - 连续空间中的强化学习6.1 连续空间中的强化学习6.2 离散空间和连续空间6.3 离散化实例:小车上山6.3.1 相关程序6.3.2 程序注解(1) 环境测试(2) 离散化(3) 模型训练(4) 模型优化...
JavaScript 的命名空间并不是真正的命名空间, 只是在脚本内部创建一个封闭的小空间, 必须通过特定的空间名称才能对空间内部的代码进行访问, 这样可以防止同名函数和变量发生冲突, 也可以更方便地管理代码, 就像 .NET 的命名空间 (namespace) 和 Java 的包 (package) 一样. 为什么需要命名空间...
线元决定空间,通过定义时空线元,获得闵氏空间: 转载于:https://www.cnblogs.com/YouXiangLiThon/p/9907552.html...
sql数据库系统表,常用的(sysobjects,sysindexes,sysindexkeys,SYSCOLUMNS,SYSTYPES 及更多解释说明): https://docs.microsoft.com/zh-tw/previous-versions/sql/sql-server-2012/ms177596(v%3dsql....
----------siwuxie095 1、概述 2、栈空间 3、堆空间 1、概述 (布尔类型如果作为单个变量存储数据将占用 4 个字节,如果作为数组中的某个元素只占用 1 个字节) 〔计算机存储数据分为三个空间:寄存器、栈空间、堆空间。...