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

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

mros2-esp32をDocker内でビルドする

あのROS2トピックをagentレスでpub/sub可能なライブラリ「mros2」にEPS32バージョンが登場したようです。

Hosoaiさんが移植を行っており、esp-idfがサポートされているESP32シリーズは一通り動いているようです。

これまでmros2と言えばSTM32のEthernet接続だったので、ボードの幅が増えてワイヤレスに繋げられるのはとてもいいですね。

ROS2のトピックを投げるスタックチャンも実現するかも!?

早期アクセスで招待されていたので、色々質問しつつ環境構築して遊んでいました。


最初はDockerで動かそうかなとも思っていたのですが、面倒そうだったのとesp-idf環境は1回整えてしまえばずっとそれを使い続けるだけなので、そんなに需要を感じませんでした。

…が、mros2をきっかけにしてesp-idfを触るひとも少なくないようで、環境構築にDockerを使いたいという要望がありました。

github.com

そこで、今回はこれをDocker環境にしたのでその説明をしようと思います。

これで初心者でも楽々環境構築ですね(?)


動かし方

現在PRでmros2-esp32に投げているので将来的にmros2-esp32のリポジトリになりますが、インストール手順を示します。


要件

  • amd64IntelAMD製64bitCPUのこと)
  • USB接続が可能なdocker-compose環境(Ubuntu22で動作確認済み)

ESP32であればほとんどの場合動くと思いますが、現段階ではESP32S3のみで動作確認しています。


リポジトリ

github.com

RP先

github.com


使用方法

docker-composeを使用可能な状態で次のコマンドでビルド&書き込みを行います。

git clone https://github.com/Ar-Ray-code/mros2-esp32.git -b add_docker
cd mros2-esp32
bash build_example.bash /dev/ttyACM0 ../../mros2-esp32 ../workspace/echoback_string esp32s3

build_example.bashの引数は次のとおりです。

  1. バイスの接続先: デフォルトでは /dev/ttyUSB0 になっています。
  2. mros2-esp32のディレクトリ : 指定先に該当するフォルダがない場合は自動でダウンロードします。
  3. 対象のワークスペース : echoback_stringを参考に構築してください。
  4. 対象のボードの種類(esp32・esp32s2・esp32s3...)

そのほかに必要なIPアドレスの設定などはmros2-esp32を参考に設定してください。


便利なところ

この環境の便利なところは、mros2-esp32のディレクトリをワークスペースから隔離することとmros2-esp32の設定を直接変更できることのいいとこどりができることです。


このビルドツールでは、mros2-esp32のディレクトリ内にワークスペースを置く必要がないのでGitHubなどで管理しやすくしています。

(もちろんワークスペース内にmros2-esp32を置くことも可能です)


ビルド時にDocker内にマウントできるので、mros2-esp32のディレクトリ名・ワークスペース名関係なく同様にビルドができます。


そんなに複雑ではなかったのでdocker-composeを作るほどではなかったですが、bashファイルで引数を .env に書き込んで起動させています。


なんとかしたいところ

esp-idfではデフォルトでjinja2がインストールされていないものの、jinja2はDockerfile内でインストールできないです。

そのため、Dockerfileではjinja2のダウンロードだけして、プロジェクトのビルド時にjinja2をインストールしています。

つまり、ビルド毎にjinja2をインストールしていることになります。(ちょっと無駄が…)


対象のdockerfile

FROM espressif/idf:release-v5.1

RUN git clone https://github.com/pallets/jinja.git -b 3.1.2 /jinja2
COPY ./build_mros2.bash /tmp/build_mros2.bash


プロジェクトのビルドスクリプトの一部

#!/bin/bash
SCRIPT_DIR=/mros2-esp32/workspace/target/

. /esp/esp-idf/export.sh
cd /jinja2 && pip3 install .

これの解決策が欲しい…


うまくビルドできなかったら

以下のissueに詳細を書いてください。できる範囲で環境の再現を行います。

Issues · Ar-Ray-code/mros2-esp32-env · GitHub