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

(Beyond 5G時代の) ROS for IoTで使えそうなクライアントライブラリ

91b03a57e0ef56fee59fbddc66a7f6fd?s=47 takasehideki
February 12, 2022

(Beyond 5G時代の) ROS for IoTで使えそうなクライアントライブラリ

IoT ALGYAN 【オンライン】ROS x IoT ってどうなのよ2022
@ 2022/02/12
https://algyan.connpass.com/event/236150/

91b03a57e0ef56fee59fbddc66a7f6fd?s=128

takasehideki

February 12, 2022
Tweet

More Decks by takasehideki

Other Decks in Programming

Transcript

  1. @takasehideki (Beyond 5G時代の) ROS for IoTで使えそうな クライアントライブラリ

  2. 2 ⾃⼰紹介 本務・兼務 — 東京⼤学 情報理⼯学系研究科 准教授 — JSTさきがけ 兼任研究者

    — 理研R-CCS 客員研究員 — ⼀般社団法⼈ROSCon JP 理事 — TOPPERSプロジェクト 運営委員 学会活動 — IPSJ-SIGEMB 運営幹事 — IEICE-RECONF 専⾨委員 — SWEST ステアリング委員 コミュニティ活動 — ROS Japan Users Group — IoT ALGYAN (あるじゃん) 運営委員 — NervesJP : Elixir for IoT @takasehideki ശ ఉ
  3. ROS Japan Users Group • Discourse: https://discourse.ros.org/c/local/japan • connpass: https://rosjp.connpass.com

    —勉強会・講習会など 初⼼者から歴戦の猛者まで︕ —関⻄や瀬⼾内・九州でも開催︕ —メンバー数 2,307名 @2022/02/11 üSlack: rosjp üTwitter: #rosjp 3 来週開催︕10周年︕︕
  4. 4 2022/10/19(⽔) 開催決定︕︕

  5. … … 5 rclcpp rclpy node.cpp node.py RCL (ROS Client

    Library) RMW (ROS MiddleWare) DDS B DDS A General Purpose OS • 共通の基盤機能を提供 • C⾔語による実装 • 任意の⾔語から呼び出して そのライブラリを開発可能 • DDS通信機能を抽象化するAPI層 • 複数のDDS実装から選択可能 rclrs node.rs DDS C DDS (Data Distribution Service) • OMG標準仕様として規定 • 出版購読型の通信機能を提供 • RTPSによる通信相⼿の⾃動探索 ソフトウェアの階層構造 [再掲]
  6. Client Library for,,, Rclex 6 rclcpp rclpy node.cpp node.py node.ex

    RCL (ROS Client Library) RMW (ROS MiddleWare) DDS B DDS A General Purpose OS rclrs node.rs DDS C RTOS RTPS mROS 2 Library mros2 node.cpp
  7. agent-less and lightweight runtime environment for embedded devices

  8. EMB GPC serial server 8 昔話︓ROS 1の通信⽅式と組込み対応 master node node

    process node serial xmlrpc tcpros tcpros   mbed TOPPERS/ASP  mROS      ※GPC: General Purpose Computer EMB: Embedded micro-computer
  9. 9 そして時代は に!! micro-ROS GPC agent master node node client

    node dds-xrce rtps rtps m • RTPS︓DDSの通信プロトコル — SPDP/SEDP︓⾃律的に通信相⼿と 通信経路を探索/確⽴ • micro-ROS︓ROS 2の組込み対応 — POSIX準拠の複数のRTOSをサポート — Micro-XRCE-DDS を利⽤ ØRTPS通信の仲介に agent が必要 agent無⽤で ROS 2通信︕ Participant_A SPDP Endpoint Writer Reader SEDP Endpoint RTPS Endpoint HistoryCache Writer Reader Publisher Subscriber Topic_1 Topic_2 P_E W_E R_E W_E R_E P_E S_E T_3 P_D W_D R_D W_D R_D P_D S_D T_2 T_3 P_C W_C R_C W_C R_C P_C S_C T_1 T_2 P_B W_B R_B W_B R_B P_B S_B P_A C 1 D 2 B 2 W_E R_E W_E W_D R_D W_D R_D P_D T_2 W_C R_C W_C R_C T_2 W_B R_B W_B R_B P_B S_B P_A T_1 T_2 P_B T_2 P_A T_1 T_2 P_C T_1 P_A T_1 T_2 P_D T_3 T_2 P_A T_1 T_2 P_E T_3
  10. 10 • mROS 2 API & comm. lib. —rclcpp にサブ準拠のAPIを提供

    —pub/sub通信の基本機能を提供 ü任意型のメッセージ通信に対応中︕︕ • DDS/UDP: embeddedRTPS — C++による組込み向けのRTPS軽量実装 — lwIP, Micro-CDR, FreeRTOS(?) を利⽤ — FastDDS 2.3.1との疎通確認済み • RTOS: (ひとまず)TOPPERS/ASP3 —Mbed OS, POSIXに対応中︕︕ agent無⽤のROS 2軽量実⾏環境 mROS-base/mros2 Embedded devices (STM32 MCU) HAL library (STM32Cube) RTOS (TOPPERS/ASP3) mROS 2 application mROS 2 comm. lib. mROS 2 API UDP stack (lwIP) (CMSIS-RTOS API) RTPS (embeddedRTPS)
  11. 11 Getting started!! $ git clone --recursive ¥ https://github.com/mROS-base/mros2-asp3-f767zi $

    cd mros2-asp3-f767zi/workspace $ make app=echoreply_string mROS-base/mros2
  12. 12 予備的評価 on v0.1-rc • 各モジュールの性能 — GPC: Raspberry Pi

    3B (1) üCA53 1.2GHz x4, 1GB SDRAM üUbuntu 18 & ROS 2 Dashing — EMB: STM32 NUCLEO-F767ZI üCM7 216MHz, 512KB SRAM a. micro-ROS with NuttX (2) (3) b. mROS 2 with ASP3 (4) • 評価対象: RTT (round trip time) for echo back of Int32 msg — 1秒間隔で200回測定 • 評価環境・通信関係 RPi3 B micro-ROS RPi3 A agent host node client node agent (1) (3) (2) (4) m mROS-base/mros2
  13. 予備的評価 on v0.1-rc • 評価結果 • 評価環境・通信関係 (1) (2) (3)

    (4) RTT [usec] 0 500 1000 1500 2000 2500 3000 3500 (1) (2) (3) (4) RTT [usec] 0 500 1000 1500 2000 2500 3000 3500 (1) (2) (3) (4) RTT [usec] 0 500 1000 1500 2000 2500 3000 3500 (1) (2) (3) (4) RTT [usec] 0 500 1000 1500 2000 2500 3000 3500 RPi3 B micro-ROS RPi3 A agent host node client node agent (1) (3) (2) (4) m mROS-base/mros2
  14. 14 Ubuntu20 on RPi4 pub /to_stm Ubutu18 on laptop sub

    /to_linux mROS 2 on STM32 sub /to_stm & pub /to_linux /to_stm /to_linux
  15. ROS 2 Client Library for Elixir

  16. 16 Elixir とは︖ 2012年に登場した新しめの関数型⾔語 Erlang VM上で動作 • ⾼い並⾏/並列性能を誇る • 軽量かつ頑強なプロセスモデル

    • 耐障害性が極めて⾼い Rubyを基にした⾔語設計 • 習得しやすく⽣産性が向上する • レスポンス性能が極めて⾼い • Web/IoT/AIライブラリを備える Programming should be about transforming data                   Elixir Zen Style Ø データフローと並列処理を Enum Flow |> で直感的に記述できる ※各⾔語・フレームワークのロゴの権利は それぞれの作成者に帰属しています
  17. Elixirの気持ちよさ ダッシュ ボード Link Super Visor one_for_one App 液晶 データ

    ロガー Link センサ 監視 制御 Link ボタン {:ok, ref} = Circuits.I2C.open(@i2c_bus) Circuits.I2C.write(ref, @i2c_addr, <<0xBE, 0x08, 0x00>>) Circuits.I2C.write(ref, @i2c_addr, <<0xAC, 0x33, 0x00>>) {:ok, val} = Circuits.I2C.read(ref, @i2c_addr, 7) <<_state::8, raw_humi::20, raw_temp::20, _crc::8>> = val 17 • (やや)強い動的型付け — データ構造にイミュータブル性を持つ • アクターモデルに基づく並⾏処理 — モノ同⼠がメッセージ交換しながら進⾏ — 疎結合かつ⾮同期な並⾏処理モデル • メモリ軽量かつ堅牢なプロセスモデル — プロセス単位でのメモリ管理と障害復旧 — 処理のモジュール化と制御の抽象化 • バイナリ操作とパターンマッチ スキップ 予定
  18. • ElixirによるIoTフレームワーク — 極⼩規模のファームウェア (~>30 MB) — 堅牢性の⾼いファイルシステム — 機能の取捨選別が容易

    (Buildrootの利⽤) — OTAサービスが標準機能として提供 • Elixirの⾔語機能との完全な互換性 — アクターモデルで並⾏処理ができる — IoT向けになにか気にする必要がない — 有⽤なライブラリとツールが揃っている Ø ⽇本初!?のNerves搭載製品 → Pocket LANcher Bootloader A Linux kernel (Buildroot) Master Boot Record Root Filesystem A (Read-only) Application Data (Read-Write) C libraries Erlang VM Bootloader B Root Filesystem B (Read-only) C libraries Erlang VM CQ出版Interface 2020年6⽉号〜 2021年1⽉号 18
  19. 19 ROS開発になぜ Elixir なのか︖ ロボットは 「組合せ型開発」 デバイス制御と 知的処理がキモ ROSの本質は 通信にあり

    壊れてなんぼ でも壊れたら困る node1 node2 node3 node4 Topic1 Topic2 node5 出版(Publish) 購読(Subscribe) msg msg msg msg {:ok, ref} = I2C.open(@i2c_bus) I2C.write(ref, @i2c_addr, <<0xBE, 0x08, 0x00>>) I2C.write(ref, @i2c_addr, <<0xAC, 0x33, 0x00>>) {:ok, val} = I2C.read(ref, @i2c_addr, 7) <<_state::8, raw_humi::20, raw_temp::20, _crc::8>> = val ダッシュ ボード Link Super Visor one_for_one App 液晶 データ ロガー Link センサ 監視 制御 Link ボタン ロボットプログラミングは「関数型」だ︕︕
  20. 20 Rclex による出版ノードの実装例 github.com/rclex ノード数 インデックス付きの 名前でノードを⽣成 トピックの作成 :single->1つのトピック :multi->

    複数のトピック callback関数と タイマ周期の設定 ノードごとの メッセージを リストで⽤意 データ出版 パイプ演算⼦で ノード設定の処理 Enumによる データ加⼯
  21. sub.ex sub.ex sub.ex sub.ex sub.ex github.com/rclex pub.ex pub.ex pub.ex pub.ex

    pub.ex 21 Rclex の強みと実現できること ØElixirアプリからErlangプロセスを同時に⼤量⽣成させる Ø出版購読の通信処理とコールバックを⾮同期に実⾏する 軽量プロセスの並⾏処理によって ROS 2の通信スケーラビリティを向上させる pub.ex sub.ex topic pub.ex pub.ex pub.ex sub.ex sub.ex sub.ex pub.ex sub.ex topic pub.ex sub.ex topic pub.ex sub.ex topic pub.ex sub.ex topic pub.ex sub.ex topic
  22. RCL RMW DDS 22 OS process space rclcpp node1 Erlang

    VM rclex node1 rclex node2 process exec. mngr. process pub1 process sub2 process pub2 ... NIFs github.com/rclex ErlangリソースオブジェクトとRCLの構造体を 相互に変換してRCL APIを呼び出す Rclexのpub/sub機能を管理する (GenServerによる実装) rclpy node2 rcl.so Erlangの軽量プロセスとして Rclexノードを⽣成する ü 起動時間︓数マイクロ秒 ü メモリ︓およそ300ワード Rclex の内部実装
  23. github.com/rclex 論よりRUN!! 😇 😆 pub.cpp x100 (by launch.py) sub.cpp (demo_nodes_cpp)

    pub.ex x100 sub.cpp (demo_nodes_cpp) rclex/rcjp21_demo RPi4 (CA-72 1.5GHz x4/4GB) with ROS2 Foxy "ron yori run" The RUN is mightier than the word
  24. 24 github.com/rclex つまりこんなことに︕(しらんけど:D • ROS開発者にとっては︖ —通信性能/スケーラビリティが向上︕ —Elixir/Erlang のエコシステムが活⽤できる • Elixir開発者にとっては︖

    —ROSの豊富なOSSが活⽤できる︕ MAY THE BEAM BE WITH YOUR ROBOT!! [pic]https://aliexpress.com/ item/32604221183.html ※各⾔語・フレームワークのロゴの権利は それぞれの作成者に帰属しています
  25. /cmd_vel /pose Node.connect()

  26. MEC BEAM クラウド BEAM エッジ BEAM 最適配分アルゴリズム 透過型分散プラットフォーム BEAM システム開発者

    デプロイされる コード ① ③ ② ③ ③ ❤ 評価アプリ ❤ 評価アプリ ④ ④ ❤ 評価アプリ ④ ② ② ❤ 評価アプリ ④ ② ② ② ②
  27. 27 IoTの従来構成と5G時代の到来 地域IP網 =フレッツ網 コア網= インターネット網 携帯電話網 =LTE(4G) クラウド クラウド

    クラウド ⾃営網 ネットワーク装置(ルータ) サーバ (有線)キャリアネットワーク 携帯ネットワーク 総務省|情報通信審議会|情報通信審議会 情報通信技術分科会 新世代モバイル通信システム委員会(第10回) https://www.soumu.go.jp/main_sosiki/joho_tsusin/policyrep orts/joho_tsusin/5th_generation/02kiban14_04000608.html クラウド ⇔ エッジデバイスの主従関係 クラウドベンダ/通信キャリアによる 広域分散通信網の専従的な構成
  28. 28 5Gの⾰新技術︓local 5GとMEC ローカル5Gとは | 社会システム事業 | 東芝インフラシステムズ株式会社 https://www.toshiba.co.jp/infrastructure/social/telecom munication/local5g/about-5g.htm

    【第1回】MECとは – 次世代MEC試験環境「Beyond-MEC」 https://www.docomo-bmec.com/archives/50/ 特定エリアでの⾃営の5Gネットワーク 独⾃の通信特性で構築可能 通信網の間に計算資源を配置可能 応答性の向上とセキュアな通信を提供 広域分散通信網の "⺠主化" が始まっている
  29. 29 そして時代はBeyond 5Gへ,,, 総務省|報道資料|「Beyond 5G推進戦略 -6Gへのロードマップ-」の公表 https://www.soumu.go.jp/menu_news/s -news/01kiban09_02000364.html • 5Gの本質は「超多数同時接続」

    —新たな価値創造の要となりうる — 1:1 から 1:N / N:N の通信構成へ — ⼤量のあらゆる計算機がいつでも接続 • B5Gの新機軸は「拡張性」「⾃律性」 — 処理ノードが必要に応じて互いに連携 — 階層化された計算資源を必要に応じて活⽤ — 超並列︓互いに独⽴して相互に稼働・ シームレスに通信接続 このような超並列分散処理を どうやって実現するのか︖
  30. 30 でも,IoT"システム"をつくるには︖ • 主体がバラバラ — エンドユーザ,MNO,ISP,クラウド事業者,,, • 性能がバラバラ — Arm

    M 〜 Raspberry Pi / GPU, FGPA, TPU / Intel, Ryzen 〜 Xeon 〜 富岳 • ネットワーク品質・性能がバラバラ — 到達性,RTT,,, • APIがバラバラ — そもそもAPIはあるのか 5G/B5G時代を超えていく コンピューティング技術を開拓する
  31. 31 関数型パラダイムで実現するB5G時代の 資源透過型広域分散コンピューティング環境 ︓最適配分アルゴリズム ︓IoTノードの計算資源 ︓資源透過型の分散処理プラットフォーム ① ︓IoTノードの能率的な実⾏環境 ② ︓計算資源配分の決定⼿法

    ③ ︓実証評価向けアプリケーション ④ ︓透過型分散プラットフォーム ︓BEAM(Elixir処理系) MEC BEAM クラウド BEAM エッジ BEAM 最適配分アルゴリズム 透過型分散プラットフォーム BEAM システム開発者 デプロイされる コード ① ③ ② ③ ③ ❤ 評価アプリ ❤ 評価アプリ ④ ④ ❤ 評価アプリ ④ ② ② ❤ 評価アプリ ④ ② ② ② ② 基盤技術の研究開発から社会実装・普及展開まで プラットフォームとアルゴリズムの共創によって B5G時代を開拓する⾰新的な技術体系を確⽴する
  32. 32 研究開発項⽬と担当体制 2. IoTノードの能率的な実⾏環境 a)ヘテロSoC向けBEAM処理系 (東⼤・⾼知⼯科⼤・シティネット) b)B5G向け通信ミドルウェア (さくら・東⼤) 3. 計算資源配分の決定⼿法

    (NII) a)最適配分アルゴリズム b)優先制御と競合解決アルゴリズム 4. 実証評価向けアプリケーションの開発 (さくら・東⼤) 1. 資源透過型の分散処理プラットフォーム a) アーキテクチャの検討・設計 (阪⼤・⾼知⼯科⼤・シティネット) b) プラットフォームのElixirによる実装 (⾼知⼯科⼤・シティネット)
  33. 33 2. IoTノードの能率的な実⾏環境 • BEAMを礎としたB5G向けの能率的なIoTフレームワークの設計 ü現状︓均⼀なSoCデバイスが同⼀LAN/ドメイン内に分散する構成を想定 a) ヘテロSoC向けBEAM処理系 — ヘテロSoCのHWアーキ特性を積極活⽤する

    Ø big.LITTLE︓組込みプロセスを協調駆動 Ø プログラマブルSoC︓HW設計技術の導⼊ — 実証・普及のための評価ボード試作も計画 b) B5G向け通信ミドルウェア — DDS (ROS2) 通信機能を Elixir/Nervesに融合させる — 任意のデータ型に応じた効率的な 通信処理フローを確⽴する 実時間性能と電⼒効率を同時に最適化 広域分散処理の⾃律性とスケーラビリティを向上 Buildroot ERTS Rclex mROS 2 comm. lib. mROS 2 API UDP stack DDS node.ex node.ex 超低消費電⼒と拡張性を促進 ⾃律性と同時接続数を向上
  34. 34 おわりに • agent無⽤の組込み向けROS 2ノード軽量実⾏環境 —任意型のメッセージ通信に対応中︕ —TOPPERS+Mbed OS, POSIXに対応中︕ •

    Elixir向けのROS 2クライアントライブラリ —関数型でロボットプログラミング︕ —通信スケーラビリティを向上︕ • 関数型⾔語で5Gをびよんどする︕ ଎ ͘ ͯ ଠ ͘ ͯ ଟ ͍ ɾ ɾ ɾ #(