2025年1月27日

022-1.SPIKE&AIカメラ入門-第9回「色を認識するロボットを作る」

この連載では「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」と「ハスキーレンズ(HuskyLens)」を組み合わせたロボットの作り方を紹介したいと思います。ハスキーレンズとはDFROBOT(Zhiwei Robotics Corp.)というメーカーが開発した特殊なカメラ(AIカメラ)です。このカメラを使って、物体追跡、物体認識、ライン追跡などの機能を備えたロボットを作ってみましょう。この連載では最終的にハスキーレンズをSPIKEプライムのラージハブに接続して動かしたいと思います。
ハスキーレンズの基本的な情報については、メーカーのWikiページを読むことをオススメします。ページのURLは以下のとおりです。
https://wiki.dfrobot.com/HUSKYLENS_V1.0_SKU_SEN0305_SEN0336(文/松原拓也)

◆ 色の学習

今回はハスキーレンズを使って、「色認識(Color Recognition)」を行ってみたいと思います。 色認識というのは、色の種類を判別する機能のことです。
色認識を行うには、次の下準備が必要です。 ハスキーレンズの機能ボタンをスライドして、「Color Recognition」モードに合わせます。 さらに、機能ボタンを長押しして、設定画面に移行します。そして、「Learn Multiple(複数の学習)」の項目をオンにします。オンの状態ではスライドスイッチが水色に表示されます。最後に「Save&Return」を選択して、設定内容を記録します。
これで複数の色認識が出来るようになりました。

色を学習します。ここではブロックの色を学習することにします。 画面の十字マークをブロックに合わせて、学習ボタンを長押しします。これで1つぶんのブロックの色を学習します。
学習ボタンから指をはなすと、学習の継続を確認するメッセージが表示されます。ここで、制限時間内に学習ボタンを押して、次のブロックを学習しましょう。もし、時間切れになると、学習は終了します。 学習内容を消したい場合には、学習ボタンを短く2回押しましょう。

ここでは例として、4色のブロックを学習してみました。黄色を学習すると、テーブルの色に反応してしまうので、白い紙の上にブロックを置きました。 色はID番号で管理します。ID番号が学習した順番に割り振られます。

学習後、ブロックにカメラを向けると、このように色を認識します。
色を1度に1つだけ認識するなら純正品のカラーセンサーでできることです。しかし、ハスキーレンズを使えば、1度に複数の色を認識することができます。

◆ 色認識のプログラム

メーカーが配布している公式のライブラリを解読して、色認識の仕組みを調べます。色を認識するには「blocks」というコマンドを送ります。

SPIKEアプリのPythonを使ってプログラムを作ります。SPIKEアプリ3は最近(2023年7月現在)になって、Pythonに対応しました。しかし、前バージョンのSPIKE Legacyと互換性がないので、今まで作ったプログラムが無駄になってしまいます。ここではSPIKEアプリ3は使わず、SPIKE Legacyを使い続けることにします。
blocksコマンドを送ると、レスポンスが返信されます。レスポンスはブロックという形式のデータ(X座標、Y座標、幅、高さ、ID番号)が含まれています。物体認識で使ったgetBlocksByIDコマンドはブロックが1つしか存在しませんでした。しかし、blocksコマンドは複数のブロックが存在します。
「Block」というクラスを新たに作り、ブロック情報を管理することにします。さらに「answers」という配列(リスト)を作って、ブロック情報を格納します。こうすると、データ構造が複雑になっても、わかりやすく管理することができます。

プログラム内でblockコマンドの送信とレスポンスの受信を行っている部分です。
色認識の結果は配列変数answerに格納されます。 forループを使って、ブロックを1つずつ読み取っています。
本来なら認識結果を判断して何かロボットを動かすべきなのですが、今回は動かさず、結果をコンソールに表示するだけです。

◆ 1度に複数の色を認識

プログラムを実行しました。
ブロックをカメラにかざして、色を認識されると、コンソールに認識した座標、幅・高さ、ID番号が表示されます。この例では「赤色(ID2)」を認識しているので、「id=2」と表示されます。

一度に複数のブロックが写っていると、認識結果が複数表示されます。この例では「青色(ID1)」「緑色(ID4)」を認識しているので、「id=1」「id=4」と表示されます。学習内容が変われば、ID番号も変わります。

このように「複数の色を1度に認識できる」というのが、この機能の凄いところです。これを応用すれば、なにか凄い使い方ができると思います。

今回作成したプログラム(SPIKE Legacy用)

当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。