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

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

91b03a57e0ef56fee59fbddc66a7f6fd?s=47 takasehideki
February 12, 2022

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

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 けっきょくROSってなんなのか︖ 〜IoT的に気になるDDS通信機能を徹底解剖する〜

  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. けっきょくROSって なんなのか︖

  6. 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/
  7. 7 Plumbing: 通信モデルとミドルウェア • ROSノード (機能単位) の疎な結合⽅式 —機能の登録・変更・削除・配置・復旧が容易にできる —基本はTopicを介した⾮同期・出版購読型の通信 —効率的なプロセス/モジュール間通信を実現できる

    node1 node2 node3 node4 Topic1 Topic2 node5 出版(Publish) 購読(Subscribe) msg msg msg msg 詳細は のちほど,,,
  8. 8 Tools: 開発促進のためのツール群 • catkin_tools: プロジェクト構成/ビルドシステム • rqt: Qtベースのデバッグフレームワーク •

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

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

    Q&Aページ —ROS Discourse: リリースやイベントの告⽰ üTSC, SIG-WGsの議事録も全て公開 • オフライン —ROSCon: 世界規模の開発者会議 ü最近はlocal conf.も —SIG meetups, workshop, local events, etc.,,,
  11. 11 ROS対応のロボット https://robots.ros.org Aerial Marine Component Sensor Ground Manipulator Motor

  12. 12 学習⽤ロボット︓TurtleBot3 • ROS公式の研究・教育⽤ロボット組⽴キット —テーブルトップでROSやSLAMの学習が出来る —OSRF (Open Robotics)からのリクエストで誕⽣ —改造の⾃由度が⾼く、ROS対応ロボット作成が容易 https://emanual.robotis.com/docs/en/

    platform/turtlebot3/overview/ TurtleBot3 - Official Product Video https://youtu.be/9OC3J53RUsk
  13. 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
  14. 補⾜︓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)の適⽤
  15. ROS 2/DDS通信機能を 徹底解剖︕

  16. … … 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による通信相⼿の⾃動探索 ソフトウェアの階層構造
  17. 17 Publisherの実装例 (rclpy) https://github.com/ros2/demos/blob/foxy/demo_nodes_py/demo_nodes_py/topics/talker.py クラスから ノードを⽣成 コールバック関数と タイマ周期の設定 トピックに メッセージを出版

    ノード名の 指定 トピックと型情報を 指定して出版者に登録 メッセージの 作成 クラス定義
  18. 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
  19. 19 ROSの通信⽅式︓サービス • 1対1・同期型のRPC通信 —Service server/client • 通信データ︓ —request —response

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

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

    byte[], bool[], int64[], float64[], string[] • ノード実⾏時または実⾏中の設定/構成に使⽤される • 再起動時には値が再読み込みされる —ある種の永続性がある
  22. 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
  23. 23 ROSの通信型︓Field types • build-in-types を組み合わせて, 独⾃の型を定義することができる —例︓両⾞輪の⾓速度と回転量,現在位置の3次元座標,など —階層構造や配列を含むこともできる ü例︓

    geometry_msgs/PoseStamped —*.msg, *.srv, *.action のファイルで定義する —パッケージ化して他プロジェクトに流⽤もできる requestの設定 (serviceへの送信値) responseの設定 (serviceからの返送値)
  24. 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” !!
  25. 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: 公式だが限定的なサポート
  26. 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機能によってカバーする • 通信相⼿の探索/通信経路の確⽴を ⾃律的に⾏うことができる
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. ROS 2/DDSを IoTにつなぎこむ︕

  34. 34 AWS RoboMaker • ROS開発環境がすぐに使⽤開始できる • 知能ロボットの構築を容易化できる • ⼤規模な並列シミュレーションを実⾏できる •

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

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

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

    by eProsima https://youtu.be/XJL2_FHcils
  38. 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
  39. 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.
  40. 40 おわりに • けっきょくROSってなんなのか︖ • ROS 2/DDS通信機能を徹底解剖︕ — 豊富な通信⽅式︓トピック,サービス,アクション,パラメータ —

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