mROS 2どうですか？？

https://qiita.com/advent-calendar/2021/ros

この記事は [ROS Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ros) の11日目です．
昨日の記事は @youtalk さんの「[C言語用ROS2クライアントライブラリrclcのmacOS Montereyビルド](https://www.youtalk.jp/2021/12/10/rclc-on-macos.html)」でした．ウチにはまだ新型Macbook Proが届いてこないです,,,

---

おしらせ：本記事の2022年更新版を執筆しています．合わせてご笑覧ください．

https://qiita.com/takasehideki/items/77ff32b37b3c29608f77



# まえおき

みなさんmicro-ROS大好きですよね？？
組込みでROS 2がイゴくやつです．

- [micro-ROS | ROS 2 for microcontrollers](https://micro.ros.org/)

今年の7月に開催された [rosjp #43 組み込み勉強会](https://rosjp.connpass.com/event/215366/) では，LTの7件中の3件の発表がmicro-ROSに関するものでした．もはやROS界隈では圧倒的な知名度と地位を確立しております．

でもあれ，agent立てなかんかったりプログラミングモデルが固有だったり，アレじゃないですか？？（個人の感想です

ということで，そんなモヤモヤを脱却すべく，mROS 2というものを作っています，というご紹介です．

# どんなの？？

ざっくり言うと，こんな感じです．

- **agent無用**で組込みデバイスがhost PCと軽量にROS 2通信できます．
- APIはだいたいRclcpp準拠なのでスムーズに開発移行できるはずです．
- 下回りはTOPPERS/ASP3カーネルを使っていてたぶんリアルタイム性が高いです（しらんけど

9/16に開催された[ROSCon JP 2021](https://roscon.jp/2021/)にて「ROS 2 Client Library for E^2」というタイトルにて講演させていただきました！
動画アーカイブが公開されていますので，コチラ見ていただくのが早いです．前半はちょっと別の話しでして，mROS 2の紹介は10:40頃から始まります．

https://vimeo.com/638040779/8a10335711

SlideShareはP.13からです．

https://www.slideshare.net/takasehideki/ros-2-client-library-for-e2-250206371

デモはこんな感じです．

https://twitter.com/takasehideki/status/1438334757247471619

そんでもって10/20-21にオンライン開催された[ROS World 2021](https://roscon.ros.org/world/2021/)のLT Videoにエントリーしたところ，無事に投影されました！
コチラもVimeoより．08:09からです（いや冒頭の `rmw_email` おもろいけども:joy:

https://vimeo.com/649651268

mbed対応も！
[rosjp #44 LT大会](https://rosjp.connpass.com/event/222141/)でsmorita_embさんから対応したでよっ！報告をいただきました．圧倒的！感！謝！！
YouTubeアーカイブの 39:53 からです．

https://www.youtube.com/watch?v=YeQgeTnw5Tc&t=2703s

# どうやってイゴかすの？

mROS 2は，主に通信機能とRclcppほぼ準拠のAPIを提供するコア部分を https://github.com/mROS-base/mros2 のリポジトリとして公開しています．
組込みはカーネルとかボードとかCPUでいろいろバリエーションがありますので，ターゲットとするカーネルとボードに応じて，上記の mros2 を submodule として取り込んだリポジトリをそれぞれ設けてメンテしています．

READMEもそれなりに頑張って書いていますので，そちらに沿ってだいたいイゴかせるはずです．

## mros2-asp3-f767zi

- カーネル：[TOPPERS/ASP3](https://www.toppers.jp/asp3-kernel.html)
- ボード：[STM32 NUCLEO-F767ZI](https://www.st.com/en/evaluation-tools/nucleo-f767zi.html)

https://github.com/mROS-base/mros2-asp3-f767zi

## mros2-mbed

- カーネル：[Mbed OS 6](https://github.com/ARMmbed/mbed-os)
- ボード：Mbed対応でEthernetポート付きのもの
  - だったら，なんでもいけるはず！！？
  - 開発チームではSTM32 NUCLEO-F767ZIとF429ZIで動作を確認しています．

https://github.com/mROS-base/mros2-mbed

すぐに試してみたい方は，こちらのMbed版が良いかと思います．
`--net=host` が必須なので母艦がLinux機であるある必要がありますが，Docker環境を用いることで，クロスコンパイルもホストのROS 2ノード実行もさくっとたった５分で！試せる手順をREADMEにて紹介しています．~~それに，最新の更新にてFoxyでも正常にPub/Sub通信どちらも出来るようになりました（ASP3版はまだ未対応なのです,,,~~ → [v0.2.1](https://github.com/mROS-base/mros2-asp3-f767zi/releases/tag/v0.2.1)にてASP3版でもFoxy対応できました！！

それと，Ethernetポートの付いてるMbed対応なボード，一般の誤家庭でしたら１枚くらい床に転がってません？？
上記の２種類以外（特にSTM32以外）で動作確認できたよっということがあれば，ぜひ教えてください．

どちらにしてもぜひ試してみてもらえたら嬉しいです．
ちゃんと動かなかったりREADME手順にミスとか見つけられたら，ぜひぜひIssueなり報告いただけましたら泣いて喜んじゃいます．

ちなみに，すでに動作確認な報告もちらほらと,,, あざまっす！！

https://twitter.com/newlvAlPr/status/1450475186428469249

https://twitter.com/Kotakku_07/status/1455370255132336130

https://twitter.com/newlvAlPr/status/1460567940974006272

# あれっでも,,,

「あれっmicro-ROSもなんか最近agent不要になったんじゃないの？？」っとお気づきの方もいらっしゃるかもです．

https://twitter.com/EProsima/status/1450485153562718209

はい,,, がむばります,,, 

# これからどうするの？？

なんだかリンク集みたいな記事になってしまって申し訳ないです．
いろいろ喋る機会もありまして動画アーカイブがちゃんと残っているし，READMEそれなりに頑張って整備しているしで，Qiita記事として書くことが無くなってしまっていました．
まぁ年の瀬の記録として，いろんなリンク情報をひとまとめにしておくのも大事なんじゃないかなということで，ご容赦いただけましたらです．

これからもmROS 2の開発はどんどん続けていきますし，なんならまだまだ絶賛進行中です．~~ASP3版でのFoxy対応もちゃんとしたいし，~~年明けには大きめの新機能の紹介ができるかもかも？？
 → [v0.2.1](https://github.com/mROS-base/mros2-asp3-f767zi/releases/tag/v0.2.1)にてASP3版でもFoxy対応できました！！


ぜひGitHubにStar & Watchを付けて，今後の活動を眺め見ていただけましたら幸いです．

---
12日目の記事は @chikuta さんです．ロボットになりたいですねぇ．