使用Snaps部署Zenoh到ROS 2系统

使用Snaps部署Zenoh到ROS 2系统

引言

ROS 2为机器人开发者提供了选择中间件的自由。作为ROS的通信协议,Zenoh已获得广泛关注。它不仅提供经过验证的性能和稳定性,还让开发者能够对节点发现进行精确控制。

Zenoh是一种专为机器人和分布式系统设计的高性能轻量级通信协议。它支持发布/订阅和基于查询的通信,能够高效处理不可靠的网络连接。Zenoh可以作为ROS 2系统的中间件使用。

对于运行基于DDS(数据分发服务)的ROS 2应用程序的团队,Zenoh桥接器提供了一种保持应用程序不变,同时将其通信桥接到Zenoh的方法。同时,Zenoh路由器提供数据流路由,并在各个端点之间分发查询。

为了有效部署ROS 2和Zenoh,需要稳定可靠的环境。本文将探讨如何通过snaps实现这一目标,涵盖三种关键部署方法:

  • 包装方式:将Zenoh ROS中间件直接包含在应用程序中
  • 基础设施方式:将Zenoh路由器作为独立snap运行
  • 集成方式:使用Zenoh到DDS桥接器连接现有ROS 2应用程序

这些方法并非互斥,团队可以根据需要混合搭配,以适应其架构。

将Zenoh打包到ROS 2应用程序中

当开发者希望将Zenoh作为应用程序的一部分使用时,可以在ROS 2的snapcraft.yaml中直接包含rmw_zenoh_cpp依赖项。

ROS snap示例存储库中的talker_listener_zenoh_core24项目通过ROS 2 Jazzy演示了这种方法。它打包了熟悉的demo_nodes_cpp talker和listener,同时通过RMW_IMPLEMENTATION环境变量选择Zenoh。

snapcraft.yaml中的重要更改如下所示:

base: core24
confinement: strict

parts:
  ros-demos:
    plugin: colcon
    source: https://github.com/ros2/demos.git
    source-branch: jazzy
    stage-packages:
      - ros-jazzy-rmw-zenoh-cpp
      - ros-jazzy-ros2run

apps:
  talker-router:
    command: opt/ros/jazzy/bin/ros2 run demo_nodes_cpp talker
    plugs: [network, network-bind]
    extensions: [ros2-jazzy]
    environment:
      RMW_IMPLEMENTATION: rmw_zenoh_cpp

ros2-jazzy扩展在snap内设置ROS 2环境。stage-packages条目添加rmw_zenoh_cpp,而RMW_IMPLEMENTATION在运行时告诉应用程序使用它。

这使通信选择保持在应用程序内部。开发者可以在一个工件中控制ROS 2版本、中间件包、环境和应用程序生命周期。然后,经过测试的相同包可以在开发系统和机器人之间移动,而无需在每个设备上重新构建。

该示例提供了两种运行模式:一种使用专用Zenoh路由器(talker-router/listener-router),另一种依赖多播 scout(talker/listener)。这种灵活性使开发者能够从工作站或机器人的紧凑一体化包开始,然后在通信架构扩展时演变为独立路由器服务,而无需更改应用程序。

将Zenoh路由器作为snap运行

路由器是基础设施,而基础设施需要稳定性。

zenohd snap将Zenoh路由器打包为命令和系统服务。它可以独立于使用它的ROS 2应用程序进行安装:

sudo snap install zenohd
sudo snap start --enable zenohd.daemon

服务安装时处于禁用状态,因此用户决定何时启用它。启用后,snapd像管理其他snap服务一样管理它。

路由器也可以作为终端命令运行:

zenohd [OPTIONS]

如果您计划通过CLI传递配置文件,请确保它位于严格受限的snap可访问的位置

snap会在其snap管理的目录下查找JSON5或YAML配置。默认的守护进程配置路径是:

/var/snap/zenohd/common/config.json5

上游参考配置记录了可用选项

更改后,重启服务:

sudo snap restart zenohd.daemon

snapcraft.yaml文件描述了守护进程和命令,供参考。

在云端部署路由器后,多个支持Zenoh的应用程序可以通过互联网进行通信。在此设置中,请考虑为Zenoh配置TLS身份验证

为现有ROS 2应用程序添加Zenoh

重新打包应用程序并不总是正确的起点。机器人可能已经运行多个使用DDS的ROS 2节点,或者团队可能希望在不更改这些节点的情况下引入Zenoh。

zenoh-bridge-ros2dds snap打包了上游Zenoh到DDS的ROS 2桥接器。zenoh-bridge-ros2dds snap将上游Zenoh桥接器打包用于ROS 2 over DDS。


关注微信号:智享开源 ,及时了解更新信息。

原文链接:https://ubuntu.com//blog/bring-zenoh-to-ros-2-with-snaps

评论列表

发表评论

你必须 登录 才能发表评论.

为您推荐


请支持IMCN发展!

谁在捐赠

微信捐赠 支付宝捐赠
微信捐赠 支付宝捐赠
ta的个人站点

发表文章4669篇

关注我的头条 不要放弃,百折不挠,坚强、自信。


扫码关注公众号:智享开源

最新科技信息


归档

近期评论