あのROS2トピックをagentレスでpub/sub可能なライブラリ「mros2」にEPS32バージョンが登場したようです。
@takasehideki ドヤァ pic.twitter.com/3YoXBvVbCQ
— Shintaro Hosoai (@ShintaroHosoai) 2023年5月11日
Hosoaiさんが移植を行っており、esp-idfがサポートされているESP32シリーズは一通り動いているようです。
これまでmros2と言えばSTM32のEthernet接続だったので、ボードの幅が増えてワイヤレスに繋げられるのはとてもいいですね。
ROS2のトピックを投げるスタックチャンも実現するかも!?
早期アクセスで招待されていたので、色々質問しつつ環境構築して遊んでいました。
最初はDockerで動かそうかなとも思っていたのですが、面倒そうだったのとesp-idf環境は1回整えてしまえばずっとそれを使い続けるだけなので、そんなに需要を感じませんでした。
…が、mros2をきっかけにしてesp-idfを触るひとも少なくないようで、環境構築にDockerを使いたいという要望がありました。
そこで、今回はこれをDocker環境にしたのでその説明をしようと思います。
これで初心者でも楽々環境構築ですね(?)
動かし方
現在PRでmros2-esp32に投げているので将来的にmros2-esp32のリポジトリになりますが、インストール手順を示します。
要件
ESP32であればほとんどの場合動くと思いますが、現段階ではESP32S3のみで動作確認しています。
リポジトリ
RP先
使用方法
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
の引数は次のとおりです。
- デバイスの接続先: デフォルトでは
/dev/ttyUSB0
になっています。 - mros2-esp32のディレクトリ : 指定先に該当するフォルダがない場合は自動でダウンロードします。
- 対象のワークスペース : echoback_stringを参考に構築してください。
- 対象のボードの種類(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に詳細を書いてください。できる範囲で環境の再現を行います。