スタックチャンの顔をROS 2で動かしてみました(ROS2・M5Stack・Arduino) - えいあーるれいの技術日記 の続きです。
今回作成中のロスタックチャン、 9/14-9/15に開催される Maker Faire Tokyo 2023(MFT)にちょこっと登場する予定です。
大した作品というわけではないですが、創造主様曰く「ハードウェアの改造を加えていなくても歓迎です!」とのことなので、とりあえずこの謎技術を押し込むことにしました。
課題:機能の割にめっちゃ大きい
ロスタックチャンとはスタックチャンのハードウェアをROSで抽象化することでTFを発行することに成功したスタックチャンです。
ROS(Robot Operating System)というシステムはロボットの研究開発で人気のミドルウェアで多数のセンサを比較的自由に接続できてデバッグが容易です。
一方で、ROSを展示で最大限に生かすためにはディスプレイ付きのコンピュータが必須です。
それを考慮すると、ラップトップを持っていきたいところですがここでも問題が…
↑MFTではおそらくコンピュータを置くスペースは無さそうという問題です。(rt-netより)
そもそもスタックチャンは手乗りロボット。
手どころか台座に乗らないスタックチャンをMFTに持ってきたら最後、創造神の怒りは頂点に達し私はスタックチャンコミュニティに土下座。
私のメイカー人生は初出展を最後に早々に頓挫すること間違いないでしょう。
というわけで、私は「Linux&ディスプレイ付きだけど手乗りサイズ」をなんとか実現したいわけです。
そこで、買ってからそこそこ寝かせていたreTerminalを活かして実現することにしました。
reTerminalとは
reTerminalとは、中国の深圳発のIoT製品の開発・販売する会社Seeed studioの製品の一つです。
5インチのタッチディスプレイタブレットの中にはRaspberryPi4の産業用モジュールが入っており、小型ながらIoT製品の試作に使いやすい製品になっています。
タブレット端末ではありますが、EthernetやUSBポート、GPIOは生えているので従来のラズパイと同様に使用できます。
Bullseyeで使用したい場合は、Bullseyeを入れた後にseeed-linux-dtoverlaysをclone・ビルドする必要があります。
RaspberryPi OSでROS2を動かす。
ロスタックチャンはROS2を使います。
ROS2は基本Ubuntuで動かすものですが、ラズパイでRviz(3Dを描画するGUIアプリ)を動かすのはUbuntuのリッチなGUIではちょっと厳しいです。
そのため、RaspberryPi向けの軽量LinuxでROS2を直接動かすようにします。
私が開発しているrpi-bullseye-ros2では簡単にRaspbian + ROS2を実現することができます。
ちなみに、rostack-chanというロスタックチャン向けバイナリが含まれるROS2-dpkgは以下のURLのREADMEに貼っています。
これを使うことで、RvizのフレームレートがUbuntuでは5fps程度だったものが30fpsで動くようになります。
超軽量Rvizの動画😐(ラズパイ4) pic.twitter.com/SwuaHkZ0Z8
— Ar-Ray (@Ray255Ar) 2023年9月9日
ロスタックチャン自体は過去にも紹介しています。
(かろうじて)手乗りにする
ディスプレイが5インチとはいえとても大きいので、他に迷惑をかけない範囲でスタックチャンと組み合わせることを考えました。
その結果、ディスプレイの上にスタックチャンを乗せることにしました(それはそう)。
というわけで部品作りを行います。
スタックチャン→ディスプレイの部品
スタックチャンとディスプレイとの接続に関してはそこそこ悩みました。
分解が簡単でないと深圳に持っていったり返送したりする場合に困るからです。
また、スタックチャンはサーボとM5Stackの固定以外はネジを使っていないのもポイントですから、ネジもできるだけ抑えたいところです。
これを踏まえて作成した部品がこちらです。
スタックチャンとの接続は圧入で、reTerminalとの接続は角を活かしてネジ1本で済むようにしました。
倒れても良いように重心が後ろ方向になるようにしています。
reTerminalの足
このままではreTerminalが倒れてしまうので、足を作ります。
角度はロスタックチャンの接続部品に合わせて作ればいいのでそんなに難しくはない…はずですが、ちょっと苦戦しました。(今使用している足も微妙に長さが足りなかったり…)
ケーブルの削減
ロスタックチャンの設置・撤収を楽にするためにはケーブルの削減は必須項目でしょう。
抜き差しが必要なのは電源だけで十分ですから、ラズパイのGPIOから直接繋げられるようにします。
当面は汎用ボードを使用していますが、秋月のページに回路図が載っているのでこれを元に基板を自作すると良さそうですね。
FEETECHサーボ用インターフェースボード FE−URT−1: パーツ一般 秋月電子通商-電子部品・ネット通販
シリアルポート(/dev/ttyAMA0
)を /dev/ttyUSB0
の代わりに設定して直接通信します。
以下のページを参考に設定しました。
最後に自動セットアップのスクリプトを書きました。
からあげ先生の記事の「autostartを使用する方法」を参考に設定しました。(いつもお世話になっています🙏)
電源を入れて30秒くらい経過したら自動的にスタックチャンが動き出します。(もちろんmicro-ros agentも動きます)
ぜひMFT2023でリアルなロスタックチャンをご覧ください!
興味を持った方はぜひ作ってみてください!