警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

创建第一个 ROS 2 软件包

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

辅导水平: 初学者

时间 15 分钟

背景介绍

1 什么是 ROS 2 软件包?

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

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

2 什么是 ROS 2 软件包?

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

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

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

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

my_package/
     CMakeLists.txt
     package.xml

工作区中的 3 个软件包

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

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

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

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

      包_2/
          setup.py
          package.xml
          resource/package_2
      ...
      包装
          CMakeLists.txt
          package.xml

先决条件

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

任务

1 创建软件包

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

让我们使用在上一教程中创建的工作区、 dev_ws为您的新软件包

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

cd ~/dev_ws/src

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

ros2 pkg create --build-type ament_cmake <package_name>;

在本教程中,您将使用可选参数 --节点名 会在软件包中创建一个简单的 Hello World 类型的可执行文件。

在终端中输入以下命令

ros2 pkg create --build-type ament_cmake --node-name my_node my_package

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

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

创建一个新软件包
软件包名称: my_package
目标目录:/home/user/dev_ws/src
包装格式:3
版本: 0.0.0
描述:TODO: 软件包描述
维护者:['<name> <email>']
许可证:['TODO:许可证声明']
构建类型: 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 ~/dev_ws

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

Colcon build

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

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

colcon build --packages-select my_package

3 源设置文件

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

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

install/setup.bash

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

4 使用软件包

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

ros2 run my_package my_node

将向终端返回一条信息:

hello world my_package 软件包

5 检查包装内容

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

CMakeLists.txt include package.xml src

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

6 自定义 package.xml

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

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

 1<?xml版本="1.0"?>;
 2<?xml-model
 3   href="http://download.ros.org/schema/package_format3.xsd";
 4   schematypens="http://www.w3.org/2001/XMLSchema"?>;
 5<package 格式="3";>;
 6 <名称>;我的包</名称>;
 7 版本>;0.0.0</version>;
 8 <描述>;TODO: 包装 描述</description>;
 9 维护者 电子邮件="[email protected]";>;用户维护人员</maintainer>;
10 许可证TODO: 许可证 宣言</license>;
11
12 构建工具的依赖关系<buildtool_depend>;ament_cmake</buildtool_depend>;
13
14 <test_depend>;自动</test_depend>;
15 <test_depend>;ament_lint_common</test_depend>;
16
17 <export>;
18   <构建类型>;ament_cmake</build_type>;
19 </export>;
20</package>;

在第 7 行输入您的姓名和电子邮件(如果没有自动填写)。然后,编辑第 6 行的描述,对套餐进行概述:

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

然后,更新第 8 行的许可证。您可以阅读有关开源许可证的更多信息 这里.

由于本软件包仅用于练习,因此使用任何许可证都是安全的。我们使用 阿帕奇 许可证 2.0:

许可证阿帕奇 许可证 2.0</license>;

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

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

你们的任务暂时完成了!

摘要

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

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

下一步工作

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