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

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

ロスタックチャンの顔をROS 2で動かす(micro-ROS・M5Stack)

ROS2対応スタックチャンを作ってみました。使用技術:ROS2・Feetech-SCS・Ubuntu・M5Stack - えいあーるれいの技術日記の続きです。

前回は、ros_controlで動くスタックチャン(ロスタックチャン)を作成しました。

このスタックチャンはros2_controlで動いており、他のサーボモータのHardwareInterface(例えばDynamixel)に移植しやすかったりします。


前回までは顔がなかったので、今回は顔を追加します。

ロスタックチャンではサーボモータをM5Stackから切っているので、本家のファームウェアでも簡単に動かすことができます。

ただし、せっかく足をROS対応にしているからには顔もROS仕様にしたいと思い、ここではROS2に対応したmicro-ROSを使用します。


micro-ROSとは?

micro-ROSとは、ROS2ノードとマイコンを接続するプロジェクトです。

他のROS2↔︎マイコンのプロジェクトと比較すると、幅広くプラットフォーム・デバイスをサポートしており比較的構築が簡単です。

ROS2との接続には、ホストPC上にmicro-ros-agentというROS2ノードを立ち上げる必要があります。

micro.ros.org

micro-ROSではArduinoプラットフォームがサポートされており、後述するm5stack-avatarが使えるのでこれを使用しました。


M5Stack-Avatarとは

M5Stack-Avatarとは、スタックチャンの顔のみの機能をC++Arduino)で開発できるパッケージです。

github.com

顔の種類や表情・色を自在に変更させることができ、どうやら音声を発することなどもできるそうです。

M5StackライブラリであるM5Unifiedが使えるので、このプログラムで動いたデバイス(例:M5CORE2)を他のデバイス(例:M5Stack-CORES3)にそのまま移植することもできます。


プログラム

ロスタックチャンの face ディレクトリに入れています。

github.com

依存関係は全てplatformio.iniに入っています。

また、ip_template.hppを元に ip.hpp を作成してIPアドレスSSID・Password・AgentPortを設定してください。

全て設定したら、PlatformIOでビルドして書き込んでください。


実行時はmicro-ros-agent(dockerコンテナ)を別ターミナルで開いた上でrostackchan_random.launch.py内の random_face ノードを実行してください。

その他インストール方法はREADMEをご覧ください。


その他

ケーブルをまとめていなかったので、ケーブルを固定するパーツを作成しました。

ネジの長さを全く考慮しておらず固定に失敗したため、テープで留めています…

サーボモータは5Vで動かしているので、そのケーブルからM5Stackの電源を取るように変更しています。

ついでにUSBから5Vを取れるようにもしています。(input用の5VからUSBの5Vが取れちゃったのでそのまま流用しています🙃)


M5Stack-Avatarは音声・テキストも出力できるそうなので、stringメッセージを読む機能も追加したいですね。(できたらここに追記します)