LoginSignup
3
3

More than 3 years have passed since last update.

Arduino(ESPr Developer(ESP-WROOM-02))をROS2ノードにしてpublishしてみた

Posted at

概要

Windows10マシンでVirtualBoxを使用したUbuntu環境上で、Arduino(ESPr Developer)をROS2ノードとして設定、Arduinoからpublishします。
前回Ubuntu環境でArduinoのLチカができたので、今回はROS2+Arduinoの動作確認に進んでいます。世の中のROS2を使った開発環境が分からないので実際のところROS2でこのボードを使うのがいいのか悪いのかわかりませんが、何かのお役に立てればいいかなと思います。

構成

  • ベースマシン(Windows10)
    • VirtualBox(バージョン5.2.22)

VirtualBox上の構成は、

  • Ubuntu18.04(64bit)
    • ROS2(Dashing Diademata)
    • Mico-XRCE-DDS-Agent
  • Arduino
    • ESPr Developer(ESP-WROOM-02開発ボード、スイッチサイエンス) ※以下、ESPrと表記します
    • Arduino IDE(バージョン1.8.1)

全体の流れ(事前準備と動作確認)

事前準備(ソフトのインストール等)

  1. VirtualBox上でのESPrの認識
  2. ROS2のインストール
  3. 通信用設定(Micro-XRCE-DDS-Agentのインストール)
  4. ROS2Arduinoのインストール(Arduino IDE上)

動作確認(サンプルスケッチを用いた動作確認の手順)

  1. ROS2の起動
  2. スケッチのアップロード(Arduino IDE)
  3. Micro-XRCE-DDS-Agentの起動とESPrのリセット
  4. 動作確認(topicの確認、表示)

事前準備

1. VirtualBox上でのESPrの認識

  • 前回の投稿を参照してESPrを認識させてください(前回投稿:「VirtualBoxとUbuntuとArduinoでLチカ」)
  • 注意点ですが、VirtualBoxのデバイスフィルタにはArduinoではなくFTDI FT231X USB UARTと表示されるので惑わされないようにしてください。

2. ROS2のインストール

近藤 豊さん著の「ROS2ではじめよう次世代ロボットプログラミングを参考にしました(参考資料1.)
注意点ですが、"2-3-3 APTソースリストの設定"で、コマンド中にシングルクォーテーションとバッククォーテーションが混在しているので、手打ちされる方は間違えないようにしてください(私だけ?)

3. 通信用設定(Micro-XRCE-DDS-Agentのインストール)

4. ROS2Arduinoのインストール

ArduinoがROS2と通信するためのライブラリをIDEにインストールします。
作業はいたって簡単、IDEを立ち上げて、スケッチ→ライブラリをインクルード→ライブラリを管理、でライブラリマネージャーを開いて「ROS2Arduino」でフィルタをかけるとros2arduinoのみが残るので(2020/5/5時点)あとはインストールするだけです。

動作確認

1. ROS2の起動

以下のコマンドで通常のROS2の起動を行います。
bash /opt/ros/dashing/setup.bash

2. スケッチのアップロード(Arduino IDE)

今回は以下のros2arduinoのサンプルをそのまま使用します。
ファイル→スケッチ例→ros2arduino→publisher
Reset Methodに(dtr(aka nodemcu))を選択していれば、「マイコンボードに書き込む」ボタンで、で正常に書き込めるはずです。

※ 個人的にハマったのがこの部分、次の手順のMicro-XRCE-DDS-Agentを起動してからスケッチを書き込もうとするとコンパイルまではできますが、書き込みがどうやってもできませんでした。
※ なお、書き込んだスケッチはリセットスイッチを押さないと有効になりませんが、次のMicro-XRCE-DDS-Agentを起動してからリセットスイッチを押す必要があります。

3. Micro-XRCE-DDS-Agentの起動とESPrのリセット

  • 以下のコマンドで起動します、シリアル用のコマンドになります。(udpだとコマンド変わるので注意)
    MicorXRCEAgent serial --dev /dev/ttyUSB0 -b 115200

  • ESPrのリセットスイッチを押して書き込んだスケッチを有効にします

4. 動作確認(topicの表示)

新しく端末を開き、ESPrがROS2のトピックになっているかを以下のコマンドで確認します。
ros2 topic list

サンプルではトピック名はarduino_chatterとなっていますので、トピックリスト中にこれが表示されていればOKです。

/arduino_chatter

続けて、トピックの内容を以下のコマンドで確認します。
ros2 topic echo /arduino_chatter
サンプルではトピックは以下のように表示されます

data: Hello ros2arduino publish回数(実際の表示ではpublish回数の部分には数字が入ります)

最後に

さすがにROSと通信するとなると手間が多いですが、ここまでできればArduinoからROSにデータが送れたことになるので、ROS2+Arduino版のHello Worldができた!!、となるのでしょうか?
次回はArduino側でセンサーデータ取得してROSに送る、などやってみたいですね。

参考資料

  1. ROS2ではじめよう次世代ロボットプログラミング(書籍)
  2. ros2arduino利用時に必要なMicroXRCEAgentは、ビルド時と実行時のライブラリの依存関係に注意する必要があった話
  3. ROS2で自作ロボットの開発ツールを整える
3
3
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
3
3