一、什么是快照(Snape)?

快照是捆绑应用程序及其所有依赖项的容器。也就是类同于项目安装包。

随着机器人平台的交付越来越近,它们提供了一些功能来解决重要问题:

  • 容器解决方案:Snaps 将您的所有依赖项和资产捆绑在一个包中(包括 ROS),使您的应用程序可安装在数十个 Linux 发行版和跨发行版版本上。
  • 严格限制:Snaps 被设计为安全且与底层系统和其他应用程序隔离,具有访问主机的专用接口。
  • 管理更新:Snaps 可以自动和事务性地更新,确保设备永不损坏并始终保持最新状态。
  • 发布管理:Snaps 的多个发布渠道允许您拥有基于角色的访问控制和应用程序版本控制,从而简化 A/B 测试并更快地发布修复。

二、创建快照

本教程将演示如何使用 Snapcraft 创建新快照,以及如何使用它。首先,让我们安装 Snapcraft。

sudo snap install --classic snapcraft

(请注意,apt 存储库中的 snapcraft Debian 软件包在很大程度上已被弃用。应该使用 snap 软件包。)

Snapcraft 内置了对 Catkin 的支持。 为了让它知道要包含哪些项目组件,您必须确保您的项目具有安装规则。

对于我们的示例,我们将使用 ros_tutorials 中的 roscpp_tutorials包下面。在此处初始化一个新的 Snapcraft 项目:

$ mkdir ~/roscpp_tutorials_snap
$ cd ~/roscpp_tutorials_snap
$ snapcraft init

这将在子目录中创建一个文件: snap/snapcraft.yaml

2.1 快照文件

打开 snap/snapcraft.yaml 文件并复制以下内容:

name: ros-talker-listener
version: '0.1'
summary: ROS Talker/Listener Example
description: |This example launches a ROS talker and listener.confinement: devmode
base: core20parts:ros-tutorials:plugin: catkinsource: https://github.com/ros/ros_tutorials.gitsource-branch: noetic-develsource-subdir: roscpp_tutorialsstage-packages:- ros-noetic-roslaunchapps:ros-talker-listener:command: opt/ros/noetic/bin/roslaunch roscpp_tutorials talker_listener.launchextensions: [ros1-noetic]

别担心,我们会一起分解的。

2.1.1 元数据

name: ros-talker-listener
version: '0.1'
summary: ROS Talker/Listener Example
description: |This example launches a ROS talker and listener.

这是所有快照所需的基本元数据。 这些字段是不言自明的,但请注意,名称在所有快照中必须是全局唯一的。

2.1.2 base词

base: core20

base 关键字定义了一种特殊的 snap,它提供了一个运行时环境,其中包含大多数应用程序通用的最小库集。 Core20 是快照构建的当前标准基础,基于 Ubuntu 20.04 LTS。 因此,它是用于 Noetic 的基础。

2.1.3 安全模型

confinement: devmode

首先,我们不会限制此应用程序。 使用 devmode 指定的不受限制的应用程序只能发布到 snapcraft 存储的边缘通道。

2.1.4 部件

parts:ros-tutorials:plugin: catkinsource: https://github.com/ros/ros_tutorials.gitsource-branch: noetic-develsource-subdir: roscpp_tutorialsstage-packages:- ros-noetic-roslaunch

部件定义了如何构建您的应用程序。 在这种情况下,我们有一个:ros-tutorials。 部件可以指向本地目录、远程 git 存储库或 tarball。 在这里,我们将源指定为特定分支的 GitHub 存储库。 我们还专门告诉 Catkin 构建 roscpp_tutorials 子目录。 此外,我们告诉 snapcraft 在构建时需要 make 等包,而在构建时需要包 ros-noetic-roslaunch。 有关插件及其选项的更多信息,请参阅在线文档。

您正在构建的 Catkin 包必须具有安装规则,否则 snapcraft CLI 将不知道将哪些组件放入 snap 中。 确保安装了二进制文件、库、头文件、启动文件等。

