search
LoginSignup
9
Help us understand the problem. What are the problem?

posted at

[ROS2 foxy] ESP32を使ってmicro-ROS for Arduinoで遊ぼう

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を導入

公式でセットアップツールが用意されているので、そちらを使います.
(使わない場合も試したけど、色々と依存パッケージを解消しないといけないみたい)

setupツールのインストール
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をビルドします.

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設定を見直そう!

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
What you can do with signing up
9
Help us understand the problem. What are the problem?