FireBeetle 2にHuskylensを接続し、Huskylensを使って物体認識を行います。

Huskylensについて

Huskylensは、Kendryte K210を搭載したAIカメラで、5.0メガピクセルのイメージセンサー、背面には、2.0インチIPSディスプレイを搭載しています。Huskylensの詳細については「HuskyLens」を参照します。次の画像ではHuskylensにフレームを取り付けています。

Huskylensを使った学習

Huskylensでは次の物体を学習させた物体認識機能がディフォルトで実装されており、電源を入れるとすぐに物体検出が確認できます。

実際に確認した画像「bird」を次に示します。物体はイラスト化してカードにプリントしました。

画像「dog」を次に示します。

今回使用したタグの学習手順を次に示します。

  1. Huskylensでは、マーカーが貼られた物体を撮影することで、3次元空間上の物体の位置や姿勢を迅速かつ正確に取得できる「April Tags」が使用できます。テストのために次のApril Tagsが使用できます。使用するマーカーは個々にカードにプリントしました。
  2. ディフォルトでは一つのタグしか認識できないので複数のタグを認識できるように、「function」ボタンを回して「Tag Recognition」を選択して、「function」ボタンを長押しします。
  3. 「Learn Multiple」を選択して、次のように 「progress bar 」を「blue で square icon 」にします。
  4. 「Save & Return」を選択して「Yes」で戻ります。
  5. Huskylensはタグを検出するとwhite frameが表示されるので、「learning 」ボタンを長押しします。この操作により学習されるので終了すると次のダイアログ「Click again to continue!・・・」が表示されます。
  6. 学習を継続したいときは、「learning 」ボタンをクリックします。終了したいときはそのままタイムアウトを待ちます。

FireBeetle 2とHuskylensのI2C接続

FireBeetle 2とHuskylensは付属しているケーブルでI2Cにより接続します。

FireBeetle 2とHuskylensの接続
FireBeetle 2 Huskylens
GND black line
5V red line
SDA green line
SCL blue line

FireBeetle 2とHuskylensを接続した画像を次に示します。物体認識アプリを実行して、タグ認識を行っています。

Huskylensライブラリのインストール

Huskylensライブラリ「HUSKYLENS Library 」をダウンロードして、メニューから「スケッチ」 →「ライブラリをインクルード」→「.zip形式のライブラリをインストール」 を使用して、Huskylensライブラリをインストールします。

物体認識アプリの作成

物体認識アプリは提供されているサンプルスケッチを使用します。メニューから「ファイル 」 →「スケッチ例」→「HUSKYLENS」 にある「HUSKYLENS_I2C」 を使用します。

物体認識アプリ「FireBeetle_Huskylens.ino」を次に示します。

FireBeetle_Huskylens.ino

/***************************************************
 HUSKYLENS An Easy-to-use AI Machine Vision Sensor
 <https://www.dfrobot.com/product-1922.html>
 
 ***************************************************
 This example shows the basic function of library for HUSKYLENS via I2c.
 
 Created 2020-03-13
 By [Angelo qiao](Angelo.qiao@dfrobot.com)
 
 GNU Lesser General Public License.
 See <http://www.gnu.org/licenses/> for details.
 All above must be included in any redistribution
 ****************************************************/

/***********Notice and Trouble shooting***************
 1.Connection and Diagram can be found here
 <https://wiki.dfrobot.com/HUSKYLENS_V1.0_SKU_SEN0305_SEN0336#target_23>
 2.This code is tested on Arduino Uno, Leonardo, Mega boards.
 ****************************************************/

#include "HUSKYLENS.h"

HUSKYLENS huskylens;
//HUSKYLENS green line >> SDA; blue line >> SCL
void printResult(HUSKYLENSResult result);

void setup() {
    Serial.begin(115200);
    Wire.begin();
    while (!huskylens.begin(Wire))
    {
        Serial.println(F("Begin failed!"));
        Serial.println(F("1.Please recheck the \"Protocol Type\" in HUSKYLENS (General Settings>>Protocol Type>>I2C)"));
        Serial.println(F("2.Please recheck the connection."));
        delay(100);
    }
}

void loop() {
    if (!huskylens.request()) Serial.println(F("Fail to request data from HUSKYLENS, recheck the connection!"));
    else if(!huskylens.isLearned()) Serial.println(F("Nothing learned, press learn button on HUSKYLENS to learn one!"));
    else if(!huskylens.available()) Serial.println(F("No block or arrow appears on the screen!"));
    else
    {
        Serial.println(F("###########"));
        while (huskylens.available())
        {
            HUSKYLENSResult result = huskylens.read();
            printResult(result);
        }    
    }
}

void printResult(HUSKYLENSResult result){
    if (result.command == COMMAND_RETURN_BLOCK){
        Serial.println(String()+F("Block:xCenter=")+result.xCenter+F(",yCenter=")+result.yCenter+F(",width=")+result.width+F(",height=")+result.height+F(",ID=")+result.ID);
    }
    else if (result.command == COMMAND_RETURN_ARROW){
        Serial.println(String()+F("Arrow:xOrigin=")+result.xOrigin+F(",yOrigin=")+result.yOrigin+F(",xTarget=")+result.xTarget+F(",yTarget=")+result.yTarget+F(",ID=")+result.ID);
    }
    else{
        Serial.println("Object unknown!");
    }
}

物体認識アプリの実行

物体認識アプリを実行し、プリントしたタグをHuskylensのイメージセンサーにかざすと、対応するタグIDがシリアルモニタに次のように表示されます。