Slide 1

Slide 1 text

すべてが になる #びよ〜ん @takasehideki 第44回ロボティクス勉強会 2024/03/15

Slide 2

Slide 2 text

Hobby Recent R&D Affiliation Mission あらゆる モノ・コトと ヒトを繋げる 設計基盤の 確⽴ 最適化 設計技術 良いモノ を 誰でも楽に つくることができる世界へ 組込み/IoTコンピューティング基盤を⽀える プラットフォーム技術と設計⽅法論 @takasehideki ശ ఉ ϩʔΧϧ؀ڥ ηϯγϯά ̇ ̇ ̇ ө૾ Ի Թ౓ ࣪౓ ѹྗ ৼಈ Edge AI ޯ഑ܭࢉɾߋ৽ -PTT 8FJHIU ਪ࿦ ੍ޚ ΢ΣΞϥϒϧ σόΠεɾ ϔϧεέΞ ϩϘοτ ϞϏϦςΟ ೖྗ ग़ྗ ϑΟʔυ όοΫ Edge AI Edge AI Edge AI Edge AI Fog AI ू໿ ෼഑ ϩʔΧϧ؀ڥ Fog AI Edge AI Edge AI ϩʔΧϧ؀ڥ Fog AI Edge AI Edge AI Cloud MEC BEAM クラウド BEAM エッジ BEAM 最適配分アルゴリズム 透過型分散プラットフォーム BEAM システム開発者 デプロイされる コード ① ③ ② ③ ③ ❤ 評価アプリ ❤ 評価アプリ ④ ④ ❤ 評価アプリ ④ ② ② ❤ 評価アプリ ④ ② ② ② ②

Slide 3

Slide 3 text

24! ど こ で や る か な ! ? 発 表 内 容 は 今 か ら 考 え ま し ょ う ! •講演申し込み開始︓2024年4⽉1⽇ •講演申し込み締切︓2024年5⽉24⽇ •講演採択発表︓2024年7⽉10⽇ •参加登録開始︓2024年6⽉24⽇ •早期登録締切︓2024年8⽉9⽇ •事前登録締切︓2024年9⽉13⽇ •講習会︓2024年9⽉24⽇(⽕) •ROSCon JP 2024︓2024年9⽉25⽇(⽔) •会場︓ 東京都⽴産業貿易センター 台東館 https://roscon.jp/

Slide 4

Slide 4 text

4 Elixir本,発売ッ︕︕ https://www.amazon.co.jp/dp/4297140144

Slide 5

Slide 5 text

