前置き
最近はIoT開発でラズベリーパイを使おう、という記事をよく見かける。 それで何をするといえば、OSのインストールとLチカ止まりの記事ばかりで、 それ以上の記事が見当たらない。 もっと物理的空間に影響を及ぼす何らかのものが登場して欲しい。
繊細に動く指が開発されれば、かなりの雇用が奪われると思われるが、果たして実用化できるのだろうか。
そのロボットの指欲しい。
IoTの構成
基本的にはIoTの構成は <Thing>==<Internet> である。 しかし、画像データを送受信する場合、レイテンシが大きい。 そのため、ローカルネットワークで完結するような実装は、現状は必要であると思う。
デジタルツイン
最近デジタルツインというものが流行っているが、もし現場で動く、迅速な判断が必要なロボットの場合、わざわざインターネット上にデータを送受信をするのではなく、やはり、ローカルネットワーク上で完結すべきであると思う。
とりあえず実装
バックエンド
とりあえず、ここではRaspberryPiとカメラを用いる。 それをローカルネットワーク上のサーバに送信し、 リアルタイムで画像処理、及び判断をするような構成を考えてみた。
送受信をするための通信プロトコルとしてWebSocketを使用する。 WebSocketライブラリを扱うものとして、Node.jsがある。しかし、インタプリタ言語(javascript)を使用しており、逐一コンパイルをするため、どうしても遅くなる部分がある。今回は速さを追求するため、コンパイラ言語(C/C++)を使用する。 また、ラズパイのOSのRasbianにはQtが初めから入っているのでQtWebsocketを使用する。
Sample github.com 上記のサンプルはQt5でないと動かかなかっため、ソースからインストールした。Raspberry Pi4まだかなぁ。
フロントエンド
複数のラズパイの情報をフロントエンド側で一括管理できたら面白そう。 ブラウザで操作できるようにする。
html5+css+javascriptを用いてwebsocket通信をできるアプリケーションは構築できる。しかし、規模が大きいアプリケーションはバックエンドとは違いフロントエンドはイベント駆動のため、設計が難しく、破綻しやすい。
そのため、コンポーネント指向を念頭に入れて設計していく必要があるらしい。 コンポーネント指向のフレームワークとして、ReactとVue.jsがある。
とりあえず、Vue.jsを使用して、ラズパイとの通信を実現していくことにする。