HaskellでつくるRover Mini ECUモニタ

暫く進捗がなかった「Haskell でつくる Rover Mini ECU (MEMS) モニタ on ラズパイ」プロジェクト(長い!)ですが,最近ようやくちょっと前進しました。

何が進捗したかというと,ラズパイで実際にプロジェクトをビルドし,TUIではありますが,動作させられたということ。上記の写真はビルド中の画面です。動作画面は今まで投稿したことのあるmacOS上でのものと同じデザインなので割愛。

今まではMacBook Airで動作させていたので,毎回MBAを開いて電源線とHDMI線をつないで端末プログラムを開いてとやっていました。これはこれで,常に大画面で様子が見られて便利だったし,キーボードやトラックパッドが使える,64bitで動かせる,という利点もあったわけですが,元々はラズパイという極小のpcを使って電池駆動させられたらいいなと思っていたプロジェクト。安定動作するまではMBAでもやむを得ないかなと思っていました。ですがやはりラズパイでやりたい。

ラズパイでの動作の課題はラズパイのスペックの非力さ。Haskell(GHC)でTUIを使おうとすると結構いろんなライブラリを読み込む必要があるのですが,いかんせん手持ちの2Bではさすがに制約が大きく,簡単なHaskellプログラムならビルドも動作も可能だけれど,大きめのライブラリはコンパイルの途中で止まってしまっていました。仮想メモリ領域を確保したり,並列動作をやめさせたりと試行錯誤してきましたが,すでにラズパイは2世代以上の世代交代をしています。価格も数千円と当初のものとほとんど変わらないので,少しだけ時代に追いついて3Bを購入し,実験に投入しました。

気がついてみると,時代はARMへと転換しつつあります。Haskell(というよりGHC)の重点開発対象にもARMが入る様になったので,ラズパイを使っていくのも悪くない感じ。

ちなみにこんな感じの画面です。左側はECU(MEMS)が吐き出しているリアルタイムのエンジン制御用データをそのまま出力。これらのデータをもとに右側でテキスト文字でグラフを描いていますが,さすがに見にくいので今は元の通り,単項目ごとのグラフを表示させています。

Rover Mini ECU(MEMS) Monitor CSV Data

Rover Mini ECU(MEMS) Monitor CSV Data

そして記録を残してるのは上記のようなCSV形式。今時のプログラムらしく,本当はデータベースを利用するとか,IoTらしく低電力WANなどを使ってクラウドにあげてしまうとかするべきなのでしょうが,そこまではまだ手が回っていません。