首页 > Udacity机器人软件工程师课程笔记(九)-ROS-Catkin包、工作空间和目录结构

Udacity机器人软件工程师课程笔记(九)-ROS-Catkin包、工作空间和目录结构

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 包可能包括节点的源代码,有用的脚本、配置文件等等。

接下来的部分包括

  1. 如何创建 catkin 工作空间
  2. 向其添加包
  3. 管理包内部的依赖关系
  4. 编译所有内容

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/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

例2:在工作区1的顶部覆盖工作区2

source ~/workspace1/devel/setup.bash
cd ~/workspace2/build
cmake ../src
make

例3:在系统安装空间顶部的workspace1的开发空间顶部覆盖工作区间2

source ~/workspace1/devel/setup.bash
cd ~/workspace2/build
cmake ../src
make

例4 :在系统安装空间顶部的workspace1开发空间顶部的本地workspace2上安装工作空间3

cd ~/workspace2/build
cmake -DCMAKE_INSTALL_PREFIX=~/ws2_installed ../src
make
make installsource ~/ws2_installed/setup.bashcd ~/workspace3/build
cmake ../src
make

(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

实现此布局的步骤是:

  1. 创建catkin_ws和catkin_ws / src文件夹
  2. 在catkin_ws中运行catkin_make
  3. 运行rosws init~ / rosbuild_ws /〜/ catkin_ws / devel(或安装)

参考:

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 个字节)                〔计算机存储数据分为三个空间:寄存器、栈空间、堆空间。...