ROS2対応スタックチャンを作ってみました。使用技術:ROS2・Feetech-SCS・Ubuntu・M5Stack - えいあーるれいの技術日記の続きです。
前回は、ros_controlで動くスタックチャン(ロスタックチャン)を作成しました。
このスタックチャンはros2_controlで動いており、他のサーボモータのHardwareInterface(例えばDynamixel)に移植しやすかったりします。
ダイナミクセルチャンにも即対応できました🥰#スタックチャン #ROS2 #raspberrypi pic.twitter.com/w6f0WIPSvv
— Ar-Ray (@Ray255Ar) 2023年8月13日
前回までは顔がなかったので、今回は顔を追加します。
ロスタックチャンではサーボモータをM5Stackから切っているので、本家のファームウェアでも簡単に動かすことができます。
ただし、せっかく足をROS対応にしているからには顔もROS仕様にしたいと思い、ここではROS2に対応したmicro-ROSを使用します。
micro-ROSとは?
micro-ROSとは、ROS2ノードとマイコンを接続するプロジェクトです。
他のROS2↔︎マイコンのプロジェクトと比較すると、幅広くプラットフォーム・デバイスをサポートしており比較的構築が簡単です。
ROS2との接続には、ホストPC上にmicro-ros-agentというROS2ノードを立ち上げる必要があります。
micro-ROSではArduinoプラットフォームがサポートされており、後述するm5stack-avatarが使えるのでこれを使用しました。
M5Stack-Avatarとは
M5Stack-Avatarとは、スタックチャンの顔のみの機能をC++(Arduino)で開発できるパッケージです。
顔の種類や表情・色を自在に変更させることができ、どうやら音声を発することなどもできるそうです。
M5StackライブラリであるM5Unifiedが使えるので、このプログラムで動いたデバイス(例:M5CORE2)を他のデバイス(例:M5Stack-CORES3)にそのまま移植することもできます。
プログラム
ロスタックチャンの face
ディレクトリに入れています。
依存関係は全て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メッセージを読む機能も追加したいですね。(できたらここに追記します)