1
3

More than 1 year has passed since last update.

Dockerで環境構築したmicro-ROSでカスタムメッセージを利用する方法

Last updated at Posted at 2022-12-27

micro-ROSで配列データを扱うには, MultiArray系のメッセージを利用します.
しかし, このMultiArray系のメッセージはセットアップが少し面倒で, かつmallocによる動的メモリ確保を行う必要があります.

以上の2点が理由で「ロボコンにおいてはカスタムメッセージ作った方が楽では?」という考えに至りました.


マイコン向けにカスタムメッセージをビルドする方法を調べたところ, 公式サイトにそれらしいものを見つけました.

ところが, Dockerでmicro-ROSの環境を構築していたこともあってかこのページの通りに実行しても上手くいかず...

諦めきれずにさらに調査を進めたところ, 以下のページの方法にてビルドすることができました.

大筋はこのページの通りに実行すれば上手くいくのですが, いくつか違うポイントもあったので本記事で紹介します.

環境

Dockerでmicro-ROSの環境構築をしていることを前提とします.
PlatformIOで開発を行っている想定で話を進めますが, ArduinoIDEとかでも可能です.

私が動作を確認した環境は以下の通りです.

項目 バージョン
OS Ubuntu22.04
ROS2 humble
マイコン STM32F746ZG

カスタムメッセージをビルドする

始めに micro_ros_arduino ライブラリの中にある extra_packages ディレクトリまで移動します.
私の環境では以下の場所でした(参考ページと若干違います). <>の部分は適宜読み替えてください.

/home/<USER_NAME>/Documents/PlatformIO/Projects/<PROJECT_NAME>/.pio/libdeps/<ENV_NAME>/micro_ros_arduino/extras/library_generation/extra_packages

次に extra_packages ディレクトリ内にカスタムメッセージのファイルを作成します.
手順はmicro-ROS公式サイトの通りです(msgファイル記述・CMakeLists.txtとpackage.xml書き換えまで).

今回はサイト通りに my_custom_message/msg/myCustomMessage というファイルを作成した想定で話を進めます.

続いて micro_ros_arduinoライブラリのルートディレクトリに移動します.
私の環境では以下の場所です.

/home/<USER_NAME>/Documents/PlatformIO/Projects/<PROJECT_NAME>/.pio/libdeps/<ENV_NAME>/micro_ros_arduino

いよいよビルドを行います.
今回はターゲットとなるマイコンのMCUがCortex-M7なので, cortex_m4 オプションを付けています.
本来はCortex-M4用のオプションですが互換性があるので気にしないことにします.

docker pull microros/micro_ros_static_library_builder:humble
docker run -it --rm -v $(pwd):/project --env MICROROS_LIBRARY_FOLDER=extras microros/micro_ros_static_library_builder:humble -p cortex_m4

使えるオプションの代表例は以下の通りです.
extra_packages ディレクトリと同じ階層にある library_generation.sh に書かれています.
オプションを指定しないとすべてのターゲットに対してビルドを行うのか, かなり時間がかかりますのでご注意ください.

ターゲット オプション
OpenCR opencr1
STM32F4 cortex_m4
Teensy 4.0(4.1?) teensy4
ESP32 esp32

これでビルドは完了です.
上手くいっていれば以下の場所に作成したメッセージがビルドされたものが格納されています.
逆に失敗していると空のディレクトリになっているかと思います.

/home/<USER_NAME>/Documents/PlatformIO/Projects/<PROJECT_NAME>/.pio/libdeps/<ENV_NAME>/micro_ros_arduino/src/my_custom_message

実際のプログラムでは次のようにしてカスタムメッセージを利用します.

#include <my_custom_message/msg/my_custom_message.h>

my_custom_message__msg__MyCustomMessage msg;

msg.bool_test = True;
msg.uint16_test = 223;

まとめ

micro-ROSカスタムメッセージをビルドして使えるようにする手順を, 参考ページを基に紹介しました.
たまにメッセージの内容によっては通信ができない現象が発生することがあったので, それについて調査を進めていきたいと考えています.
何かお気づきの点がありましたらコメントいただけますと幸いです.

1
3
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
1
3