AIカメラで作るおてがるペットロボ
AIカメラ「HUSKYLENS」を使って、お手軽なペットロボを作ります。HUSKYLENSで認識した飼い主を探しながら近づいてくる、かわいいイヌ型の愛(AI)ロボです。
13-9-1.おてがるペットロボ
おてがるペットロボ
AIカメラ「HUSKYLENS」に組み込まれているアルゴリズムの一つ「顔認識」を使って、認識した飼い主を探しながら近づいてくる、かわいいイヌ型のペットロボを作ります。愛猫・愛犬ならぬ愛ロボです。AIだけに。
この動画は、完成したおてがるペットロボのデモ走行です。頭を上下に動かしたり、体を回転させながら、おてがるペットロボが飼い主へ近づいていくようすをご覧ください。
AIカメラ「HUSKYLENS」とは
DFROBOTのHUSKYLENS(AI Vision Sensor)は、低価格で使いやすい「Kendryte K210を搭載したAIカメラ」です。横52mm×縦44.5mmの小さな基板上にパーツが収められ、前面には、2.0メガピクセル(または5.0メガピクセル)のイメージセンサー、背面には、2.0インチIPSディスプレイを搭載しています。HUSKYLENSの詳細は「付録3-19.HUSKYLENS(AI Vision Sensor)」で紹介しています。
組み込みアルゴリズムの一つ「顔認識」
本記事で紹介する「おてがるペットロボ」は、HUSKYLENSに組み込まれているアルゴリズムの一つ「顔認識」を使います。顔認識は、イメージセンサーで撮影した画像をリアルタイムに解析して、人物の顔を検出します。特定の人物の顔を学習することによって「おてがるペットロボ」の飼い主として認識します。
コンピューターとの接続
HUSKYLENSは、コンピューターとの接続用としてUART・I2Cのインタフェース(4ピン)を備えています。また、ライブラリーや拡張機能の提供、コマンドなどが公開されています。本記事では、micro:bitとI2Cで接続します。
13-9-2.おてがるペットロボの条件
おてがるペットロボを作るにあたって、あらかじめ条件を定めました。「ペットの条件」と「おてがるの条件」です。
ペットの条件
かわいいペットの動きを再現するにはどうしたらいいか?AIカメラ「HUSKYLENS」で、飼い主の顔を認識した後、どうすればいいのか?いろいろ考えて、まずは飼い主を探しながら、近づくことにします。では、そばへ来た後は?眠らせることで「安心」という気持ちを表現します。ならば、飼い主を探している間の気持ちを「悲しみ・不安・喜び」で表現してみよう、と決めた「ペットの条件」が次の6つです。
- 飼い主を認識する
- 飼い主を探す
- 飼い主に近づいてくる
- 気持ちを表現する(悲しみ・不安・喜び)
- そばに来ると安心して眠る
- なでると目を覚ます
おてがるの条件
次に「おてがるの条件」を考えます。昨今、3Dプリンターやレーザーカッターなどでパーツを作ることもできますが、ここでは、既製品を組み合わせて作ることを第一条件とします。加えて、パーツの加工も一切無しとします。さらに、すべてをDFROBOTの製品で揃えると、まとめてショップサイトで手に入れることができるのでおてがるです。
プログラミングは、micro:bitの開発環境の一つであるMakeCode for micro:bitを使います。ビジュアルプログラミングツールなので、キーボードを触る回数が減るという点ではおてがるですが、ロジックが簡単になるわけではありません。あしからず。
- 既製品を組み合わせて作る
- パーツの加工は無し
- DFROBOT縛り(micro:bitは除く)
- ビジュアルプログラミング(MakeCode for micro:bit)
おてがるペットロボの条件
上記の「ペットの条件」と「おてがるの条件」を、すべて満たすペットロボを作ります。
13-9-3.おてがるペットロボの組み立て
準備するもの
おてがるペットロボに必要なものは次の通りです。
- micro:bit
- micro:Maqueen Plus(バッテリーは別売り)
- HUSKYLENS(またはHUSKYLENS PRO)
- HUSKYLENS純正シリコンケース
- Mechanic-Loader for micro:Maqueen
それぞれ「第1章.micro:bit入門」「付録3-27.micro:Maqueen Plus」「付録3-19.HUSKYLENS(AI Vision Sensor)」「付録3-25.Mechanic-Loader for micro:Maqueen」で詳しく紹介しています。
おてがるペットロボの組み立て
おてがるペットロボの組み立ては「13-8.micro:Maqueen Plusへの取り付け(サーボモーター)」を参考にしてください。
13-9-4.おてがるペットロボの動作
おてがるペットロボの動作を「ペットの条件」に照らし合わせて見てみましょう。
飼い主を認識する
AIカメラ「HUSKYLENS」に組み込まれているアルゴリズムの一つ「顔認識」を使って、特定の人物の顔を学習することで、飼い主として認識します。
飼い主を探す
飼い主が正面になるように、サーボモーターを制御して顔を上下したり、左右の駆動輪を制御して左(または右)へ回転します。「飼い主が正面」とは、認識した顔がディスプレイの中央付近にあることを示します。詳しくは次項(13-9-5)を参照してください。
飼い主に近づいてくる
飼い主が正面のとき、左右の駆動輪を制御して、前進します。
気持ちを表現する(悲しみ・不安・喜び)
LEDの色を変化させることで、気持ちを表現します。LEDの色は、赤(悲しみ)・黄(不安)・緑(喜び)です。
そばに来ると安心して眠る
そばへ近づくと、LEDを消灯して、頭を下げます。「そばへ近づく」とは、認識した顔がディスプレイに大きく表示されることを示します。
なでると目を覚ます
micro:bitのボタンに触れることで、目を覚まします。
13-9-5.飼い主を認識して探す・近づく動作
MakeCode for micro:bitでの使用例
図13-9-5-1は、MakeCode for micro:bitでのHUSKYLENSの使用例です。HUSKYLENSで、学習した顔(ID:1)を認識すると、LED画面にハートを表示します。MakeCode for micro:bitでは、あらかじめ拡張機能の追加を行います。追加する拡張機能のURLは「https://github.com/DFRobot/pxt-DFRobot_HuskyLens」です。
I2C接続の初期化を行ったあと、アルゴリズムの選択を行います。定期的にHUSKYLENSに対してリクエストすることで、さまざまな情報を取得します。
プログラムで利用できる情報(顔認識)
プログラムで利用できる情報には、学習した顔(ID:n)を認識しているかどうかの真偽値・学習した顔の中心座標(x,y)・高さや幅などのサイズなどがあります。中心座標(x,y)は、ディスプレイの左上を起点(0,0)として、横320・縦240となります。
飼い主を認識して探す・近づく動作
おてがるペットロボでは、認識した顔の中心座標(x,y)が、ディスプレイのどこにあるかを判断して動作します。
おてがるペットロボが、飼い主の顔を認識して探す動作には「上下の動作」と「左右の動作」があります。
まず「上下の動作」について解説します。ディスプレイのy軸(0~239)を三分割して「upper(0~99)・middle(100~139)・lower(140~239)」とします。認識した顔の中心座標のうち、y軸が「upper」にあるとき、サーボモーターを制御して上へ向くように動作します。同様に「lower」にあるとき、下へ向きます。これによって、認識した顔が常に「middle」の位置にあるように動作します。
次に「左右の動作」について解説します。ディスプレイのx軸(0~319)を三分割して「left(0~139)・center(140~179)・right(180~319)」とします。認識した顔の中心座標のうち、x軸が「left」にあるとき、左右の駆動輪を制御して左へ向くように動作します。同様に「right」にあるとき、右へ向きます。これによって、認識した顔が常に「center」の位置にあるように動作します。
認識した顔のy軸が「middle」、かつx軸が「center」の場合、左右の駆動輪を制御して前進するように動作します。また、認識できなかった場合、一切の動作は行いません。
また、各動作に合わせて、LEDの色を変化させます。これによって、飼い主が見つからない悲しみ(赤)・探しているときの不安(黄)・見つけてそばへ駆け寄る喜び(緑)を表現しています。
13-9-6.プログラミング(ブロック)
拡張機能の追加
おてがるペットロボのプログラミングには、あらかじめHUSKYLENSとmicro:Maqueen Proの拡張機能を追加します。追加する拡張機能のURLは「https://github.com/DFRobot/pxt-DFRobot_HuskyLens」と「https://github.com/DFRobot/pxt-DFRobot-Maqueenplus」です。
最初だけ実行するプログラム
I2C接続によるHUSKYLENSの初期化と顔認識アルゴリズムの選択後、変数の初期化を行います。電源投入直後は、眠った状態(関数Sleepの呼び出し)です。
バックグラウンドで実行するプログラム
HUSKYLENSへリクエストして情報を取得します。学習した人物の顔(ID:1)を認識した場合、その中心座標に応じて、上下の位置(upper/middle/lower)・左右の位置(left/center/right)を変数にセットします。認識できなかった場合、上下・左右の位置いずれも「none」をセットします。
ずっと実行するプログラム
上下の位置(upper/middle/lower/none)・左右の位置(left/center/right/none)に応じて、サーボモーター・左右の駆動輪を制御します。また、LEDの点灯(赤・黄・緑)と消灯を行います。この処理は、動作モードがオン(WakeOnが真)の時のみ実行されます。
関数:Wake
頭を上げて、動作モードをオン(WakeOnを真)にします。
関数:Sleep
頭を下げて、動作モードをオフ(WakeOnを偽)にします。
ボタンAが押されたときに実行するプログラム
関数Sleepを呼び出します。
ボタンBが押されたときに実行するプログラム
関数Wakeを呼び出します。
13-9-7.プログラミング(Javascript)
拡張機能の追加
おてがるペットロボのプログラミングには、あらかじめHUSKYLENSとmicro:Maqueen Proの拡張機能を追加します。追加する拡張機能のURLは「https://github.com/DFRobot/pxt-DFRobot_HuskyLens」と「https://github.com/DFRobot/pxt-DFRobot-Maqueenplus」です。
JavaScript
JavaScriptによるサンプルプログラムです。