警告
您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.
快速打包 ROS 2 应用程序 [社区贡献]
什么是卡扣?
卡扣 是捆绑应用程序及其所有依赖项的容器。它们提供了多种功能,可解决在机器人平台交付过程中遇到的重要问题:
创建快照
本教程将演示如何使用 snapcraft 将 ROS 2 应用程序打包为快照,以及如何使用它。
首先,让我们安装 snapcraft。
苏都 断 安装 --经典 snapcraft
(请注意,apt 软件仓库中的 snapcraft debian 软件包已基本过时。应使用 snap 软件包)。
Snapcraft 内置支持 科尔康
.
在示例中,您将使用 演示节点
软件包中的 ros2_demos.
在此初始化一个新的 snapcraft 项目:
mkdir ~/demo_nodes_cpp_snap
CD ~/demo_nodes_cpp_snap snapcraft 启动
这将在子目录中创建一个文件 snap/snapcraft.yaml
.
snapcraft 文件
打开新创建的 snap/snapcraft.yaml
文件,并复制以下内容:
名字: ros2-talker-listener
版本: '0.1'
摘要: ROS 2 通话器/监听器示例
描述: |
该示例启动了 ROS 2 通话器和监听器。
监禁: devmode
基础: 核心 20
部件:
ros-演示:
插头: 胶管
消息来源: https://github.com/ros2/demos.git
源分支: 狐狸
包装: [演示节点]
构建包: [生产, gcc, g++]
阶段包: [ros-foxy-ros2launch]
应用程序:
ros2-talker-listener:
指挥部: opt/ros/foxy/bin/ros2 launch demo_nodes_cpp talker_listener.launch.py
扩展: [ros2-foxy]
让我们来分析一下。
元数据
名字: ros2-talker-listener
版本: '0.1'
摘要: ROS 2 通话器/监听器示例
描述: |
该示例启动了 ROS 2 通话器和监听器。
这是基本的 元数据 是所有嗅探针都需要的。这些字段不言自明,但要注意的是,名称必须在所有 Snap 中都是全局唯一的。
基地
基础: 核心 20
"(《世界人权宣言》) 基础 关键字定义了一种特殊的 snap,它提供了一个运行时环境,其中包含一组大多数应用程序通用的最小库。 核心 20 是当前扣件建筑的标准基础,其依据是 Ubuntu 20.04 LTS.因此,它是狐狸的基础。
安全模式
监禁: devmode
开始时,您不会限制此应用程序。未限制的应用程序用 devmode
只能向 边缘
的 snapcraft 商店频道。有关 snapaps 安全模式的更多信息,请参阅 在线文档.
部件
部件:
ros-演示:
插头: 胶管
消息来源: https://github.com/ros2/demos.git
源分支: 狐狸
包装: [演示节点]
构建包: [生产, gcc, g++]
阶段包: [ros-foxy-ros2launch]
部件定义了如何构建应用程序。在本例中,您有一个: ros-演示
.部件可以指向本地目录、远程 git 仓库或压缩包。在这里,您需要将源代码指定为某个分支的 GitHub 仓库。您还特别告诉 科尔康
以建立 演示节点
软件包。此外,您还可以告诉 snapcraft 如下软件包 生产
在构建时是必要的,而软件包 ros-foxy-ros2launch
在运行时是必要的。有关插件及其选项的更多信息,请参考 在线文档.
应用程序
应用程序:
ros2-talker-listener:
指挥部: opt/ros/foxy/bin/ros2 launch demo_nodes_cpp talker_listener.launch.py
扩展: [ros2-foxy]
应用程序是面向最终用户的命令。应用程序下的每个键都是应在用户系统上提供的命令名称。命令名称 指挥部
关键字指定要运行的命令,如其名称所示。最后,扩展 ros2-foxy 主要是设置 ROS 2 apt 软件包库和必要的环境变量。
构建扣件
现在,一切准备就绪,让我们开始制作快照吧:
CD ~/demo_nodes_cpp_snap snapcraft --启用实验扩展功能
给予:
*EXPERIMENTAL* 扩展 启用。启动 a 虚拟机。已启动: snapcraft-ros2-talker-listener
[...]
这 部分 是 失踪 图书馆 那 不能 是 满足 与 任何 可用 阶段包 已知 至 snapcraft: libnddsc.so libnddscore.so libnddscpp.so librosidl_typesupport_connext_c.so librosidl_typesupport_connext_cpp.so librticonnextmsgcpp.so 已抢购 ros2-talker-listener_0.1_amd64.snap
备注
关于缺少库的警告是误报。这些库只是构建时的依赖项。今后发布的 snapcraft
.
这需要几分钟时间。从日志中可以看到 snapcraft 正在使用 rosdep 为您的示例调用依赖项,但也要 科尔康
建立应用程序。
测试卡扣
这个 snap 是完全独立的:它包括 ROS 2 和你的应用程序,这意味着你甚至不需要在主机系统上安装 ROS 2。让我们来测试一下:
苏都 断 安装 ros2-talker-listener_0.1_amd64.snap --devmode
请注意,您使用 --devmode
在这里,因为快速限制被设置为 devmode
.关键时刻,它会跑吗?
ros2-talker-listener
[脱口秀-1] [信息] [1646934735.523191674] [话匣子]: 出版: '你好,世界: 1';
[听众-2] [信息] [1646934735.524428480] [听众]: I 听说: [您好 世界: 1]
[脱口秀-1] [信息] [1646934736.523025881] [话匣子]: 出版: '你好,世界: 2';
[听众-2] [信息] [1646934736.523614075] [听众]: I 听说: [您好 世界: 2]
确实如此!你会看到预期的输出结果!
您可以在 snapcraft 文档 和 ROS 2 快速页面.