29
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NSSOLAdvent Calendar 2020

Day 3

ディープラーニングの眼を持ったロボットを、LEGOとM5StickVでサクッと作ろう!(機能概要編)

Last updated at Posted at 2020-12-03

機能概要

深層学習による物体認識能力を持ったLEGOロボットを簡単に作れる仕組みを開発してみました。

例えば、今回開発した仕組みを使えば、次の動画のようにBB-8の姿を認識したら一回転するロボットが、たった1枚の写真撮影と実質的に3ステップのプログラムで作れてしまいます。驚異的な簡単さです。

BB-8を認識したら顔真似しつつ一回転(YouTube動画):
BB-8認識ムービー

仕組みの特徴

  1. LEGO + AIカメラ: 仕組みは、一言で言えば、ロボティクスキットであるLEGO MindstormsLEGO Spike Primeから、AIカメラ M5StickVの物体認識機能を利用できるようにしたものです。

  2. 複数種類の物体を認識可能: もちろん、物体は複数種類を認識できます(最大約200種類、デフォルト設定では10種類)。
    例えば、AIカメラで顔を認識したら笑顔になり、BB-8の姿を認識したら一回転し、鳥の姿を認識したら羽ばたくロボットが下図の短いScratchコードで書けてしまいます。やることの複雑さに対して、たったのこれだけです。

code.png
  1. 標準開発環境が利用可能: ロボットのプログラミングに特殊なアプリは不要で、標準開発環境であるLEGO MindstormsアプリLEGO Spike Primeアプリ(言語はScratchまたはPython)で開発できるのも(特に教育での利用上)大事なポイントです。

  2. エッジ推論可能: 更に、動作にはパソコンやiPad等を必要とせず、デバイスのみで深層ニューラルネットワークの推論が高速で行われます(M5StickVのエッジ推論用チップのお陰)。すごい世の中です。

それでは、この仕組みの利用にあたっての準備と使い方を順に説明していきます。
仕組みの詳細は次回解説します(近日公開予定)。

前提知識・スキル

時間の都合で、インターネットで検索すれば比較的容易に情報を入手できる下記事項は既知のものとさせてください。

  1. LEGO Mindstorms 51515 Robot InventorLEGO Spike Primeの基礎知識(各パーツの使い方や基本的なプログラミング)
    • LEGO Mindstorms 51515 Robot Inventorは11/23日現在、日本では発売されていませんが、海外では発売されています。頭脳部分であるハブやセンサーのハードウェアはLEGO Spike Primeと同一です(ハブのファームウェアは少し違います)。
    • LEGO Spike Prime代理店から購入できます。私はアフレルさんから購入しました(モーターの初期不良にすぐご対応いただき感謝)。
  2. M5StickVの基礎知識を持ち、自身でトラブルシュートできる
  3. 電子工作スキル(はんだ付け、テスターの利用ができる)

免責事項

著者は本記事を掲載するにあたって、その内容、機能等について細心の注意を払っておりますが、内容が正確であるかどうか、安全なものであるか等について保証をするものではなく、何らの責任を負うものではありません。
本記事内容のご利用により、万一、ご利用者様に何らかの不都合や損害が発生したとしても、著者や著者の所属組織(日鉄ソリューションズ株式会社(NSSOL))は何らの責任を負うものではありません。
本工作によりメーカー保証を受けられなくなったり、電子工作に失敗するとデバイスを壊してしまう可能性があります。その可能性を十分に理解した上で本記事の情報を利用してください。

準備(電子工作)

LEGO Mindstorms等とM5StickVがシリアル通信するためのケーブルを作り、M5StickVにAIカメラ・アプリケーションをインストールします。

※Mindstorms 51515のファームウェア 10.0.3(2020年12月26日時点の最新バージョン)で動作確認済みです。

完成図:
pin-converter.jpg

必要なもの

