ROS2とマイコン間を通信したい欲求が出てきて、ESP32にmicro-ROSを導入して遊びました.
その記録を残します.
構築環境
- Ubuntu 20.04
- ros2 foxy
- ESPDuino (esp32-wroom-32)
(ESP32 Dev Module)
すでにros2 foxyを導入していることを前提とします.
micro-ROSの構成
大雑把にいうと、
という関係になります.
micro-ROS-Agentは、ros2で利用されるDDSとESP32のメッセージの橋渡しを行う中継役を担います.
インストール
1.Arduino IDEにesp32ボードを導入
まず、ESP32ボードのArduino開発環境を手に入れます.
IDEツールバーの「ファイル」->「環境設定」から、追加のボードマネージャのURLに、以下のURLを追加する.
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
「ツール」->「ボード」->「ボードマネージャー」から、"esp32"を検索して、v2.0.4を選択しインストールします.
2. Arduino IDEにmicro-ROS for Arduinoを導入
先に、以下のURLからmicro-ROS for Arduinoのfoxy版v2.0.5をダウンロードしておきます.
https://github.com/micro-ROS/micro_ros_arduino/archive/refs/tags/v2.0.5-foxy.zip
IDEツールバーの「スケッチ」->「ファイルのインクルード」->「.Zip形式のライブラリをインストール」から、先程ダウンロードしたmicro_ros_arduinoをインストールします.
3. micro-ROS-Agentを導入
公式でセットアップツールが用意されているので、そちらを使います.
(使わない場合も試したけど、色々と依存パッケージを解消しないといけないみたい)
cd {ros2のwork spaceのパス}
source /opt/ros/$ROS_DISTRO/setup.bash
git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup
rosdep update && rosdep install --from-paths src --ignore-src -y
colcon build
source install/local_setup.bash
セットアップツールを使って、次は、micro_ros_Agentをビルドします.
ros2 run micro_ros_setup create_agent_ws.sh
ros2 run micro_ros_setup build_agent.sh
source install/local_setup.sh
4. Arduino IDEでmicro-ROSサンプルをESP32に書き込む
A. WiFI経由でmicro-ROS-Agentに接続
Arduino IDEで、「ファイル」->「スケッチ例」->「micro_ros_arduino」->「micro-ros_publisher_wifi」を選択します.
44行目のset_microros_wifi_transportsにWIFI情報を書き込みます.
IPは、micro-ROS-Agentを導入したPCのIP.
PORTは、デフォルトで8888ですが、Agent起動時にポートは変えることができます.
set_microros_wifi_transports("WIFI SSID", "WIFI PASS", "IP", "PORT");
「ツール」->「ボード」から、「ESP32 Arduino」->「ESP32 Dev Module」に変更し、コンパイルして書き込みましょう.
B. USB経由でmicro-ROS-Agentに接続
Arduino IDEで、「ファイル」->「スケッチ例」->「micro_ros_arduino」->「micro-ros_publisher」を選択します.
「ツール」->「ボード」から、「ESP32 Arduino」->「ESP32 Dev Module」に変更し、コンパイルして書き込みましょう.
5. micro-ROS-Agentを起動する
ここまで行ければ、あとは、micro-ROS-Agentを起動するだけで、ros2に接続できます.
A. WiFI経由でmicro-ROS-Agentに接続
ros2 run micro_ros_agent micro_ros_agent udp4 --port [PORT] -v6
B. USB経由でmicro-ROS-Agentに接続
ros2 run micro_ros_agent micro_ros_agent serial --dev [ESP32のデバイス /dev/tty〇〇] -v6
6. トピック確認
最後にESP32から送られたトピックを確認しましょう.
- /topic_name : micro-ros_publisher_wifi
- /micro_ros_arduino_node_publisher : micro-ros_publisher
で配信されています.
ros2 topic list
---
/topic_name
/parameter_events
/rosout
トラブル対応マニュアル
※トラブルが起きたら、追加していきます.
-
Arduino IDEでコンパイルできないんだが?
- ESP32のversionが違うかも.v2.0.4になってるか確認しよう
- ついでに、micro-ROS for Arduinoのバージョンもv2.0.5であることも確認しよう
- 再起動も忘れずに.
-
micro_ros_setupがコンパイルできないんだが?
- 別のワークスペースを作ってもう一度やってみよう.何か別のパッケージが干渉しているかも?
-
全く通信されないんだが?
- ROS_DOMAIN_IDを見直そう! おそらく、ROS_DOMAIN_IDを変えているに違いない!
- WIFI設定を見直そう!