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

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

M5Atomは最小サイズのROS2マイコンになるのか!?

M5 Stack Atom Matrixを購入しました。

f:id:Ray_ar:20210104132936j:plain
M5 Atom Matrix

想像以上に小さくて驚きました。私はAmazonで購入しましたが、Switch-Scienceなどの専門ショップでも購入することができます。詳しいスペックはそこで確認するといいと思います。

本題

 今回は、このM5AtomMatrixがROS2で動くのか!?ということの動作確認を行います。2.4cm四方のマイコンでROS2ノードが動くとなると、狭い場所にも組み込みができる可能性があるということでいろいろ応用が利きそうな気がします。バッテリーがついていないのは少しネックになるのかも知れませんが…

 動作内容は、コンピュータからキーボード操作を介してTwist型のメッセージを送り、それをディスプレイ表示させるというものです。

動作プログラムは以下のgithubリンクに載せています↓。

github.com

動作の様子です。

f:id:Ray_ar:20210104134741g:plain
動作例

システムブロック図です。全てのコンピュータ・マイコンWi-Fiで接続されています。

f:id:Ray_ar:20210104135009p:plain
システムのブロック図

 システムブロック図では、Raaspberry Pi4がMicro-XRCE-Agentになっていますが、Raspberry Piである必要はありません。家では、Micro-XRCE-Agent用のRaspberry Piを常に起動させておくことで、いつでもマイコンをROS2に接続できるようにしています。そこで、環境構築済のものをそのまま使いました。

 図形については、表示方法がすぐに理解できなかったので、頭の悪い方法をとりました。1ピクセルずつ描画していく方法です。5x5のLEDを光らせることくらいESP32-pico君なんだから余裕でしょとは思いますが…

f:id:Ray_ar:20210104134842p:plain

上方向の三角を表示させる関数です。ArduinoでM5.dis用のアイコン生成スクリプト作るべきなんかなぁ

void up_icon()
{
  M5.dis.clear();
  M5.dis.drawpix(7, 0xf00000);
  
  M5.dis.drawpix(11, 0xf00000);
  M5.dis.drawpix(12, 0xf00000);
  M5.dis.drawpix(13, 0xf00000);

  M5.dis.drawpix(15, 0xf00000);
  M5.dis.drawpix(16, 0xf00000);
  M5.dis.drawpix(17, 0xf00000);
  M5.dis.drawpix(18, 0xf00000);
  M5.dis.drawpix(19, 0xf00000);
  M5.update();
}

いつするかは予定を決めていませんが、次はジャイロセンサとかの情報を送信できればなぁと思っています。