電子工作の3ステップ

  1. パンダみたいな見た目をしたLEGO 距離センサー 45604の裏側にあるネジをT6トルクスドライバーを使って緩め、パンダ側を取り外します。すると、下図のように1.27mmピッチのコネクタが見えてきます。
    今回はLEGO MindstormsのハブとM5StickVをシリアル通信させるためにこのRx/Tx/GNDを使用します(3V3は使いません)。
ultrasonic-sensor.jpg
  1. 下図のように1.27mmピッチピンヘッダを2.54mmピッチピンヘッダに変換する基盤を組み立てます(はんだ付けするだけですので詳細省略)。オスからオスへの変換になるようにしてください。
    ※隣のピン等へのショートが起きないよう、はんだ付けと導通テストを十分に注意して行いましょう。もし、ショートが起きたら最悪LEGO MindstormsハブやM5StickVを破壊してしまう危険性があります。
pitch-converter.jpg
  1. 下図のように、1で開封した距離センサーの1.27ピッチコネクタに2の変換基盤の1.27ピッチヘッダピンを差し込みます(※差し込むピンの位置がずれないよう注意)。GROVEケーブルをM5StickVにしっかり差し込み、反対側の黄色を変換基盤のRXに、白をTXに、黒をGndに差し込みます(※赤(5V)はハブに接続しません)。電子工作はこれで完成です。
pin-converter.jpg

AIカメラ・アプリケーション cheese のインストール

最後にもうひと作業です。次のリンク先ZIPファイルを解凍し、そのフォルダの中身(boot.py等全てのファイルとフォルダ)をSDカードの直下にコピーします。

電源が切られたM5StickVにそのSDカードを挿し込みます。
M5StickVの電源を入れたときに数秒して次の画面が表示されたらインストール成功です。画面が表示されたら電源を切ってください。
startup.jpg

使い方

M5StickVとLEGO Mindstormsのハブを繋ぐケーブルができたら、認識したい物体を撮影すれば、物体認識を行えるようになります。
ここでは最初に説明した、AIカメラで顔を認識したら笑顔になり、BB-8の姿を認識したら一回転し、鳥の姿を認識したら羽ばたくロボットを例にしながら説明します。
なお、以下の説明で使うボタンの位置は下図のとおりです。
pitch-converter.jpg

認識したい物体の撮影

以下のステップで認識したい物体の写真を1種類につき1枚撮影します。最大約200種類、デフォルト設定では10種類、撮影できます。プログラミングは不要です。

  1. Bボタンをずっと押したまま電源を入れます(数秒間押しっぱなしにしていてください)。次の画面が出てくるまで押したままにしてください。起動画面に似ていますが、別の次の画面です。
    camera.jpg

  2. Bボタンを押し、認識する物体のID(クラス)を選択します。デフォルトでは10種類(IDが1から10)選択できます。プログラミングの時に使うので、どのクラスIDで何を認識させるのかメモしておいてください。

select-class.jpg
  1. Aボタンを押して、そのクラスとして認識させたい画像を1枚撮影します。何度でも撮り直しできます(各クラスの最新の一枚のみSDカードに上書き保存されます)。
take-a-picture.jpg 実際に撮影された画像はSDカードのimagesフォルダの中に保存されます。画像ファイル名は、クラスID.jpgです(サイズは224x224です)。不要なものがあれば画像ファイルを削除できます。 BB-8.jpg
  1. 2と3の作業を認識させたいクラス分だけ繰り返します。撮影が終わったら電源を切ります。
    最初の例だと、クラスID 1で人の顔、クラスID 9でBB-8の姿、クラスID 10で鳥(ファンタスティックビーストのサンダーバード)の姿を撮影しています。

  2. 必要に応じて物体認識のテストを実行します。Aボタンをずっと押しながら電源を入れます(数秒間押しっぱなしにしていてください)。撮影した物体の写真がそのクラスIDと共に紙芝居のようにカタカタ表示された後、テストモードに入ります。テストモードでは物体が認識されたらそのクラスIDが上部に表示されます。期待通りの物体認識ができているかテストし、必要に応じて再撮影やクラスの追加を行ってください。