5 はじめに a.k.a おことわり • スライドの完成度はひくいです ;;( — 本発表の内容には takasehideki の独断と偏⾒で⾏っている 調査結果がたぶんに含まれておりまする かならず⼀次情報をご確認ください :- • 下記の発表のマージ&発展版です — 「なんしかいろいろつながるZenohの紹介」 @FA_Study#17 — 「ZenohのROS 2向け対応の現状と⽅向性」 @ROSJP#54 • まずはだまってこれをやっておく,,, (3.38 GB) — デモやってなんかあっても⾃⼰責任で,ってことでいい︖︖ docker pull takasehideki/zenoh_robosemi44_trial

Slide 6

Slide 6 text

6 あじぇんだ なんでもつかえる︕ よしなにしゃべれる︕ とにかくかるい︕ いろいろつながる︕

Slide 7

Slide 7 text

7 出版購読型通信 • Brokered (e.g., MQTT) — brokerがどこかを把握する必要アリ • Peer-to-Peer (e.g., DDS) — ⾃律的に通信相⼿を探索できる — 通常の適⽤範囲は同⼀ネットワーク内のみ • 嬉しさ — ⾮同期かつ疎結合なアーキテクチャを 形成しやすい — それぞれのノードが独⽴して動作する 追加/削除/再配置が容易 publisher1 publisher2 topicA topicB subscriber1 sub2 sub3 broker

Slide 8

Slide 8 text

8 https://zenoh.io/

Slide 9

Slide 9 text

• Zero Overhead Pub/Sub, Store/Query and Compute. — Zero network overhead protocol — ネットワーク内ではDDSライク, ネットワーク間ではMQTTライクな通信ミドルウェア — GitHub : https://github.com/eclipse-zenoh/ üEclipse Public License 2.0 and/or Apache 2.0 — 当初はOCaml実装,2020/10- 頃からRustに移⾏ • 開発主体︓ZettaScale Technology — CEO/CTO︓Angelo Corsaro さん — ADLINK(CycloneDDS開発主体)から独⽴︖ 9

Slide 10

Slide 10 text

10 • 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 なんでもつかえる︕

Slide 11

Slide 11 text

• Low latency and High throughput — 10 us latency in the single machine, 16 us in multiple machines (P2P config.) — ~70 Gbps at 8 KB payload ü35x higher than MQTT, 23x than Kafka, 3.3x than DDS • Why?: minimum wire overhead — only 5 bytes for delivering messages 11 https://zenoh.io/blog/2023-03- 21-zenoh-vs-mqtt-kafka-dds/ arxiv:2303.09419 とにかくかるい︕

Slide 12

Slide 12 text

12 QUIC, TLS, TCP, UDP Unicast, UDP Multicast IPv4, IPv6 6LoWPAN WiFi, Ethernet, Bluetooth, Serial APIs for various languages • zenoh-python • zenoh-c • zenoh-cpp • zenoh-java https://zenoh.io/docs/ getting-started/first-app/ Runs Everywhere! • zenoh-kotlin • zenoh-csharp • zenoh-go Getting Started with Python Native

Slide 13

Slide 13 text

• Zenohex = Zenoh + Elixir https://github.com/b5g-ex/zenohex Zenoh Protocol by Rust Erlang VM Elixir node1 Elixir node2 process Rustler github.com/rusterlium/rustler Rust謹製のZenoh APIを Elixir/Erlangから利⽤ Python node2 Erlangプロセスなので 軽量かつ堅牢︕︕ C++ node1 だったらElixirじゃね︖︖

Slide 14

Slide 14 text

14 なんしか Elixir!! 2012年に登場した新しめの関数型⾔語 BEAM (Erlang VM) 上で動作 • ⾼い並⾏/並列性能を誇る • 軽量かつ頑強なプロセスモデル • 耐障害性が極めて⾼い Rubyを基にした⾔語設計 • 習得しやすく⽣産性が向上する • 通信応答性能が極めて⾼い • Web/IoT/AI FW. を備える Programming should be about transforming data .1 1 ( 0 ) . .1 ) 11 .1 ) ) &0 1(. &0 1 Elixir Zen Style Ø データフローと並列処理を Enum Flow |> で直感的に記述できる ※各⾔語・フレームワークのロゴの権利は それぞれの作成者に帰属しています

Slide 15

Slide 15 text

15 とりま いごかしてみん︖ 論よりRUN!! "ron yori run" The RUN is mightier than the word

Slide 16

Slide 16 text

16 DEMO a.k.a Your Trial 1 • 下準備 docker run -it -w /root --name zenoh_trial takasehideki/zenoh_robosemi44_trial git clone https://github.com/takasehideki/zenoh_trial && cd zenoh_trial cd zenoh_native && cargo build cd ../zenoh_elixir && mix deps.get && mix compile • Letʼs talk in Container!! 最初はすべて cd ~/zenoh_trial/zenoh_native ./target/debug/sub cd ~/zenoh_trial/zenoh_native ./target/debug/pub cd ~/zenoh_trial/zenoh_python python3 sub.py cd ~/zenoh_trial/zenoh_python python3 pub.py cd ~/zenoh_trial/zenoh_elixir iex -S mix iex()> ZenohElixir.Sub.main cd ~/zenoh_trial/zenoh_elixir iex -S mix iex()> ZenohElixir.Pub.main docker exec -it zenoh_trial /bin/bash

Slide 17

Slide 17 text

17 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 いろいろつながる︕ • Zenoh router behaves as a broker between networks • We can construct a wide area network structure easily!

Slide 18

Slide 18 text

18 ElixirでIoT!! しらんけど,,, 論よりRUN!! "ron yori run" The RUN is mightier than the word

Slide 19

Slide 19 text

19 論よりRUN!! "ron yori run" The RUN is mightier than the word DEMO2: over the network Rust Native Subscriber Elixir Zenohex Publisher Zenoh router (zenohd) Phoenix + Zenohex application Zenoh router (zenohd) :7447/tcp :4000/tcp ①Local ← Global ②Local → Global Phoenix on Azure VM your PC

Slide 20

Slide 20 text

20 DEMO a.k.a Your Trial 2 • 下準備(ちゃんとDEMO1のやつやっといてくれ;;( — ブラウザで http://zenoh-robosemi44-trial.japaneast.cloudapp.azure.com:4000 を開く docker exec -it zenoh_trial /bin/bash zenohd -e tcp/zenoh-robosemi44-trial.japaneast.cloudapp.azure.com:7447 • Letʼs talk in Container!! — DEMO1の他のともしゃべれるで︖︖ — みんなでしゃべれるんか︖︖︖(たぶん docker exec -it zenoh_trial /bin/bash cd ~/zenoh_trial/zenoh_native ./target/debug/sub docker exec -it zenoh_trial /bin/bash cd ~/zenoh_trial/zenoh_elixir iex -S mix iex()> ZenohElixir.Pub.main • わしのめも zenohd cd zenohex_phoenix_demo MIX_ENV=prod mix phx.server

Slide 21

Slide 21 text

• https://github.com/eclipse-zenoh/zenoh-pico — Cで再実装した組込み向け軽量Zenoh — PlatformIO で各種PF/RTOS/ボード向けに対応 — かなりええ感じの性能が出ているらしい https://zenoh.io/blog/2022-02-08-dragonbot/ 21 閑話休題︓組込みマイコンでも︕

Slide 22

Slide 22 text

22 よしなにしゃべれる︕

Slide 23

Slide 23 text

23 そして 界隈では,,, https://discourse.ros.org/t/ros-2- alternative-middleware-report/33771

Slide 24

Slide 24 text

24 つまり,こうなる︕(はず) … … 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が追加される ユーザアプリ/クライアントライブラリの レベルでは影響なし

Slide 25

Slide 25 text

25 ros2/rmw_zenoh • ROS 2がZenohでつながる —現状の対象は Iron/Rolling もちろん Jazzy にも rolling 予定︕ —開発主体 (Organization)︓ros2 <- ATOLabs (ZettaScale) ütransferred ownership in Sep 2023, but soon Initial commit from scratch;( —maintainers: üYadunund Vijay (@Yadunund Iron ROS Boss) üChris Lalancette (@clalancette ROS 2 Technical Lead)

Slide 26

Slide 26 text

26 ros2/rmw_zenoh • メカニズム —zenoh-c (C API for Zenoh) の binding として実装 階層︓RMW(C++) |> API(C) |> Zenoh(Rust) —ROS 2 node = Zenoh Session Zenoh Router で discovery |> P2P で pub/sub ü現状は Router の⽴ち上げが必須(将来的には不要に︖) • できること — Topic, Service — basic QoS [PR#91] —limited ros2cli • WiP/できないこと — Events [PR#103] — DDSノードとの通信 — and so on,,,

Slide 27

Slide 27 text

27 ほんまかいな︕︖ 論よりRUN!! "ron yori run" The RUN is mightier than the word

Slide 28

Slide 28 text

28 DEMO a.k.a Your Trial 3 • 下準備(DEMO2はいったんとめといてくれ:( — ブラウザで http://zenoh-robosemi44-trial.japaneast.cloudapp.azure.com:4000 を開く source /opt/ros/rolling/setup.bash mkdir ~/ws_rmw_zenoh/src -p && cd ~/ws_rmw_zenoh/src git clone https://github.com/ros2/rmw_zenoh.git cd ~/ws_rmw_zenoh colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release • Letʼs talk in Container!! — Zenoh ルータの⽴ち上げ docker exec -it zenoh_trial /bin/bash source ~/ws_rmw_zenoh/install/setup.bash ros2 run rmw_zenoh_cpp rmw_zenohd docker exec -it zenoh_trial /bin/bash source ~/ws_rmw_zenoh/install/setup.bash export RMW_IMPLEMENTATION=rmw_zenoh_cpp ros2 run demo_nodes_cpp listener docker exec -it zenoh_trial /bin/bash source ~/ws_rmw_zenoh/install/setup.bash export RMW_IMPLEMENTATION=rmw_zenoh_cpp ros2 run demo_nodes_cpp talker

Slide 29

Slide 29 text

あれっこの話しは︖ ROSJP#53「ROSCon 2023参加報告︓Real-Time Workshop & Zenohʼs Current Status and Forecast」 https://speakerdeck.com/takasehideki/roscon-2023can-jia-bao- gao-real-time-workshop-and-zenohs-current-status-and-forecast https://www.youtube.com/watch?v=TZaYVL8xeBs&t=2426s

Slide 30

Slide 30 text

30 zenoh-plugin-ros2dds • ZenohでROS 2がつながる —zenoh-plugin-dds から派⽣ —より ROS 2 フレンドリーに︕ —plugin: router にロードして使う —bridge: スタンドアロンで動作する —maintainers: üJulien Enoch (@JEnoch Senior Solutions Architect at ZettaScale)

Slide 31

Slide 31 text

31 • インストール — GitHub Releases からダウンロードしちゃうほうが楽かも,,, • 実⾏例(今⽇はパス) — Zenoh ブリッジの⽴ち上げ echo "deb [trusted=yes] https://download.eclipse.org/zenoh/debian-repo/ /" | sudo tee -a /etc/apt/sources.list > /dev/null sudo apt install zenoh-plugin-ros2dds sudo apt install zenoh-bridge-ros2dds export RMW_IMPLEMENTATION= export ROS_DOMAIN_ID=2 zenoh-bridge-ros2dds export RMW_IMPLEMENTATION= export ROS_DOMAIN_ID=2 ros2 run demo_nodes_cpp talker export RMW_IMPLEMENTATION= export ROS_DOMAIN_ID=4 ros2 run demo_nodes_cpp listener zenoh-plugin-ros2dds export RMW_IMPLEMENTATION= export ROS_DOMAIN_ID=4 zenoh-bridge-ros2dds

Slide 32

Slide 32 text

32 うせやろ︖︖ ほんならくらうどともいけんちゃう︖︖ 論よりRUN!! "ron yori run" The RUN is mightier than the word

Slide 33

Slide 33 text

33 DEMO a.k.a Your Trial 4 • 下準備 — DEMO2とDEMO3もとめといてくれ:( • Letʼs talk in Container!! — みんなでいごかせれるんか︖︖︖(たぶん docker exec -it zenoh_trial /bin/bash source /opt/ros/rolling/setup.bash zenoh-bridge-ros2dds -e tcp/4.190.12.95:7447 docker exec -it zenoh_trial /bin/bash source /opt/ros/rolling/setup.bash ros2 run turtlesim turtle_teleop_key • わしのめも source /opt/ros/rolling/setup.bash zenoh-bridge-ros2dds -l tcp/0.0.0.0:7447 source /opt/ros/rolling/setup.bash ros2 run turtlesim turtlesim_node

Slide 34

Slide 34 text

34 まとめると,,, • ROS 2がZenohでつながる • 最⾼なのでは︖︖ • ZenohでROS 2がつながる • 最強なのでは︖︖ https://youtu.be/wXzVXhLEUjQ https://projects.eclipse.org/projects/iot.zenoh/releases/1.0.0

Slide 35

Slide 35 text

35 Thank you! merci!! Arigato!!! @takasehideki A part of this work is supported by the commissioned research (04001) by National Institute of Information and Communications Technology (NICT), Japan.