2025年1月27日

022-1.SPIKE&AIカメラ入門-第3回「AIカメラをRaspberry Pi Picoで動かす」

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

◆ UARTポートに接続する

ハスキーレンズに搭載されている「UARTポート」を使ってみましょう。UARTポートには、製品に付属している「Gravity 4ピン・センサーケーブル」を接続します。Gravity(グラビティ)とは同社が採用している独自のコネクタの仕様です。コネクタのピン配置は次の通りです。
1:TX(ハスキーレンズの送信。緑色)
2:RX(ハスキーレンズの受信。青色)
3:GND(黒色)
4:VCC(3.3~5V。赤色)

「Gravity 4ピン・センサーケーブル」は端子がメス型なので、それを反転させるため、オス-オス型のジャンパーワイヤーを使います。ジャンパーワイヤーは4本必要です。

ハスキーレンズをパソコンに接続するための回路図です。ハスキーレンズの電源はUARTポートから供給されます。 秋月電子通商の「FT-232RQ USBシリアル変換モジュール」をハスキーレンズに接続します。「FT-232RQ USBシリアル変換モジュール」はパソコンのUSBポートに接続することができます。

下準備として、Protocol Type(通信方式)を「Auto Detect」に設定しておきます。これで、通信方式が自動的に設定されるようになります。

「Gravity 4ピン・センサーケーブル」を通じて、 「FT-232RQ USBシリアル変換モジュール」とハスキーレンズを接続します。前回と違って、USBポートには何も接続しません。

Thonnyを起動して、サンプルプログラム「exampleHL.py」を実行します。このファイルと同じ階層に「huskylib.py」を置いておきましょう。一連のファイルは次のページからダウンロードすることができます。
https://github.com/HuskyLens/HUSKYLENSPython
なお、ファイル「huskylib.py」の「import png」と書かれた行はそのままだとエラーが出てしまうので、左側に「#」を追加して、コメントにしておきましょう。
ファイル「exampleHL.py」で「HuskyLensLibrary」関数の引数を変更します。まず、「"COM~"」を適切な値に変更します。さらに通信速度を「9600」に変更します。理由は不明ですが、9600bps以外だと正しく動作しませんでした。
キーボードのF5キーを押すと、実行します。実行前にインタプリタを「Local Python3」に選択しておきましょう。
通信に成功するとハスキーレンズの制御が可能となります。もし、ハスキーレンズの応答がない場合、「Read response error, please try again」というメッセージが表示されます。配線にミスがないか、COM番号が間違ってないかを確認しましょう。

◆ Raspberry Pi Picoを接続する

今度はRaspberry Pi Picoをハスキーレンズに接続します。 回路図はこの通りです。

接続すると、こうなります。

Raspberry Pi PicoはMicroPythonでプログラムを作成します。MicroPython用のハスキーレンズのライブラリは公式には存在しません。そこで、ライブラリを使わないでプログラムを作ります。

最初に「knock」というコマンドを送信して、ハスキーレンズの存在を確認します。knockは「0x55,0xAA,0x11,0x00,0x2C,0x3C」の6バイトです。成功するとハスキーレンズからレスポンスが返ります。knockのレスポンスは「0x55,0xAA,0x11,0x00,0x2E,0x3E」の6バイトです。knockは合計で3回送信します。
写真はプログラム実行中の様子です。インタプリタは「Raspberry Pi Pico(MicroPython)」を選択します。 ここでは、「get object by ID」というコマンド(8バイト)を送信して、レスポンス(16バイト)を受信しています。 このデータ部分に、物体追跡(Object Tracking)モードの結果が含まれていると思うのですが、このままだと意味不明です。公式のライブラリがないので、自力で解読しないといけません。解読ができたら、SPIKEのラージハブとの接続に応用してみたいと思います。

今回作成したプログラム(Raspberry Pi Pico用)

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