2carmodeのアイコン画像
2carmode 2024年01月31日作成 (2024年01月31日更新)
セットアップや使用方法 セットアップや使用方法 閲覧数 205
2carmode 2024年01月31日作成 (2024年01月31日更新) セットアップや使用方法 セットアップや使用方法 閲覧数 205

お掃除メイドロボコ

※未完成です。。。

概要

はじまりはルンバが掃除している際に、電源コードを巻き込んで異常停止している事件が起きた。
朝忙しく慌てて出る際にルンバに適した掃除環境が確立できていなかったのだ。
そこで今回、ルンバが何か床に異物を検出した際に、写真を撮り自分のところまで連絡してくれるサービスを作りたい。

キャプションを入力できます

今回、製作する必要のある部品は以下。

①異物検知システム

これは、ルンバにカメラを搭載した状態である一定間隔で写真を撮り、何もない床とは異なる状態になった場合異物有と検知する。今回はSPESENSEがAI処理が得意ということもあり、Neural network consoleを用いたAuto Encorderによる異常検知のしくみを用いることで実装に挑む。

システム構成
SONY Spresense開発環境
・Spresense メインボード
・Spresense 拡張ボード
・Spresense HDRカメラボード
・SPRESENSE用Wi-Fi add-onボード
https://www.switch-science.com/products/4042
・Aruduino IDE
・ルンバ

②異物の写真を送るチャットルームに投稿するシステム

これは、撮った写真をなんらかの手段で

システム構成
・SONY Spresense開発環境
・BOCCO emo開発環境
 ・BOCCO emo ※以下のものを流用し、言語生成AIによる対話も可能
  https://protopedia.net/prototype/4844
・GoogleAppsScript
・IFTTT Webhook and BOCCO emo

****Neural network consoleによる床の上の異物検出

1. データセットの準備

ひたすら床の画像を撮り貯める。今回は異物混入の画像として自分の足も居れた状態の写真も含めて、150枚ほど撮った。

キャプションを入力できます

2. Neural Network Consoleの設定

以下のURLの動画をもとに設定。
https://www.youtube.com/watch?v=8GGLlSlKdLw

キャプションを入力できます

学習→評価を実施し、学習済モデルであるNNBをダウンロードし、SPRESENSEへ組み込む。

モデルをSPRESENSEへ組み込み出来れば、ある時間間隔で撮影した写真をインプットに、モデルにその写真をインプットし、MSEの値に閾値を設けることで異物ありなしを判定する。
SPRESENSEでの実装はできていないため,Neural network console上の結果を例として示す。

キャプションを入力できます

上記より
・異物なしの床画像をInputしたときのMSEは0.003程度、
・異物ありの床画像をInputしたときのMSEは0.016程度、
となるため、0.01を閾値に異物と判定する。
判定されたら、Wifiに接続しhttp requestにてPOSTリクエストすることでGoogleAppsScriptのAPIを叩き画像をGoogleDriveへ投稿する。

※ここから途中。
以下を参考にArduino IDEにてコーディングする予定だが、モデルの組み込みはできず。。。
https://github.com/TE-YoshinoriOota/Spresense-LowPower-EdgeAI/tree/main/Chap08
開発が必要なロジック
・撮影した画像をSDカードから取り出す。
・学習済モデルへインプットしMSE値による異物判定をする
・異物があった場合は撮影した画像をhttp requestでPOSTする。
※ここまで途中。

3. GoogleDriveの画像をBocco emoに投稿する

以下にGoogleAppsScriptのBOCCO emoへの投稿を記載する。

// パラメータを設定します。
  const imageFileId = "";// MEMO: ご自身の画像のidを入力してください。
  const room_uuid = ""// MEMO: ご自身のBOCCO emoの部屋のuuidを入力してください。
  const token = "";// MEMO: BOCCOアカウントのアクセストークンを入力してください。

  // POSTリクエストを送信するためのURLを指定します。
  var postUrl = `https://platform-api.bocco.me/v1/rooms/${room_uuid}/messages/image`;

  // POSTリクエストのパラメータを設定します。
  var headers = {
    "accept": "application/json",
    "Authorization": "Bearer " + token,
  };

  // POSTリクエスト用のリクエストデータを成形します。
  const blob = DriveApp.getFileById(imageFileId).getBlob();
  var options = {
    "method": "POST",
    "headers": headers,
    payload: {
    image: blob,
  }
  };

  // POSTリクエストを送信します。
  try{
    var response = UrlFetchApp.fetch(postUrl, options);
    Logger.log(response.getContentText());
  }catch(e){
    Logger.log(e)
  }
  return response;
}

上記実装した上での床の画像送信した結果をスマートフォンなどで確認できる可能。
異物が検知された場合は、異物のデータがチャットルームに投稿されることとなる。

例:スマホのBOCCO emoアプリにおけるルーム画面に投稿された様子。
キャプションを入力できます

まとめ

今回は、SPRESENSEの実装において組み込みが間に合わなかったが、SPRESENSE自体をまだまだ使い倒せていないため、どんどん使いこなしていろんなIoTの実現手段として活用していきたい。
引き続き、今回のロボコの開発を続けて次回別のコンテストにも投稿したいと思います。

1
ログインしてコメントを投稿する