2.1.5 应用

apps:ros-talker-listener:command: opt/ros/noetic/bin/roslaunch roscpp_tutorials talker_listener.launchextensions: [ros1-noetic]

应用程序是向最终用户公开的命令。 apps 下的每个键都是应该在用户系统上可用的命令名称。 顾名思义,command 关键字指定要运行的命令。 最后,扩展 ros1-noetic 本质上设置了 ROS2 apt 包存储库以及必要的环境变量。

2.2 构建快照

现在我们都设置好了,让我们构建快照:

$ cd ~/roscpp_tutorials_snap
$ snapcraft --enable-experimental-extensions
*EXPERIMENTAL* extensions enabled.
Launching a VM.
Launched: snapcraft-ros-talker-listener
[...]
Snapped ros-talker-listener_0.1_amd64.snap

这将需要几分钟。 从日志和其他内容中,您将看到 Snapcraft 使用 rosdep 拉取您的包的依赖项,以及 Catkin 构建您的应用程序。 这是因为在内部,Snapcraft 依赖于熟悉的 ROS 工具。

三、测试快照

这个快照是完全独立的:它包括 ROS 和你的应用程序,这意味着你甚至不需要在你的系统上安装 ROS。 让我们测试一下:

$ sudo snap install ros-talker-listener_0.1_amd64.snap --devmode

请注意,我们在这里使用 --devmode 是因为 snap 是 devmode 限制。

关键时刻,它会运行吗?

$ ros-talker-listener
[ INFO] [1497643945.491444894]: hello world 0
[ INFO] [1497643945.495444894]: I heard: [hello world 0]
[ INFO] [1497643945.591430533]: hello world 1
[ INFO] [1497643945.595430533]: I heard: [hello world 1]
[ INFO] [1497643945.691426519]: hello world 2
[ INFO] [1497643945.695426519]: I heard: [hello world 2]
[ INFO] [1497643945.791444793]: hello world 3
[ INFO] [1497643945.795444793]: I heard: [hello world 3]

确实如此! 我们看到了预期的输出!您可以在 snapcraft 文档和 ROS snap 页面上找到有关 snap 的更多信息。

四、与世界分享快照

通过电子邮件将快照发送给人们不会扩展,但更重要的是,它不会为快照用户提供升级路径。 如果您在快照商店中提供快照,则无论何时发布新版本,您的机器人(或用户)都会自动更新。 为此,您需要在 snapcraft.io 创建一个(免费)商店帐户。 然后,使用 Snapcraft,使用该帐户登录:

$ snapcraft login

请记住我们之前关于快照名称如何必须是唯一的讨论。 在您可以在商店中发布您的快照之前,您需要将快照名称注册到您的商店帐户:

$ snapcraft register <my snap name>

最后,将 snap 推送到 store 并释放到 stable 通道中:

$ snapcraft push path/to/my.snap --release=stable

上传和自动审核成功完成后,世界上任何人都可以安装您的 snap,就像:

$ sudo snap install <my snap name>

他们可以放心地知道,当您发布更新时,他们会得到它,无需进一步的工作。

