(2022年4月7日更新)
現在、ros2arduinoの使用はおすすめしません。以下の記事(microROS-ArduinoのM5Atom用設定(ESP32・ROS2))をお読みください。
以下本文
※ ROS-Foxyでstd_msgsが対応したので、example_interfacesへのポーティングは不要になりました。
この記事は、後々のROS2チュートリアル解説用にも使用する予定です。
現在、ESP32をROSと連携させるために使えるros2arduinoはメインブランチのREADMEではDashingの対応が最新ですが、少し書き換えたところ、Foxyでも動作を確認しました。この記事では、その環境構築法の備忘録を書きます。後々のバージョンでFoxyの公式対応を待たなくてもESP32+ROS2を引き継ぐことができます。
この記事では、シャットダウンボタンのサンプルプログラム(単にボタンのON/OFFでTrue/Falseがフリップするだけのプログラム)を動かします。
環境
- x86-64 PC (Ryzen7 2700x)
- Ubuntu20.04 LTS & ROS2-Foxy
- ROS2のワークスペース:
~/ros2_ws/src
- Arduinoのライブラリパス(Windowsでもコンパイル可):
~/
Micro-XRCE-DDSのコンパイル
マイコンをROS2と通信させるツールであるMicro-XRCE-DDSをインストールします。
MicroXRCEDDSAgent (1.3.0)とros2arduino (0.2.1)の組み合わせを使うため、Micro-XRCE-DDSは過去のバージョンを使います。
※1.3.0で動くみたいです(?)相性は各自で確かめてみてください。
$ 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/以下)
実際に動作させるプログラムをダウンロードします。次のリポジトリを使います。
$ 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 ---