えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

ROS2-Foxy+ros2Arduinoの環境構築法

(2022年4月7日更新)

現在、ros2arduinoの使用はおすすめしません。以下の記事(microROS-ArduinoのM5Atom用設定(ESP32・ROS2))をお読みください。

ar-ray.hatenablog.com


以下本文


※ ROS-Foxyでstd_msgsが対応したので、example_interfacesへのポーティングは不要になりました。

 この記事は、後々のROS2チュートリアル解説用にも使用する予定です。

 現在、ESP32をROSと連携させるために使えるros2arduinoはメインブランチのREADMEではDashingの対応が最新ですが、少し書き換えたところ、Foxyでも動作を確認しました。この記事では、その環境構築法の備忘録を書きます。後々のバージョンでFoxyの公式対応を待たなくてもESP32+ROS2を引き継ぐことができます。

この記事では、シャットダウンボタンのサンプルプログラム(単にボタンのON/OFFでTrue/Falseがフリップするだけのプログラム)を動かします。

環境

Micro-XRCE-DDSのコンパイル

マイコンをROS2と通信させるツールであるMicro-XRCE-DDSをインストールします。

MicroXRCEDDSAgent (1.3.0)とros2arduino (0.2.1)の組み合わせを使うため、Micro-XRCE-DDSは過去のバージョンを使います。

※1.3.0で動くみたいです(?)相性は各自で確かめてみてください。

github.com

$ cd ~
$ git clone https://github.com/eProsima/Micro-XRCE-DDS.git
$ cd Micro-XRCE-DDS/
$ git checkout v1.3.0
$ mkdir build
$ cd build
$ cmake ..
$ make
$ echo "MicroXRCEAgent='$(pwd)/MicroXRCEAgent'" >> ~/.bashrc

ros2arduino(Foxy)のインストール

 次にArduinoのライブラリの導入を行います。

 この記事で扱うros2arduinoは次のリポジトリを使います。DashingとFoxyでは、std_msgsがexample_interfaces担っているので書き換えなければなりません。

https://github.com/Ar-Ray-code/ros2arduinogithub.com

※ライブラリマネージャーからM5AtomとFastLEDのライブラリを、ボードマネージャーからESP32をインストールしておくこと

$ cd ~/Arduino/libraries/
$ git clone https://github.com/Ar-Ray-code/ros2arduino.git
$ git checkout 0.2.1_foxy

shutdown_btnの導入(~/ros2_ws/src/以下)

 実際に動作させるプログラムをダウンロードします。次のリポジトリを使います。

github.com

$ cd ~/ros2_ws/src
$ git clone https://github.com/Ar-Ray-code/M5AtomMatrix_playground.git
$ cd M5AtomMatrix_playground/
$ git checkout foxy-devel
$ cd ../../
$ colcon build --symlink-install

M5 Atom Matrixに書き込み

$ arduino ~/ros2_ws/src/M5AtomMatrix_playground/ROS2/shutdown_btn/m5atom_shutdown_btn_ros2/m5atom_shutdown_btn_ros2.ino

「ESP32 Pico Kit」を選択して、アップロードスピードを115200に設定して書き込みします。シリアルポートは/dev/ttyUSB0でした。

Micro-XRCE-DDSの起動

M5AtomとPCをUSB接続して電源を入れます。Wi-Fi仕様に書き直せばWi-Fiでも動きます。。

$ MicroXRCEAgent serial --dev /dev/ttyUSB0

※topicは見えますが、nodeは見えません。

$ source ~/.bashrc
$ ros2 topic echo /btn_msg
data: false
---
data: false
---
data: true
---
data: false
---