ROS知识:如何打包 ROS 项目(as a snap)相关推荐

  1. ROS知识:安装rosdep中出现time out的问题

    说明 本文是< ROS知识 [6]Ubuntu20.04下ROS安装>一文中的附加内容.是在安装ros依赖管理工具rosdep出现的超时问题的解决方案. rosdep是非常重要的ros部件 ...

  2. ROS知识【7】:ubuntu环境如何卸载ROS

    如何安装ros见<ROS知识 [6]Ubuntu20.04下ROS安装>此处记录如何卸载已经安装的ros. 1 卸载desktop sudo apt-get  remove ros-noe ...

  3. 2019~ROS暑期学校~ROS Summer School in China~分享

    图片来源:ROS暑期学校(中国) 图片来源:ROS暑期学校(中国) https://discourse.ros.org/t/ros-summer-school-in-china-2019-july-2 ...

  4. 创建ROS消息和服务---ROS学习第8篇

    文章目录 1. msg和srv介绍 2. 使用msg 2.1 创建msg 2.2 使用rosmsg 3. 使用srv 3.1 创建srv 3.2 使用rossrv 4. msg和srv的一般步骤 5. ...

  5. [react] 使用webpack打包React项目,怎么减小生成的js大小?

    [react] 使用webpack打包React项目,怎么减小生成的js大小? 打包优化的问题解决思路: 代码压缩:UglifyjsWebpackPlugin 代码分组 commonsChunkPlu ...

  6. ROS学习-创建一个ROS msg和一个srv

    目录 ROS msg和srv的介绍 使用msg 创建一个msg 使用rosmsg命令 使用srv 创建一个srv 使用rossrv命令 msg和srv的通用步骤 使用Help 简要总结回顾 ROS m ...

  7. ROS简介-从零开始讲解ROS(适合超零基础阅读)

    1. 前言 笔者以前是机械专业,对于计算机方面的学习是少之又少,接触机器人的学习之后,比如路径规划.算法等,发现很难入门,不过慢慢摸爬滚打之后还是有了一些认识,俗话说的好,学习最好的方法就是复述,复述 ...

  8. Pyinstaller 打包 Pytest项目及资源文件

    目录 前言 纯Python代码的打包 包含其他文件的打包 总结 前言 相比于cx-freeze和Nuitka,还是pyinstaller好用些,因此使用pyinstaller来生成独立的exe文件以供 ...

  9. ROS wiki系列|通过ROS wiki-tutorials学习节点

    前面几期我们讲的都是一些入门相关的内容-- ROS wiki系列|ROS wiki初探(自用) ROS wiki系列|Documentation-ROS部分讲解 ROS wiki系列|ROS入门基础概 ...

最新文章

  1. Nginx实现高可用的工作原理
  2. SQL Server使用视图做权限控制
  3. QT_CONFIG宏用法及支持的参数
  4. 【MATLAB】求点到多边形的最短距离
  5. fopen如何保存西里尔文文件名_如何下载微信视频号的视频?
  6. layui让文字和div平行_layui富文本的使用注意事项以及拓展
  7. mysql 楼层_MySQL 8.0.0 发布!
  8. dmx512如何帧同步_stm32实现DMX512协议发送与接收(非标)
  9. JSP技术的学习总结
  10. linux操作系统拼音,linux怎么读 解读linux的拼音笔顺笔画顺序怎么写!
  11. mysql插入数据不成功_mysql插入数据失败原因分析
  12. shape_predictor_5_face_landmarks.dat以及shape_predictor_68_face_landmarks.dat资源分享
  13. 电脑的“应用与浏览器控制”出现黄色感叹号
  14. 哲学家就餐问题的三种避免死锁的解法(PV操作)
  15. 强化学习入门及其实现代码
  16. 黑苹果一些奇怪的事情
  17. R包 splatter
  18. hbase查询性对比 mysql_查询MYSQL和查询HBASE速度比较
  19. [转]Unsafe at any speed: Memcpy() banished in Redmond
  20. dede修改mysql用户名密码_老李教你快速学会织梦dedecm后台修改帐号密码教程

热门文章

  1. Mysql 学习(一)
  2. JDK8新特性:新日期时间API全面学习
  3. PowerPoint课件制作技巧
  4. 产品设计体会(3016)一个只有七天的项目
  5. C# TCPIP编程
  6. vue中使用tiff.js展示tif格式的图片
  7. Elasticsearch 学习(一).基础原理
  8. 劳务员报考建筑八大员报考劳务员工程施工建筑劳务现状的分析
  9. 音视频基础: I帧 P帧 B帧 GOP DIR PTS DTS 帧率 码率的介绍
  10. PHP网站被黑下马处理以及防黑大全解读