18
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ROS2Advent Calendar 2022

Day 24

micro-ROSとros2_controlで構成したDiff Botでナビゲーションしてみた

Last updated at Posted at 2022-12-25

概要

こんにちはBEIKEです。
クリスマス?そんなものは知りません。
ボッチで開発作業たのしいなぁ🙃

ということで本編へ

ある時、micro-ROSros2_controlについて全くわからねぇぇ。。。
いつ使うんだ?ってなりました。

そこで!
実際にロボット(Diff Bot)作って、micro-ROSros2_control使ってみれば
なんとなく分かるんじゃね!?
と考えました。

その中で得た知見や進捗について共有できればと思い、記事を書いてみました!

当方、知識が浅いため、もしかしたら適当なことを書いてることがあるかもしれません。
コメントで指摘等いただけると大変助かります🙏

準備編?

micro-ROSってなんぞや???

以下のmicro-ROS公式サイトがあります。
https://micro.ros.org/

概要を読んでみると

Micro-ROS は、ノード、パブリッシュ/サブスクライブ、クライアント/サービス、ノード グラフ、ライフサイクルなどの
すべての主要なコア概念をマイクロコントローラー (MCU) にもたらします。

と書かれていました。

つまり、マイコン上でROS2の実装ができるってわけですね🙃(本当か?)

更に読んでみると
どうやら、micro-ROSにはAgentClientというものが存在するそうです。

Agentさんは、何をしているかというと
通常のROS2ノードとmicro-ROSノードとの橋渡し(ブリッジ)を行っているそうです。

Clientさんは、マイコン上で動作しているmicro-ROSノードらしいです。

多分こんな感じ?
image.png

そして、ROS2ノードとmicro-ROS間は
UDP、TCPあるいはシリアルポートを使用した2通りの通信方法が可能です。

ここで疑問

マイコン側のメモリ(RAM)の使用とかって、どうなってるんだ?

Agent側で上手いことやってくれてるのかな?(PC側で負担)と思い調べてみました。

micro-ROSはデフォルトでeProsima Micro XRCE-DDSというミドルウェアを使用しているそうです。(参考元
このミドルウェアについても同様に公式サイトがあります。
https://micro-xrce-dds.docs.eprosima.com/en/latest/

で、サイトに書かれている
eProsima Micro XRCE-DDSの主な機能を読むと

ライブラリは、 クライアント スタックの増加によるメモリ フットプリントのみであるため、動的および静的メモリ フリーです。 2kB未満のRAMで単純なパブリッシャー/サブスクライバーを管理できます。 さらに、 クライアント の概念に従って構築されて はプロファイル おり、バイナリ サイズを変更すると同時にライブラリに機能を追加またはライブラリから削除できます。

と書かれていました。

なので、マイコン側のRAMで負担してそうだなーとなりました。

以上、micro-ROSってなんぞや???
です。色々勘違いをしてそうですが、こんなもんだろ?という感じです。

ros2_controlってなんぞや???

そもそも、ROS(1)にもros_controlというのが存在していて
何がなんだか分からず使ったことがありませんでした。

これもros2_controlの公式サイトがあるので読んでみます。
https://control.ros.org/master/index.html

ros2_controlは、(ROS 2)を用いてロボットを(リアルタイムに)制御するためのフレームワークです。ROS (Robot Operating System) で使用されている ros_control パッケージを書き直したパッケージです.

また、ros_controlros2_controlについては、多くの先人方が記事で説明をしてくださっています。

例えば、以下の記事が分かりやすかったです。

ros2_controlは、世の中にある制御理論をロボットに適用しやすくするものです。(※私の解釈です)
例えば、2輪走行ロボットで自動走行したい場合、アプリケーション(自動走行)とロボットとの間に差動2輪走行制御が必要です。
この走行制御はros2_control特有のものではなく、すでに世の中にある制御理論です。
アプリケーションやロボットのハードウェアをできるだけ意識せずに、制御理論を適用できる仕組みがros2_controlです。

なるほど。。。

ということで???
image.png

Diff Botを作る??

Diff Botについて

ここからは、micro-ROSros2_control実装のために
作製したDiff Botについて説明します。

まず、名前の由来ですが、
Diff BotDifferential Robotの略です。

あとは、ros2_control_demosにあるDiff Botから来てます。

作成したロボットがこちら!

ロボットの作成に関しては、
同期の高見俊介さんがハードウェアと速度制御周り、
micro-ROS、ROS2周りを私が担当しました。

後ほど、説明がありますが、このロボット(Diff Bot)の
部品やコードはすべてパッケージとして公開しています。

Diff Botのハードウェア構成

ざっと、ハードウェア構成はこんな感じです。

image.png

micro-ROS Agent用、LiDAR(RPLiDAR S1)用にRaspberry Pi 4 DRAM 4GBを搭載してます。
micro-ROS Client用にNUCLEO-F446REを搭載してます。

NUCLEO-F446REについては、手元にあったものでmicro-ROSが動くボードということで採用しました。

Diff Botのソフトウェア構成

ソフトウェア構成についてはこんな感じです。(SLAMとナビゲーションをまとめました)

image.png

本当は、Raspberry Piのみでナビゲーションをしたかったのですが、
やってみた感じCPU処理負荷に耐えられず、処理落ちしてしまうことがありました。(調査不足)

そのため、PCのCPUリソースをお借りして、SLAMとNavigationを行いました。

Diff Botのパッケージについて

takagon-dynamics/diff_bot

  • Diff Bot関連のパッケージをreposでまとめた
  • micro-ROS Agent用のDocker fileがある

takagon-dynamics/diff_bot_control

  • Diff Botの各リンクの公開
  • /cmd_velからodomリンクの発行

takagon-dynamics/diff_bot_documentation

  • Diff Bot用のドキュメント
  • インストール、実行方法について記載(現在進んでない)

takagon-dynamics/diff_bot_firmware

takagon-dynamics/diff_bot_launch

  • Slam-toolbox、Navigation2の立ち上げに必要なパラメータやlaunchファイルがある

takagon-dynamics/diff_bot_slam

  • SLAM用のlaunchファイルがある

takagon-dynamics/diff_bot_navigation

  • Navigation2用のlaunchファイルがある

takagon-dynamics/Diff_Bot_Hardware

  • Diff Botを作製するために必要なものをまとめた

Diff Botを動かしてみる!!!

ということで、作製したパッケージを使ってDiff Botを動かします。

Diff BotでSLAM(slam_toolbox)!?

いい感じそうです!
あまり歪みのない綺麗なマップが出来ました!

Diff Botでナビゲーション(navigation2)!?

なんかうまくいってなさそうですね。
tf周りが怪しいです。
パラメータ調整については、ほとんど何もしてないです。

でも、なんか動いたのでヨシ!(ひどい)

まとめ

なんとか、micro-ROSros2_controlを使って
ナビゲーションまでできました。

少しは勉強出来た気がします。

結局これ。。。

ここまで、読んでいただきありがとうございます🙏

余談

本当は倒立振子を作る予定でした。

IMUのデータ(imu_filter_madgwick後のデータ)をmicro-ROS経由で(Raspberry Pi 4から)受け取ると、レイテンシがあるのか、倒立の制御(NUCLEO-F446RE側)が間に合いませんでした。
そのため、今年はナビゲーションできるロボットをとりあえず作るかという感じになりました。

来年はmicro-ROS使って、Diff Botを倒立させたいです🔥

18
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?