LoginSignup
8
7

More than 1 year has passed since last update.

M5Stack社製ESP32系モジュールでのmicro-ROSサンプルの確認

Last updated at Posted at 2020-10-16

記事概要

micro-ROSがROS2 Foxy対応と時期を同じくしてESP32 MCUをサポートしたので,M5Stack社製ESP32系モジュール(M5StickC, M5Atom Lite, M5Atom Matrix)でpublisherサンプルを動作させるまでの手順を記す.先に挙げた3つのデバイスはいずれも,本手順で生成された同じファームウェアを同じように書き込むことができ,同じように動作した.
なお本記事の内容は基本的にはmicro-ROS公式サイト上の情報の拾い集めであり,筆者が新しく付け加えた情報は特にない.
micro-ROS_on_M5Atom.gif

環境

ベースOS ROS2 Micro-XRCE-DDS-Agent CPU, RAM
環境1 Ubuntu 20.04(amd64) Foxy v1.3.0 Core i5-7200U, 4GB x 2

手順

本手順においてはマイコン側ファームウェアのビルドまでをカバーし,動作確認の項で使用しているPC側のMicro-XRCE-DDS-Agentのビルドについては済んでいるものとする.大まかなステップとしては以下の通り.

Step1. ワークスペースの作成からファームウェアのコンフィギュレーション
Step2. WiFi接続の設定
Step3. ファームウェアのビルドと書き込み
Step4. 動作確認

ワークスペースの作成からファームウェアのコンフィギュレーション

# ROS2の環境変数を読み込む.
$ source ros2_foxy/install/setup.bash
# 筆者なりのワークスペースディレクトリ命名規則
$ mkdir -p uros_ws/freertos__esp32__int32_publisher
$ cd uros_ws/freertos__esp32__int32_publisher
$ git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup
$ rosdep update && rosdep install --from-path src --ignore-src -y
$ colcon build
$ source install/local_setup.bash
# 次のコマンドを実行すると大容量のファイル群(ESP32用ツールチェーンやESP-IDF)がダウンロードされるので,太い回線下での実行を強く推奨
$ ros2 run micro_ros_setup create_firmware_ws.sh freertos esp32
# [your local machine IP]の部分はDDS-Agentを起動するPCのIPアドレス.
# ポート番号は8888以外でも動くと思われるが,とりあえずデフォルトの8888を使用する.
# 具体的には -t udp -i 192.168.11.2 -p 8888 のように指定する.
$ ros2 run micro_ros_setup configure_firmware.sh int32_publisher -t udp -i [your local machine IP] -p 8888

WiFi接続の設定

下記コマンドを実行してmenuconfigに入る.ここではWiFiルータに接続するためのSSIDとパスワードを設定する.設定ファイルにはSSIDとパスワードが平文で保存されるので取り扱い注意.

$ ros2 run micro_ros_setup build_firmware.sh menuconfig
  1. micro-ROS Transport Settings に入る.
    0-entry_menuconfig.png

  2. WiFi Configuration に入る.
    1-micro-ROS_Transport_Settings.png

  3. WiFi SSID とWiFi Password を設定後,保存してメニューを抜ける.
    2-WiFi_Configuration.png

ファームウェアのビルドと書き込み

# 次のコマンドを実行して [100%] Built target app のメッセージが出たらビルド成功と思われる
$ ros2 run micro_ros_setup build_firmware.sh
# USBケーブル(M5StickCやM5Atomならデバイス側はType-C)で接続して,次のコマンドでファームウェアを書き込む
$ ros2 run micro_ros_setup flash_firmware.sh

動作確認

Micro-XRCE-DDS-Agentを起動する.

# MicroXRCEAgentのバイナリがあるディレクトリで実行する
$ ./MicroXRCEAgent udp4 --port 8888

dds-agent_waiting.png

マイコンをリセットして少し待つとWiFiルータからIPが配布され,セッションが確立される.
dds-agent_session-established.png

別のターミナルを立ち上げ,topic名を確認してsubscribeする.

$ source ros2_foxy/install/setup.bash
$ ros2 topic list
$ ros2 topic echo /freertos_int32_publisher

micro-ROS_on_M5Atom.gif

所感

publisherサンプルのソースコードを覗いてみると,FreeRTOSのタスクとして実装されているようである.より実践的なアプリケーションとしてI/Oを扱うには,ESP-IDFのAPIを叩くことになりそう(gpio_get_level関数やgpio_set_level関数など).

参考資料

1.micro-ROS公式サイト
2.ESP32 Overview
3.Micro-XRCE-DDS-Agent
4.ESP-IDF Programming Guide
5.@MAEHARA_Keisukeのポータル記事

8
7
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
8
7