RaspberryPi × Gravio でエッジコンピューティング入門

13 min read読了の目安(約11800字

Raspberry Pi × Gravio

Raspberry Pi 4 と Gravio Studio, Gravio HubKit を組み合わせてエッジコンピューティングへ入門してみます.後半では Ubidots を用いてデータの可視化を行います.

環境情報

  • Raspberry Pi 4 Model B
    • OS: Ubuntu Desktop ( 21.04 )
  • Gravio Studio 4
  • Gravio HubKit 4
  • Ubidots STEM
    ※ Gravio は Free プラン

環境構築

Raspberry Pi 自体のセットアップは終わっているものとして, Gravio の環境構築を行うところから行っていきます.また,Gravio は Raspberry Pi OS に対応していないので Ubuntu を載せた Raspberry Pi を利用します.

Gravio Studio 4 のインストール

Gravio HubKit 4 には Gravio Studio 4 で接続を行う.
Gravio Studio はそれぞれのローカルマシンへインストールを行うので,Gravio の製品ページから各環境に合った Gravio Studio をインストールしておく.

Raspberry Pi 4 へ Gravio HubKit をインストール

公式ドキュメントの Raspberry Pi セットアップページを参考にしながら Raspberry Pi に Gravio HubKit をインストールします.

  1. apt を最新化する
sudo apt update
sudo apt upgrade
  1. sudo apt install -y unzip docker docker-compose で unzip, docker, docker-compose をインストール
  2. sudo apt install avahi-utils で avahi をインストール
  3. 任意のディレクトリに HubKit 開発用のディレクトリを作成し zip ファイルを解凍
mkdir hubkit
cd hubkit
mv <zipパッケージのパス>/setup_linux_v4.zip .  // zipを作成したディレクトリに移動
unzip setup_linux_v4.zip  // 解凍
  1. HubKit の環境設定
sudo cp ./90-gravio-serial-deivces.rules /etc/udev/rules.d/
chmod 755 setupcoordinator_hubkit.sh
./setupcoordinator_hubkit.sh

// docker コンテナの起動
sudo docker-compose up -d
  1. sudo reboot で Ubuntu の再起動

※ アップデートの場合は公式ドキュメントのこちらの記事を参考にする

Gravio Studio と HubKit の接続

各自の PC から Gravio Studio を使って Gravio HubKit に接続する.

  1. Gravio Studio の右上にある「+」マークから新規の Hub を追加する ( 以下の画像ではすでに設定済み )

Gravio Studio

  1. 新規 Hub の情報を入力する
    • Hub名は任意のもの
    • HubKit DNS名/IP はIPアドレスを入力
      • Raspberry Pi のターミナルから ip a でIPアドレスを調べる
      • 無線LANなら wlan0inet のIPアドレス

Hub設定

  1. 設定した Hub を選択する ( 接続に成功すると以下の画像のような Actions の画面が開く )
    Actions

エッジコンピューティング

ここからエッジコンピューティングの実験をしていきます.Raspberry Pi と ONVIF 規格に対応したネットワークカメラを接続し,取得したカメラ画像から写った人間の数を推論します. ( 本当はUSBカメラでやりたかったのですが,Gravio4 ではまだUSBカメラに対応していないとのことです )

※ ネットワークカメラを Raspberry Pi と同じネットワークに参加させておいてください ( カメラによって設定は違うのでここでは割愛 )

Gravio Studio でデバイスの設定

今度は Gravio Studio からデバイスの設定を行う.Gravio Studio の Hub 設定画面からソフトウェアセンサの作成を行う.

  • 先ほど作成した Hub をダブルクリックし,Hub の設定画面を開く.

Hub設定

  • 設定画像推論モデル から NumberOfPeopleTensorFlow を選択する ( Gravio の Free プランだとこれしか選べない )

設定

  • デバイスエリア の「+」アイコンをクリックしエリアを追加する ( エリアというのはエッジコンピュータの設置場所を指す )

area

  • レイヤーを追加する ( レイヤーはセンサの種類を指す )
    • このとき,最初に NumberOfPeopleTensorFlow を追加していると一番下で選択できるようになっている

layer

  • レイヤーを選択し論理デバイスの追加からネットワークカメラを追加する ( ネットワークカメラの設定がうまくいっていないと何も表示されない )

IPCamera

  • センサーを「オン」にする

on

  • Gravio Studio のデータタブで推論で取得したデータを確認する
    • センサを ON にしたあと更新や再起動すると取得したデータが画面に反映される

データ

  • 値のところに推論された人数のデータが表示されれば成功!
    • ちゃんと人数も合っています!

備考

データが取得されるタイミングは,カメラのプロパティのキャプチャ間隔で指定したタイミングとなるようです ( https://doc.gravio.com/manuals/gravio4/1/ja/topic/software-sensors ).また,NumberOfPeopleTensorFlow の推論モデルでは人物の顔を正面から映したときに認識されるようで,有効範囲は数メートルとなるそうです.

CSVファイルへの書き出し

カメラに映った人数のカウントに成功し,データが取得できました.HubKit の DB に格納されたデータは Gravio Studio から Action を設定することでノーコードで簡単なアプリケーションを作成できます.今回は,取得したデータをCSVファイルに書き出す Action を作成するところまで行います.

Action の作成

Action は複数のステップから構成される.これらは Action Editor から作成していく.
ステップには様々な機能を持ったコンポーネントを指定することができる.

  • Gravio Studio の Hub 一覧から Action 設定画面を開く

action設定

  • 設定画面の「+」ボタンから新しい Action を追加

action設定

  • 追加した Action ダブルクリックで Action Editor に入る

action editor

  • HubKit に格納されているデータを扱うため,ステップに Sensor Data DB を追加する

Sensor Data DB

  • エリア,レイヤー,物理デバイスID に最初に設定したデバイスの情報を登録していく ( 物理デバイスIDは接続しているデバイスの一覧から確認できる )

  • Sensor Data DB のドキュメントを参考に設定を入れていく

  • 2つ目のステップで Join を追加する ( 特に設定は入れない )

  • 3つ目のステップに CSVWrite を追加する

CSVWrite

  • CSVWrite では出力形式をファイルにし,ファイル名を指定する

  • 画面右上の「▶」で実行 ( コンソールにエラーが出なければ OK )

実行

  • Action Editor を閉じ,Action 一覧画面へもどる

Action一覧

  • Action Data Folder を開き保存したファイルを選択し「ダウンロード」アイコンをクリック

Download

  • ダウンロードしたCSVデータを開いて問題なければ完了!

csvデータ

データの可視化

取得した People Count のデータをわかりやすくするために可視化してみます.ここから先は Reference 7 の記事 ( Gravio4からCO2データをUnidotsに送って可視化する )が非常にわかりやすいのでこれをそのまま参考にしてすすめていきます.

Ubidots の設定

可視化にはダッシュボードのデザインが豊富な IoT クラウドサービスの Ubidots を使います.あらかじめフリープランの STEM でアカウントを作成しておき,デバイス設定を完了させておきます.

  • アカウントを作成したらログインし => ダッシュボード => Devices

Ubidots Dashboad

  • Blank Device で新しいデバイスを追加する

devices

blank device

  • 適当なデバイス名を設定して「 ✓ 」

device

Gravio HubKit でデータ送信 Action の設定

Gravio Studio から Gravio HubKit にログインし,データ送信用の Action を設定していきます.

  • Gravio Studio で Gravio HubKit へログイン
  • 新しいアクションを作成し,ステップに HTTP Request のコンポーネントを追加する
    • メソッドは POST
    • URL は https://industrial.api.ubidots.com/api/v1.6/devices/{DEVICE_LABEL}
      • DEVICE_LABEL には Ubidots で作成したでデバイス ( Ubidots ) の API Label を入れる ( ここでは rpi4-camera )
    • フォーマットは {"{variable-label}": VALUE}
      • variable-label もデバイスの API Label
    • 認証は X-Auth-Token のヘッダーにトークンを指定する
      • トークンは Ubidots のデバイス詳細に Token として hidden で記載
      • Content-Typeapplication/json

new action

- コンポーネントのインプットを指す `Pre Mappings` や次のコンポーネントに渡すアウトプットを指す `Post Mappings`, `cv` や `cp` といったプレフィックスについては[ドキュメント](https://doc.gravio.com/manuals/gravio4/1/ja/topic/action-component-spec)を参照してください
  • Ubidots の Device に variable-label と同じ変数名で row データを作成する

variable-label

  • Action を実行

action 実行

  • Ubidots 側でダミーのデータが自動で入っていれば成功 ( 値は 0.00 )

data

トリガーの設定

Gravio Studio でトリガーを設定し,定期的にアクションを実行できるようにします.
トリガーはイベントトリガーの場合はセンサー値が取れたときに実行され,タイマーであれば設定した時間毎にトリガーが実行されます.今回は人の検出なのでイベントトリガーだけを設定します.

  • Studio から HubKit にログインし,トリガー設定画面を開く

トリガー設定

  • イベントトリガーを登録する

event

  • トリガーを ON に設定する

trigger

※ こちらの画像ではアクションの名前が RPI4-peopleCount-visualization から HTTP-peopleCount に変更されています

※ 実験ように作ったタイマーも設定されていますが実際はイベントトリガーだけ設定すればOKです

  • 新しいデータが入ってくるのを少し待ってから Ubidots を確認すると...

可視化

  • Ubidots 側でもデータが入ってきているのが確認できればトリガーの設定に成功

ダッシュボードの設定

これだけだとまだ見づらいのでダッシュボードを設定して可視化を完了させます.

  • Ubidots のトップページに戻る

dashboard

  • Add new Dashboard でダッシュボードを追加する ( 名前は適当なもの )

add

  • Add new Widget でダッシュボードのウィジェットを追加する

widget

linechart

  • 元記事と同様に Line Chart を選択します
  • データは最初に設定したものを選択

data

  • 全部設定すると...

visualization

  • ダッシュボードへのデータの追加に成功!

  • peopleCount なので Gauge Widget も追加して完了
    comp

  • 最後にダッシュボードの共有設定を行い,外部から閲覧できるようにする

share

  • create new link で払い出される URL にアクセス

create new link

  • ちゃんと表示されればデータの可視化まで完了!

この記事では特定の部屋にいる人数を可視化しています
上記で試したとおりダッシュボードを公開していますのでこちらの URL から確認することが可能です.

Summary

Raspberry Pi 4 と Gravio 4 を用いてノーコードでエッジコンピューティングに入門しました.自作で People Count を行おうとすると Deep Learning 周りでなかなかハードルが高いですが,Gravio を導入することで簡単にエッジコンピューティングに入門できることがわかりました.

とはいえ,Gravio 自体の導入もなかなか難しいものがあります.ドキュメントを参考にしつつ進めましたが,最近 Gravio が3から4になったようで少し手間取りました.最終手段としては Slack コミュニティがあるのでそこで質問を投げることで解決することができました.Reference にも上げていますがドキュメントや関連記事は豊富だと思うので参考になると思います.

今回は Gravio のフリープランでしたが, Basic 以上でもっといろいろなことができるので試してみるといいかもしれません.

また,Ubidots という可視化ツールを使うことでデータの可視化にも挑戦しました.複数のツールを組み合わせて簡単にエッジコンピューティングを行いましたが,それぞれのツールの使い方になれる必要もあり,思い通りのアプリケーションを作ろうと思うといくつのハードルがあります.

次はこれらを応用してアプリケーションの開発に挑戦していきたいと思います.

Acknowledgement

この記事を書くにあたって,質問に答えていただいた Gravio コミュニティの皆様に感謝申し上げます.

Trouble Shooting

Ubuntu の電源を切ったら Gravio Studio から Gravio HubKit に接続できなくなった

  • docker コンテナが起動しているか確認
  • していなければ sudo docker-compose up -d
  • Gravio Studio で既存の HubKit 設定を削除
  • IPアドレスが変更されていたので,新たなIPアドレスを設定して成功

Raspberry Pi で HubKit を起動したまま放置していると Raspi がフリーズして HubKit も停止する

  • Raspberry Pi の RAM が 4GB で Ubuntu Desktop を使っているとウィンドウシステムなどでリソースが使用され推論の処理で落ちてしまうことがあるようです

Reference

  1. Gravio
  2. Gravio JP
  3. Gravio HubKit 4 マニュアル
  4. Gravio 4 アクションとは
  5. Gravio 公式ブログ
  6. Gravio 4でCO2データをCSVに出力する
  7. Gravio 4からCO2データをUnidotsに送って可視化する
  8. Ubidots
  9. Ubidots Doc
  10. Ubidots Doc (send-data)
  11. Raspberry Pi 4 セットアップまとめ - Ubuntu編 -