select-class.jpg

物体認識の実行

さて、本番です。物体認識を行うプログラムを作り、実行します。

  1. 物体認識を行うプログラムの開発は非常に簡単です。iPad等のLEGO MindstormsアプリLEGO Spike Primeアプリを使ってプログラミングします。
    AIカメラセンサーは距離センサーのふりをして動作します。つまり、物体が認識されたら、あたかもそのクラスIDの距離(センチメール)にモノがあるかのようにセンサーが働きます。例えば、BB-8(クラスIDが9)が認識されたら、距離センサーが9cmにモノがあるという反応をします。
    今回の例である、顔(クラスIDが1)を認識したら笑顔になり、BB-8(クラスIDが9)を認識したら顔真似しながら一回転し、サンダーバード(クラスIDが10)を認識したら顔真似しながら羽ばたくプログラムは下図のように書けます。普通のプログラムと違うポイントは水色の距離センサーのところだけです。cmの数値をクラスID(1や9や10)にしているだけです。ただそれだけです。簡単ですね。
    なお、下図のプログラムでは、ポートEにM5StickVに繋がるケーブルを、ハブのポートDに足回りのモーターを、ポートBとFに腕のモーターを繋いでいるとしています。
code.png
  1. いつものLEGO Mindstormsプログラミングと同じく、LEGO Mindstorms等の電源を入れ、iPad等と接続し、プログラミングを書き込みます。

  2. LEGO Mindstorms等の電源が入っている状態でM5StickVの電源を入れます。数秒〜十秒程度、M5StickVのディスプレイに"Connecting to LPF2 Hub..."という表示が出て、その表示が消えてディスプレイにカメラが捉える画像が表示され始めたら、LEGO Mindstormsハブへの接続が成功です。もし、ハブへの接続が成功しない場合は、M5StickVの電源をオフ/オンしてください。

  3. これで準備完了。プログラムを実行すればOKです。例えば、次のムービーのように顔認識してみたり、BB-8やサンダーバードの認識を試してみてください。
    顔認識をしたら笑顔を返す(YouTube動画):
    顔認識ムービー
    BB-8を認識したら顔真似しつつ一回転(YouTube動画):
    BB-8認識ムービー
    サンダーバードを認識したら顔真似しつつ羽ばたく(YouTube動画):
    サンダーバード認識ムービー

  4. 好きなだけ改造してみましょう。迷路の中に隠した物を発見するロボットを作ったり、冷蔵庫のプリンの盗み食いを発見して教えてくれるロボットを作ったり、ジャンケン勝負してくれるロボットを作ったり、物を仕分けるロボットを作ったり、猫と遊ぶロボットを作ったり、頑張ればサッカーボールを追いかけてゴールにシュートするロボットだって作れるかもしれません。

まとめと今後の展望

LEGO MindstormsとAIカメラ M5StickVを連携させることで、深層学習の眼を持ったロボットをサクッと簡単に作る方法を説明しました。

今回は仕組みを使うための準備と使い方の説明まで行いました。
次回は、AIカメラのプログラムの中身について解説していきます。LEGO Mindstorms等のハブとM5StickVのシリアル通信、笹尾先生の物体認識アプリBrownieを少し改造した物体認識について解説する予定です。

また、今回はLEGO MindstormsやLEGO Spike Primeのハブと接続できるようにしましたが、もっと安価なLEGO Boostも同種の通信プロトコルを用いて通信できるので、LEGO Boost版も近々公開する予定です。
他にもマイク入りのM5StickCM5Atomを繋いで音声認識をしたり、深層学習は使わないけれどもM5StickVのカメラをOpenCV的な画像認識に使ったりすることも考えています。
こんなことが簡単に実現できるなんて、本当、いい世の中になりましたねぇ。

(仕組み解説編へ、つづく・・・)

29
25
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?