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

けっきょくROSってなんなのか? 〜IoT的に気になるDDS通信機能を徹底解剖する〜

takasehideki
February 12, 2022

けっきょくROSってなんなのか? 〜IoT的に気になるDDS通信機能を徹底解剖する〜

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

takasehideki

February 12, 2022
Tweet

More Decks by takasehideki

Other Decks in Programming

Transcript

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

    — 理研R-CCS 客員研究員 — ⼀般社団法⼈ROSCon JP 理事 — TOPPERSプロジェクト 運営委員 学会活動 — IPSJ-SIGEMB 運営幹事 — IEICE-RECONF 専⾨委員 — SWEST ステアリング委員 コミュニティ活動 — ROS Japan Users Group — IoT ALGYAN (あるじゃん) 運営委員 — NervesJP : Elixir for IoT @takasehideki ശ ఉ
  2. 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周年︕︕
  3. 6 (Robot Operating System) • ROS (ROS 1)︓2007年11⽉に最初の正式リリース — OSS資産や情報,対応ロボットが豊富にある

    — 最終版 Noetic の EOL は2025年3⽉まで • ROS 2︓絶賛成⻑中の次世代版 — ROSのコンセプトを引き継いで再設計されたバージョン — 通信層にOMG標準のDDS (Data Distribution Service) を採⽤ ロボットソフトウェアの開発を加速するプラットフォーム http://www.ros.org/about-ros/
  4. 8 Tools: 開発促進のためのツール群 • catkin_tools: プロジェクト構成/ビルドシステム • rqt: Qtベースのデバッグフレームワーク •

    rviz: 可視化ツール • gazebo: 3D物理シミュレーションツール —他にもroslaunch, rosbagなど,,,
  5. 9 Capabilities: 再利⽤性の⾼い⾞輪 • ROSパッケージ︓有⽤な機能がまとめられたライブラリの集合 —2,000以上のパッケージが公開されている https://index.ros.org/packages/ —利点︓既存資産として活⽤できる üコンポーネント指向開発を実現できる パッケージ名

    内容 tf ロボットの3次元座標と連鎖関係,時間の管理 teleop ロボットの移動⽅向の操作 usb_cam USBカメラの画像の取り込み ros_control ハードウェアを抽象化したアクチュエータの制御 MoveIt マニピュレーションの制御アルゴリズム Navigation 地図ベースの⾃⼰位置推定と経路計画のアルゴリズム
  6. 10 Ecosystem: 世界規模のコミュニティ • オンライン —ROS Wiki: パッケージ・⽂書の公開 —ROS Answers:

    Q&Aページ —ROS Discourse: リリースやイベントの告⽰ üTSC, SIG-WGsの議事録も全て公開 • オフライン —ROSCon: 世界規模の開発者会議 ü最近はlocal conf.も —SIG meetups, workshop, local events, etc.,,,
  7. 13 ROSの歴史と開発体制の変遷 2007 2008 2009 2010 2011 2012 2013 2014

    2015 2016 2017 2018 2019 2020 2021 1st commit to SourceForge (Nov. 2007) https://sourceforge.net/p/ros/code/1/log/?path= http://www.ros.org/news/ 2017/11/ros-turns-10.html ROS 1.0 released ROS 2 Alpha released http://wiki.ros.org/Distributions https://docs.ros.org/en/ rolling/Releases.html ROS 2 TSC
  8. 補⾜︓ROS 2 TSC @2022-02-01 • ロードマップの策定やコア機能などを主導 https://docs.ros.org/en/rolling/Governance.html • ROS 2開発に貢献する組織(の技術者)により編成

    —いわゆるBig Techやロボティクス業界の有名企業 —半導体やOSやDDSのトップベンダ など ü最近は Community Representative も選考されている —特定トピックに特化したWGsも編成されている • 品質保証を重視した開発プロセスの採⽤ —アジャイル︓Kanbanによるプロジェクト進⾏の可視化 —テスト駆動︓継続的インテグレーション(CI)の適⽤
  9. … … 16 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による通信相⼿の⾃動探索 ソフトウェアの階層構造
  10. 18 ROSの通信⽅式︓トピック • ROS通信の基本 • ⾮同期型の出版購読通信 —publisher/subscriber • 通信データ︓message •

    通信経路︓topic —topic 名が同⼀であれば,任意の個数/種類のノードが 任意のタイミングで登録/変更/削除できる —message の型が同⼀であれば,データ通信が⾏われる • subscribe 時にはコールバック関数が実⾏される node node node node node topic publish subscribe node node node node node topic publish subscribe
  11. 19 ROSの通信⽅式︓サービス • 1対1・同期型のRPC通信 —Service server/client • 通信データ︓ —request —response

    • 通信経路︓service • server は遠隔⼿続き呼び出しで実⾏される service node node node request response service node node node request response
  12. 20 ROSの通信⽅式︓アクション • フィードバック付きRPC通信 • ⾮同期と同期の組み合わせ —Action server/client • 通信データ︓

    —goal︓serviceとして実⾏ server に処理内容を設定 —feedback︓topicとして実⾏ client に途中経過を⾮同期に出版 —result︓serviceとして実⾏ client から結果の問い合わせ • 時間の掛かるタスクの依頼に利⽤される —実⾏途中で処理をキャンセルすることもできる action node node goal feedback result
  13. 21 ROSの通信⽅式︓パラメータ • ノードに関連付けられた多変量辞書(Key-Value Store) —キー︓⽂字列 —値︓bool, int64, float64, string,

    byte[], bool[], int64[], float64[], string[] • ノード実⾏時または実⾏中の設定/構成に使⽤される • 再起動時には値が再読み込みされる —ある種の永続性がある
  14. 22 ROSの通信型︓Field types • ROSIDL︓ROS通信型の記法 • build-in-type︓ロボット通信に頻出する型の定義 —ROSのtype nameとC++, Python,

    DDSとで対応付けられる (カッコ内はC++の型) ü bool / byte / char / float32,64 / int8,16,32,64 / uint8,16,32,64 / string / wstring (std::u16string) ü static array (std::array<T,N>) / unbounded dynamic array (std::vector) / bounded dynamic array (custom_class<T,N>) / bounded string (std::string) —補⾜︓ std_msgs は Foxy から強く⾮推奨の⽅針に,,, https://docs.ros.org/en/galactic/Releases/Release-Foxy-Fitzroy.html#std-msgs https://docs.ros.org/en/foxy/Concepts/About-ROS-Interfaces.html
  15. 23 ROSの通信型︓Field types • build-in-types を組み合わせて, 独⾃の型を定義することができる —例︓両⾞輪の⾓速度と回転量,現在位置の3次元座標,など —階層構造や配列を含むこともできる ü例︓

    geometry_msgs/PoseStamped —*.msg, *.srv, *.action のファイルで定義する —パッケージ化して他プロジェクトに流⽤もできる requestの設定 (serviceへの送信値) responseの設定 (serviceからの返送値)
  16. 24 DDS (Data Distribution Service) • OMG (Object Management Group)

    で策定された通信仕様 —peer-to-peer の通信ミドルウェアを実現 —最新版は2015年4⽉公開の Version 1.4 https://www.omg.org/spec/DDS • ROS 2での採⽤による利点 —ROS 2のメンテコード削減 —厳格かつ明確な仕様に依存できる ü第三者によるレビューや監査が可能 —⾼い互換性のある実装が提供される ünot “The DDS Wars”, but “DDS Cambrian Explosion” !!
  17. 25 ROS 2に(公式)対応しているDDS実装 Middleware Library Provider Support ライセンス・備考等 rmw_fastrtps_cpp eProsima

    Fast DDS (Fast-RTPS) Tier 1 Apache 2.0,軽量実装, Foxyまで&Humbleのデフォルト [https://osrf.github.io/TSC-RMW-Reports/] rmw_connext_cpp RTI Connext Tier 1 商⽤/研究(機能制限)ライセンス, No.1ベンダ,PF/Arch.サポートは限定的 rmw_cyclonedds_cpp Eclipse Cyclone DDS Tier 1 Eclipse Public License 2.0(Open), ⾼性能・⾼信頼な評価結果@ROSCon2019, Galacticではデフォルト rmw_fastrtps_ dynamic_cpp eProsima Fast DDS Tier 2 Apache 2.0,型の実⾏時の解釈・変換 (type introspection)をサポート REP-2000 を基に 作成・整理 • 実装機能やライセンス形態に合わせて選択できる • 異種DDSのノード間でも通信できる(rmw層で抽象化) — Tier 1: Open Robotics公式の⼿厚いサポート — Tier 2: 公式だが限定的なサポート
  18. 26 RTPS (Real-Time Publish-Subscribe) • DDSの通信プロトコル —正式名称は DDS Interoperability Wire

    Protocol (DDSI-RTPS) —最新版は2021年3⽉公開の Version 2.5 https://www.omg.org/spec/DDSI-RTPS/ • UDP/IP 上に実装される —OSI参照モデルのtransport層に位置 —パケットの到着保証などの不確実性は QoS機能によってカバーする • 通信相⼿の探索/通信経路の確⽴を ⾃律的に⾏うことができる
  19. 27 RTPS による通信確⽴のフロー Participant_A SPDP Endpoint Writer Reader SEDP Endpoint

    RTPS Endpoint HistoryCache • Participant: ROS 2におけるノード • SPDP: Simple Participant Discover Protocol • SEDP: Simple Endpoit Discover Protocol • Endpoint: 通信端点となるモジュール — Writer/Reader: 情報を送信/受信するモジュール • HistoryCache: 通信履歴を保持するモジュール Writer Reader Publisher Subscriber
  20. P_E W_E R_E W_E R_E P_E S_E P_D W_D R_D

    W_D R_D P_D S_D P_C W_C R_C W_C R_C P_C S_C 28 RTPS による通信確⽴のフロー Participant_A SPDP Endpoint Writer Reader SEDP Endpoint RTPS Endpoint HistoryCache ①SPDPで⾃⾝のParticipant情報をmulticast発信 — Participant⽣成時/以降の定期的に発信 Writer Reader Publisher Subscriber P_B W_B R_B W_B R_B P_B S_B
  21. 29 RTPS による通信確⽴のフロー Participant_A SPDP Endpoint Writer Reader SEDP Endpoint

    RTPS Endpoint HistoryCache ②SEDPでEndpoint情報を発信元にunicastで返送 — 出版購読に関わる情報を発信する Writer Reader Publisher Subscriber 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
  22. 30 RTPS による通信確⽴のフロー Participant_A SPDP Endpoint Writer Reader SEDP Endpoint

    RTPS Endpoint HistoryCache ③Endpoint情報同⼠を照合 合致したもので通信経路を確⽴ 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 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 P_A C 1 D 2 B 2
  23. 31 RTPS による通信確⽴のフロー 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
  24. 32 QoS Control • 通信経路の品質を指定する(Pub/Sub間で互換性が必要) • 指定できるパラメータの例 (下線はデフォルト設定) —History (履歴)

    / Depth (深さ): Keep last (任意の値 (10個)を保持) or Keep all —Reliability (信頼性): Best effort or Reliable (リトライ試⾏) —Durability (耐久性): Transient local or Volatile (遅延⾮許容) —Deadline (許容更新間隔) https://docs.ros.org/en/foxy/Concepts/About-Quality-of-Service-Settings.html Profile History policy Reliability Durability Deadline Default Keep last 10 Reliable Volatile default Services Keep last 10 Reliable Volatile default Sensor data keep last 5 Best effort Volatile default Parameters keep last 1000 Reliable Volatile default
  25. 34 AWS RoboMaker • ROS開発環境がすぐに使⽤開始できる • 知能ロボットの構築を容易化できる • ⼤規模な並列シミュレーションを実⾏できる •

    アプリを⼤量のロボットに対して安全に 管理・デプロイできる(フリート管理) https://aws.amazon.com/robomaker/ https://youtu.be/_YY0-SdlhNg
  26. 35 ROS with Windows and Azure • Windows 10 Desktop

    / IoTでのサポート • MS各種ツール・サービスとの連携 • ROSノード・パッケージの提供 https://aka.ms/ros
  27. 36 rapyuta.io by Rapyuta Robotics https://www.rapyuta-robotics.com/ja/platform/ • 異種・マルチロボットシステムにスケールと 柔軟性を与える分散型インテリジェンス •

    すべてのロボットとクラウド上で動作する 分散アプリケーションの構築、デプロイ、監視 • ROSとの互換性を備えた、安全でスケーラブルな ロボット間およびロボットとクラウド間の通信を実現 • API⼜はWebUIを通し、すべてのロボットから データを収集、保存、可視化 https://youtu.be/vogOEIwGh50
  28. 37 FIWARE with ROS RoboticBase by TIS micro-ROS and FIWARE

    by eProsima https://youtu.be/XJL2_FHcils
  29. 38 Web API/Frameworkとのブリッジ • rosbridge_suite — ROSメッセージのJSON API形式 — UDP,

    TCP, WebSocketのサーバを提供 — ROS 2版も開発中 • mqtt_bridge — ROSとMQTTの双⽅向のブリッジ — JSON (or MessagePack) に変換 • ROSLink • Husarnet — P2P VPN designed for ROS/ROS 2
  30. 39 ROSをIoTにつなぎこむには︖ Robot Web rclcpp, rclpy rclcpp, rclpy rclcpp, rclpy

    Web Framework rclcpp, rclpy ROS 2/DDS ROS 2/DDS Web API Web Protocol Web FW rclnodejs, Rclex, etc.
  31. 40 おわりに • けっきょくROSってなんなのか︖ • ROS 2/DDS通信機能を徹底解剖︕ — 豊富な通信⽅式︓トピック,サービス,アクション,パラメータ —

    RTPS: ⾃律的な通信相⼿の探索/通信経路の確⽴ • ROS 2/DDSをIoTにつなぎこむ︕ — 今⽇これからのお話しをお楽しみに︕︕ https://algyan.connpass.com/event/236150/ http://www.ros.org/about-ros/