创建软件包

目标 使用 CMake 或 Python 创建一个新软件包,并运行其可执行文件。

辅导水平: 初学者

时间 15 分钟

背景介绍

1 什么是 ROS 2 软件包?

软件包是 ROS 2 代码的组织单位。如果你想安装你的代码或与他人分享,那么你就需要将其整理成一个软件包。有了软件包,你就可以发布你的 ROS 2 作品,并允许他人轻松构建和使用。

ROS 2 中的软件包创建使用 ament 作为构建系统,使用 colcon 作为构建工具。你可以使用官方支持的 CMake 或 Python 创建软件包,当然也存在其他构建类型。

2 什么是 ROS 2 软件包?

ROS 2 Python 和 CMake 软件包都有各自的最低要求内容:

  • CMakeLists.txt 文件,说明如何在软件包内构建代码

  • include/<package_name>; 目录,其中包含软件包的公共头文件

  • package.xml 文件,其中包含软件包的元信息

  • 来源 目录中包含软件包的源代码

最简单的软件包的文件结构可能是这样的

my_package/
     CMakeLists.txt
     include/my_package/
     package.xml
     源代码

工作区中的 3 个软件包

一个工作区可以包含任意数量的软件包,每个软件包都有自己的文件夹。您也可以在一个工作区中包含不同构建类型的软件包(CMake、Python 等)。但不能嵌套软件包。

最佳做法是 来源 文件夹,并在其中创建软件包。这样可以保持工作区顶层的 "干净"。

一个琐碎的工作区可能是这样的

工作空间文件夹/
    源代码
      cpp_package_1/
          CMakeLists.txt
          include/cpp_package_1/
          package.xml
          源代码

      py_package_1/
          package.xml
          resource/py_package_1
          setup.cfg
          setup.py
          py_package_1/
      ...
      cpp_package_n/
          CMakeLists.txt
          include/cpp_package_n/
          package.xml
          源代码

先决条件

中的说明后,您就应该拥有一个 ROS 2 工作区了。 上一个教程.您将在此工作区创建软件包。

任务

1 创建软件包

首先是 为您的 ROS 2 安装提供源代码.

让我们使用在 上一个教程, ros2_ws您的新套餐。

确保您在 来源 文件夹,然后再运行软件包创建命令。

cd ~/ros2_ws/src

在 ROS 2 中创建新软件包的命令语法是

ros2 pkg create --build-type ament_cmake --license Apache-2.0 <软件包名称>;

在本教程中,您将使用以下可选参数 --节点名--许可证. --节点名 选项会在软件包中创建一个简单的 Hello World 类型的可执行文件,而 --许可证 声明软件包的许可证信息。

在终端中输入以下命令

ros2 pkg create --build-type ament_cmake --license Apache-2.0 --node-name my_node my_package

现在,您将在工作区的 来源 名为 我的包.

运行该命令后,终端将返回信息:

创建一个新软件包
软件包名称: my_package
目标目录:/home/user/ros2_ws/src
包装格式:3
版本: 0.0.0
描述:TODO: 软件包描述
维护者:['<name> <email>']
许可证:['Apache-2.0']
构建类型: ament_cmake
依赖项:[]
节点名称: my_node
创建文件夹 ./my_package
创建 ./my_package/package.xml
创建源代码和 include 文件夹
创建文件夹 ./my_package/src
创建文件夹 ./my_package/include/my_package
创建 ./my_package/CMakeLists.txt
创建 ./my_package/src/my_node.cpp

您可以看到为新软件包自动生成的文件。

2 构建软件包

将软件包放在工作区中尤为重要,因为通过运行 胶管 构建 在工作区根目录下。否则,您必须单独构建每个软件包。

返回工作区的根目录:

cd ~/ros2_ws

现在,您可以构建软件包了:

Colcon build

记得在上一个教程中,您还使用了 教程 软件包中的 ros2_ws.您可能已经注意到,运行 胶管 构建 还建造了 海龟 包。当工作区中只有几个软件包时,这样做还可以,但当有很多软件包时就不行了、 胶管 构建 可能需要很长时间。

只建立 我的包 下一次,你可以跑了:

colcon build --packages-select my_package

3 源设置文件

要使用新软件包和可执行文件,首先要打开一个新终端,并将 ROS 2 的主安装程序作为源代码。

然后,从 ros2_ws 目录下,运行以下命令来获取工作区的源代码:

source install/local_setup.bash

现在工作区已添加到路径中,您就可以使用新软件包的可执行文件了。

4 使用软件包

要运行使用 --节点名 参数,输入命令:

ros2 run my_package my_node

将向终端返回一条信息:

hello world my_package 软件包

5 检查包装内容

内部 ros2_ws/src/my_package您将看到以下文件和文件夹 玫瑰2 创建 自动生成:

CMakeLists.txt include package.xml src

my_node.cpp来源 目录。今后,所有自定义 C++ 节点都将放在这里。

6 自定义 package.xml

您可能已经注意到,在创建软件包后的返回信息中,字段 描述许可 蕴含 TODO 注释。这是因为软件包说明和许可证声明不是自动设置的,但如果要发布软件包,则必须设置。软件包说明 维护者 字段也可能需要填写。

来自 ros2_ws/src/my_package开放 package.xml 使用您喜欢的文本编辑器:

<?xml版本="1.0"?>;
<?xml-model
   href="http://download.ros.org/schema/package_format3.xsd";
   schematypens="http://www.w3.org/2001/XMLSchema"?>;
<package 格式="3";>;
 <名称>;我的包</名称>;
 版本>;0.0.0</version>;
 <描述>;TODO: 包装 描述</description>;
 维护者 电子邮件="[email protected]";>;用户维护人员</maintainer>;
 许可证TODO: 许可证 宣言</license>;

 构建工具的依赖关系<buildtool_depend>;ament_cmake</buildtool_depend>;

 <test_depend>;自动</test_depend>;
 <test_depend>;ament_lint_common</test_depend>;

 <export>;
   <构建类型>;ament_cmake</build_type>;
 </export>;
</package>;

维护者 行,如果该行尚未自动填入。然后,编辑 描述 行来概述软件包:

<描述>;初学者 客户 图书馆 教程 练习 包装</description>;

然后,更新 许可 行。您可以阅读更多有关开放源代码许可的信息 这里.由于本软件包仅用于练习,因此使用任何许可证都是安全的。我们将使用 Apache-2.0:

许可证Apache-2.0</license>;

编辑完成后,别忘了保存。

在许可证标记下方,您会看到一些标记名称以 依赖.这就是您的 package.xml 会列出它与其他软件包的依赖关系,供 colcon 搜索。 我的包 很简单,没有任何依赖关系,但在接下来的教程中,你会看到这个空间的使用。

你们的任务暂时完成了!

摘要

您创建了一个软件包来组织您的代码,并使其便于他人使用。

您的软件包已自动填充了必要的文件,然后您可以使用 colcon 构建它,以便在本地环境中使用其可执行文件。

下一步工作

接下来,让我们为软件包添加一些有意义的内容。您将从一个简单的发布者/订阅者系统开始,您可以选择用以下两种语言编写该系统 C++Python.