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

mROS 2 update on FY2021

mROS 2 update on FY2021

第22回ロボティクス勉強会
2022/03/18(金)
https://robosemi.connpass.com/event/225647/

takasehideki

March 18, 2022
Tweet

More Decks by takasehideki

Other Decks in Programming

Transcript

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

    — ⼀般社団法⼈ROSCon JP 理事 — TOPPERSプロジェクト 運営委員 学会活動 — IPSJ-SIGEMB 運営幹事 — IEICE-RECONF 専⾨委員 — SWEST ステアリング委員 — ROSCon JP 実⾏委員 コミュニティ活動 — ROS Japan Users Group — IoT ALGYAN (あるじゃん) 運営委員 — NervesJP : Elixir for IoT @takasehideki ശ ఉ
  2. 3 (Robot Operating System) • ROSの本質は通信にあり — ROSノード (機能単位) の疎な結合⽅式

    — 登録・変更・削除・配置・復旧が容易 — 基本はTopicを介した出版購読型 ロボットソフトウェアの開発を加速するプラットフォーム http://www.ros.org/about-ros/ node1 node2 node3 node4 Topic1 Topic2 node5 出版(Publish) 購読(Subscribe) msg msg msg msg IoTへの展開にも期待
  3. 4 通信⽅式とその課題 EMC GPC agent master node node client node

    dds-xrce rtps rtps m • RTPS︓DDSの通信プロトコル — SPDP/SEDP︓⾃律的に通信相⼿と 通信経路を探索/確⽴(master不要) — (ROS 2⾃体が)汎⽤OS上での稼働を想定 • 組込み技術の導⼊ — エッジ処理の応答性向上や消費電⼒削減 • micro-ROS︓ROS 2の組込み対応 — POSIX準拠の複数のRTOSをサポート — Micro-XRCE-DDS を利⽤ ØRTPS通信の仲介に agent が必要 Ø 単⼀障害点の発⽣と通信性能の劣化 ※GPC: General Purpose Computer EMC: Embedded Micro-Computer agent無⽤で ROS 2通信︕
  4. 5 ⽅針と設計要件の整理 RTPSの仕様に則った通信の実現 通信性能の低減を下げる C/C++での組込み向けの実装 プロセッサ数百MHz / メモリ数MB程度 ⾼品質なリアルタイムOSの採⽤ 通信性能の向上にも寄与

    基本型に対応した出版購読APIの提供 rclcppとの互換性を考慮 通信の⾃律性の確保 仲介の仕組みは不要とする 効率的な通信処理の実現 中規模な組込みデバイスでの動作 メモリ軽量性の実現 リアルタイム性の向上も考慮 基本的な通信⽅式の実現 開発⽣産性の観点も考慮 mROS-base/mros2
  5. 6 ソフトウェア構成 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) RTPSの仕様に則った通信の実現 通信性能の低減を下げる C/C++での組込み向けの実装 プロセッサ数百MHz / メモリ数MB程度 ⾼品質なリアルタイムOSの採⽤ 通信性能の向上にも寄与 基本型に対応した出版購読APIの提供 rclcppとの互換性を考慮 mROS-base/mros2 多種デバイスへの 展開の容易化も考慮
  6. 7 補⾜︓embeddedRTPS [A. Kampmann+ ITSC'2019] • C++実装による組込み向けのRTPSスタック —UDP/IP には lwIP

    (Raw Mode) を採⽤ —シリアライズに eProsima Micro-CDR を利⽤ • 主な機能と利点 —Discovery: SPDP と SEDP の機能を提供 —Interoperability: FastDDS 2.3.1 との疎通確認済み —QoS Policies: reliable と best-effort に対応 —UDP Multicast: PR#4 より対応 (STM32版には未反映) —Message size: lwIP バッファサイズまで対応可能 mROS-base/mros2
  7. 8 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
  8. 9 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
  9. 11 v0.2.0 @ 29 Oct 2021 • add mros2-mbed repo

    on the list of supported platform 🎉 https://rosjp.connpass.com/event/222141/ https://www.youtube.com/watch?v=YeQgeTnw5Tc&t=2393s • just in 5 minutes to try it — Build with docker on the host (ghcr.io/armmbed/mbed-os-env) — Keil Studio Cloud a.k.a Mbed Online Compiler https://os.mbed.com/users/smoritaemb/code/ mbed-os-example-mros2/
  10. 12 v0.2.1 @ 11 Dec 2021 • Update embeddedRTPS to

    operate mros2 with ROS 2 Foxy environment mROS-base/embeddedRTPS#7 /to_stm /to_linux • v0.2.2 @ 16 Dec 2021 — Support built-in-types for msg except for wstring (UTF-16) • v0.2.3 @ 23 Dec 2021 — use getData() instead of accesing private member data — remove embeddedRTPS/src/rtps.cpp from cmake/make target — move target specific code/file to mros2-asp3-f767zi repo
  11. 13 v0.3.0 @ 20 Feb 2022 • Support custom MsgTypes

    for topic communication 🎉 提案⼿法②: 設計⽅針 10 ポイント①: 共通処理と固有処理の分離 mROS 2における通信処理 メッセージ型に依存しない処理 (=共通処理) メッセージ型固有の処理 (=固有処理) 共通処理が固有処理を呼び出す形式に. ポイント②: メッセージ型ヘッダファイルの⽣成 固有処理を含むヘッダファイルをメッセージ型ごとに⽣成. health.hpp Health.msg string name uint16 height float32 weight ⽣成 copyToBuf関数 copyFromBuf関数 messageSize関数 pub.cpp #include “health.hpp” ・・・ copyToBuf関数呼び出し ・・・ 呼び出し 共通処理 固有処理 ETNET2022-EMB (2022/3/10) 提案⼿法③: メッセージ出版フロー 11 ①: シリアライズ & バッファに格納 ②: 出版するメッセージサイズを計算 ③: バッファの所定領域にあるデータを送信 name=hibara height=171 weight=63.5 共通処理 シリアライズ関数& バッファ格納関数呼出 メッセサイズ 計算関数呼出 固有処理 シリアライズ& バッファ格納 メッセサイズ 計算 出版 タスクへ バッファ hibara17163.5 : 新規実装部分 ETNET2022-EMB (2022/3/10) • v0.3.1 @ 23 Feb 2022 — move include/rtps/config.h to each target repository • v0.3.2 @ 11 Mar 2022 — clear cntPub appropriately — remove generation of header_includer
  12. 14 How to use Custom MsgTypes • e.g.: Mbed &

    Twist mgs 1. Prepare .msg file 2. Generate header file $ cat workspace/custom_msgs/geometry_msgs/msg/Twist.msg geometry_msgs/msg/Vector3 linear geometry_msgs/msg/Vector3 angular $ cat workspace/custom_msgs/geometry_msgs/msg/Vector3.msg float64 x float64 y float64 z $ cd workspace $ python ../mros2/mros2_header_generator/header_generator.py geometry_msgs/msg/Twist.msg
  13. 15 How to use Custom MsgTypes • e.g.: Mbed &

    Twist mgs üGenerated file $ ls -R custom_msgs/ custom_msgs/: geometry_msgs custom_msgs/geometry_msgs: msg custom_msgs/geometry_msgs/msg: twist.hpp vector3.hpp Twist.msg Vector3.msg #include "mros2.hpp" #include "geometry_msgs/msg/vector3.hpp" #include "geometry_msgs/msg/twist.hpp" int main(int argc, char * argv[]) { <snip.> pub = node.create_publisher <geometry_msgs::msg::Twist>("cmd_vel", 10); <snip.> üUsage in app
  14. 18 v0.4.0 @ T.B.A • Add mros2-posix as the target

    platform —already worked fine with Ubuntu (native & docker) übut, porting to POSIX compliant RTOS & checking the operation have not progressed yet —does not yet support custom MsgTypes —but, embeddedRTPS has been bumped to its latest version —and also, enhancing the documentation is needed,,,
  15. Check it out!! Please give us the Star! & your

    contribution!! https://github.com/mROS-base/mros2 • operation check with another Mbed ready boards • check with Galactic & support Humble?? • implement new target with POSIX compliant RTOS • support QoS control, Service, Action,...