Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ROS 2のZenoh対応とZenohのROS 2対応

takasehideki
September 25, 2024

ROS 2のZenoh対応とZenohのROS 2対応

ROSConJP 2024
2024/09/25
https://roscon.jp/2024/

タイトル:ROS 2のZenoh対応とZenohのROS 2対応
概要:
2023年9月にROS 2 Alternative middleware reportが公開され,DDS以外では初となる公式のRMWサポート対象としてZenohが最も適しているという結論はROSコミュニティに凄まじい反響を呼んだ.この「ROS 2のZenoh対応」であるrmw_zenohの開発は順調に進行しており,JazzyではPreview版での公開に至っている.他方で「ZenohのROS 2対応」であるzenoh-plugin-ros2ddsも進化を遂げており,の開発も進んでおり,ともにROS 2エコシステムの成長を後押ししている.本講演では,いちユーザの視点から,これらのOSSの最新の開発状況を共有し,双方のメリットや使いどころを整理したい.

デモの動作手順:
https://github.com/takasehideki/rosconjp24_demo

takasehideki

September 25, 2024
Tweet

More Decks by takasehideki

Other Decks in Programming

Transcript

  1. Hobby Recent R&D Affiliation https://discourse-cdn-sjc1.com/standard/uploads/ros/original/1X/4a43b86081b214cff55280de763dbc2f3a445189.png Mission あらゆる モノ・コトと ヒトを繋げる 設計基盤の

    確⽴ 最適化 設計技術 良いモノ を 誰でも楽に つくることができる世界へ 組込み/IoTコンピューティング基盤を⽀える プラットフォーム技術と設計⽅法論 @takasehideki MEC BEAM クラウド BEAM エッジ BEAM 最適配分アルゴリズム 透過型分散プラットフォーム BEAM システム開発者 デプロイされる コード ① ③ ② ③ ③ ❤ 評価アプリ ❤ 評価アプリ ④ ④ ❤ 評価アプリ ④ ② ② ❤ 評価アプリ ④ ② ② ② ②
  2. 4 Agenda • 本発表の目的 −ROS 2エコシステムの成長を促進する2者のOSSプロジェクトについて, 最新の開発状況を 日本語で 発信する −双方のメリットや使いどころを整理してこれらを共有する

    −日本からの情報発信や各OSSプロジェクトへの貢献機会を増やす • 発表の内容と流れ − とはなにか? − の 対応:eclipse-zenoh/zenoh-plugin-ros2dds − の 対応:ros2/rmw_zenoh
  3. Peer to Peer Clique Mesh Brokered Routed Peer Peer Peer

    Peer Peer Peer Peer Peer Peer client client Router Router Router client client client client client client Router Router • Zero Overhead Pub/Sub, Store/Query and Compute. −Zero network overhead protocol −ネットワーク内ではDDSライク,ネットワーク間ではMQTTライクな通信方式 −開発主体: ZettaScale Technology / GitHub : eclipse-zenoh/zenoh • 5つのポイント ① とにかくかるい! ② なんでもつかえる! ③ いろいろつながる! ④ よしなにしゃべれる! ⑤ どこでもいごく! 5 https://zenoh.io/blog/2023-03-21-zenoh-vs-mqtt-kafka-dds/ • Pub / Sub (Push) - basic pub/sub method • Pub / Sub (Pull) - Sub receives in its own timing • Pub / Store / Get - KVS based computation • Get / Reply - RPC-like communication node node node node node node node node Pub Sub(callback) Sub(Pull) Pub Pub Get Reply Pull https://connpass.com/event/304464/presentation/
  4. 6 プログラミングモデル • Resource −(key, value)ペアの名前付けされたデータ −例:home/kitchen/sensor/temp, 21.5 home/kitchen/sensor/humi, 0.67

    • Key expression −keyの集合表現 * $* ** で指定可能 −例:home/kitchen/sensor/* home/**/temp • Selector −resource 集合を特定する表現 −例:home/*/sensor/air?_where=co2> 12&_project=humidity • zenoh::open() / session.close() −zenohセッションを開始/終了する −引数等でネットワーク構成を指定する • session.put() −key, value のペアを1回出版 • session.declare_publisher() −出版者として宣言する • session.declare_subscriber() −購読者として宣言する −recv_async().await するか購読時に 実行されるコールバック関数を指定する
  5. 7 ネットワークモデル • Peer −Zenohノードとしての基本形式 −ローカルネットワーク内では通信相手を自律的に探索できる (like DDS) • Client

    −ルータを介して通信する構成 • Router (zenohd) −通信を仲介するモジュール −JSONで様々な構成を設定できる • Scouting: 通信相手の探索方法 −multicast:ネットワーク内を自律的に探索 (via 224.0.0.224:7446) −gossip:routerのIPとポート番号(7447)を指定
  6. • ZettaScale CEO/CTO直伝!Zenoh完全理解セミナー! @2023/12/19 −スライド資料 −YouTubeアーカイブ • speakerdeck.com/takasehideki −なんしかいろいろつながるZenohの紹介 @FA_Study#17

    2024/02/03 −ZenohのROS 2向け対応の現状と方向性 @rosjp#54 2024/02/09 −すべてが #Zenoh になる @robosemi#44 2024/03/15 −すべてが #Zenoh になる 〜柔軟にして軽量〜 @SWEST24 2024/08/30 −Zenohex完全に理解した(しらんけど:D @daimon.ex 2024/07/19 ✓ YouTubeアーカイブ 8 詳しくは??
  7. 9 • ZenohでROS 2がつながる −ROS 2/DDSのメッセージをZenohで橋渡し ✓主たる開発/サポート対象は CycloneDDS ✓現在の最新版は 1.0.0-beta.3

    −zenoh-plugin-dds から派生して より ROS 2 フレンドリーに! ✓plugin: router にロードして使う ✓bridge: スタンドアロンで動作する • core maintainer −Julien Enoch (@JEnoch at ZettaScale) の 対応
  8. 10 • 主な使用方法 −ネットワークの適切な設定 (強く推奨) ✓ ROS_LOCALHOST_ONLY=1 やシステムごとの ROS_DOMAIN_ID の設定

    など ✓ トラフィックの重複やループバックを抑止するため −双方での zenoh-bridge-ros2dds の起動 ✓ DOMAIN_ID 内のノードとトピック等を検出 ✓ 片方からはエンドポイントのIPアドレスを指定 • ユースケース −異なる ROS_DOMAIN_ID での相互接続 +特定トピックの allow or deny −NAT越え:別ネットワーク同士の接続 の 対応
  9. 11 の 対応 ローカル側 クラウド側 zenoh-bridge- ros2dds on local allowed

    topics allowed topics turtlesim zenoh-bridge- ros2dds on cloud not allowed (denied) topics
  10. 13 の 対応 … … rclcpp rclpy node.cpp node.py RCL

    (ROS Client Library) RMW (ROS MiddleWare) DDS B DDS A General Purpose OS rclrs node.rs Zenoh DDSと同じようにZenohを 選択できるようになる DDSと同じレイヤに Zenohが追加される (現時点ではDDSノードとの 相互通信は未対応) ユーザアプリ/クライアントライブラリの レベルでは影響なし つまり, こうなる!
  11. 14 • ROS 2がZenohでつながる −DDS以外では初の公式のRMWサポート対象 −Jazzy では preview 対応に ✓Rolling/Iron

    もサポート対象として開発中(Humble 以前は対象外) ✓現状では git clone && colcon build が必要 ✓とはいえ,今からすぐに試せる! • core maintainers −Yadunund Vijay (@Yadunund Iron ROS Boss) −Chris Lalancette (@clalancette ROS 2 Technical Lead) の 対応
  12. 15 • 実装の仕組み −zenoh-c (C API for Zenoh) の binding

    として実装 ✓ 階層:RMW(C++) |> Zenoh-API(C) |> Zenoh(Rust) ✓ Zenoh Router はC++で(再)実装 −基本は Zenoh Router で discovery |> P2P で pub/sub • 主な使用方法 − ✓ デフォルトでは router の起動が必要(将来的には不要に?) − の 対応 $ colcon build $ source ~/ws_rmw_zenoh/install/setup.bash $ ros2 run rmw_zenoh_cpp rmw_zenohd $ source ~/ws_rmw_zenoh/install/setup.bash $ RMW_IMPLEMENTATIION=rmw_zenoh_cpp ros2 run … 発表時の記載に 誤りがありました ご容赦ください
  13. 16 • ネットワーク構成のカスタマイズ −デフォルトでは Gossip Scouting による探索 −環境変数 ZENOH_{ROUTER,SESSION}_CONFIG_URI で

    任意の構成(JSONファイル)を指定できる ✓ デフォルト構成:rmw_zenoh_cpp/config/*.json5 • multicast scoutingへの変更 の 対応 $ export ZENOH_ROUTER_CHECK_ATTEMPTS=-1 scouting: { multicast: { enabled: true, … }, }, • 複数ホスト間での接続 connect: { endpoints: [”tcp/192.168.1.1:7447”], }, マルチホスト間を接続できる! もちろんクラウドとも!
  14. 17 の 対応 zenoh router (zenohd) pub node by gossip

    (default) pub node by multicast sub node by gossip (default) sub node by multicast
  15. 18 の 対応 ローカル側 クラウド側 customized zenoh router to comm.

    cloud teleop on local with rmw_zenoh turtlesim on cloud with rmw_zenoh zenoh router on cloud
  16. 19 • RMWの性能を基礎的かつ暫定的に比較評価してみた −Raspberry Pi 5 8GB / Ubuntu Server

    24.04.1 LTS ✓1デバイスのみでの試行 −apt install ros-rolling-desktop @2024/09/13 −rmw_zenoh @rolling:aa69da9 ✓デフォルトのネットワーク構成での実行 • 用いたベンチマーク −ApexAI/performance_test:シンプルなPub/Sub −irobot-ros/ros2-performance:より複雑なトポロジ構成 2024年9月時点の暫定的な実装に対する評価に基づいており,傾向は今後大きく変わりうる可能性が高いです. また,あくまで発表者による私的な試行結果であり,あらゆる団体を代表しない非公式の情報です. の 対応
  17. 20 • ApexAI/performance_test:シンプルなPub/Sub −“latency_mean (ms)” の値を集計 出版周期:100 Hz rclcpp-single-threaded-executor (default)

    QoS:BEST_EFFORT, VOLATILE, KEEP_LAST 16 (default) 小メッセージでは FastDDS より優位?ただし CycloneDDS ほどではない? の 対応 2024年9月時点の暫定的な実装に対する評価に基づいており,傾向は今後大きく変わりうる可能性が高いです. また,あくまで発表者による私的な試行結果であり,あらゆる団体を代表しない非公式の情報です.
  18. 21 • irobot-ros/ros2-performance:より複雑なトポロジ構成 −“latency_total / mean_us” の値を集計 計測時間:100秒 QoS:設定項目なし SingleThreadedExecutor

    大規模なシステムでは Zenoh の通信性能が発揮される可能性が出てくる? の 対応 2024年9月時点の暫定的な実装に対する評価に基づいており,傾向は今後大きく変わりうる可能性が高いです. また,あくまで発表者による私的な試行結果であり,あらゆる団体を代表しない非公式の情報です. トポロジは同じ 実行形式が異なる
  19. 23 まとめにかえて • zenoh_bridge_ros2dds を選ぶべき状況! −DOMAIN をまたがるトピックを選別したい −Humble 以前のシステムでさくっとNATを越えたい •

    rmw_zenoh を選ぶべき状況! −discovery やネットワーク構成を(Wi-Fi環境下でも)簡易化したい −IoT/広域分散向けの処理で ROS 2 ecosystem を活用したい • でもやっぱり DDS を使いたい!(これはこれで正義) −Tier 1 の品質保証は重視したい (とはいえ,いずれ rmw_zenoh も,,,) −きめ細かく QoS を制御したい だからこそ!!
  20. 26 Thank you! merci!! Arigato!!! @takasehideki A part of this

    work is going as collaborative research with SoftBank Corp., and is supported by JST, CREST Grant Number JPMJCR21D2, Japan.