注目キーワード

タミヤ:ロボット(CRAWLER) AIカメラで道路を認識して走行する!

すけろく
最近、AIカメラというものがあるそうな。
げんろく
カメラ画像を、カメラに実装された
チップで学習して、画像認識をさせるものだな。
すけろく
実際に何か作ってみたい。
げんろく
そうだな。以前使ったタミヤ製のロボットと
AIカメラを組みあわせて、道路認識して走行するもの
を作ってみるか。
この記事では、タミヤのロボット工作キット「ロボット(CRAWLER)」と、AIカメラ「HUSKYLENS」を組み合わせ、道路の線を認識して走行するものを作ってみようと思います。
今回使う、AIカメラ「HUSKYLENS」は、Arduino IDE向けのライブラリが公開されています。ライブラリを有効活用するために、「ロボット(CRAWLER)」に搭載されているマイコン「BBS microbit」を、Arduino IDEを使ってプログラミングします。
製作、動作時の様子を動画にしました!ぜひご覧ください!

タミヤのロボット工作キット「ロボット(CRAWLER)」とは?

模型でおなじみのタミヤが販売している、STEM教育素材でもあるロボット工作キットです。

キットの中には、ロボットを構成する次の3つの要素を構成するパーツが同梱されていますので、購入してすぐ、ロボットの動きを楽しめます。

  • プログラミング可能なマイコン(BBS microbit)
  • 距離センサー、モータードライバが実装された回路基板
  • ロボットのフレームやモーターなどの機械部品

 

詳しくは次の記事で紹介していますので、確認してみてください!

関連記事

突然ですが、もし、数時間でロボットを作れるとしたら、作ってみたくないですか? えっ?そんなの不可能? いえいえ、プラモデルを作ったことがあるならできちゃいますよ!! しかも、パソコンとつないでグラフィカルにプログラミングで[…]

TAMIYA ROBOT (CRAWLER TYPE)

タミヤ プログラミング工作シリーズ No.01 マイコンロボット工作セット クローラータイプ 71201
ロボットフレーム、モーター、ギア、マイコン(BBC microbit)、電子回路、距離センサーなどがセットになったものです。あとは電池を別途用意するだけで、障害物をよけて前進するロボットが作れます。
クローラータイプなので、戦車のようなベルトを持ち、段差もものともしない走破性を持っています。動きも速さよりも力(トルク)重視なので、見ていて楽しいです。
Amazonで確認

 

今回の改造ポイント

①AIカメラ「HUSKYLENS」の取付

ロボット工作キットに含まれる回路基板には、I2Cポートが複数準備されています。
標準だと、このI2Cポートには、距離センサーが接続されています。
今回は、このI2C用のポートに「HUSKYLENS」を接続して、「HUSKYLENS」からのフィードバックを受け取れるようにします。
そのため距離センサーは、外しておきます。
回路基板のI2C用ポートは、次のような構成になっていて、カメラへの電源もとれますが、後述するようにAIカメラは消費電力が高いため、AIカメラへの電力は回路基板とは別に準備します。

②マイコン(BBS microbit)のプログラミング

ロボット工作キットには、ロボットを動作させるためのプログラムが書き込まれているマイコン(BBS microbit)が含まれています。

標準では、距離センサーからのフィードバックを元にモーターを制御するプログラムが書き込まれています。

今回は、AIカメラからのフィードバックを元にモーター制御したいので、プログラムを書き換える必要があります。

「BBS microbit」は、MakeCodeに代表されるノーコード開発環境がありますが、今回はモーターへのフィードバック制御などに、AIカメラのArduino IDE用ライブラリを使用したいので、Arduino IDEを使います。

 

AIカメラ「HUSKYLENS」とは?

DFRobotから販売されているAI搭載カメラです。

HUSKYLENSのセット内容

カメラが搭載されている基板内にAIによる学習ができるチップが搭載されています。

 

AIカメラ「HUSKYLENS」

Gravity: HuskyLens AI ビジョンセンサー
AIカメラとして学習・推論の機能が実装されたカメラセンサーです。
I2CやUARTで認識結果をAPIとしてフィードバック取得できるので、Arduino IDE以外でも利用することができます。
Amazonで確認

 

 

電源は、320mA@3.3V, 230mA@5.0V必要です。バッテリーなどからの直接供給が必要です。

HUSKYLENS本体の説明

カメラ画像から、以下の内容について学習させることができ、学習結果を使って認識した情報を、UARTまたはI2Cプロトコルを使って、フィードバックできます。

  • 顔検出
    学習させた顔にタグ付けすることで、カメラに映った楽手済みの顔を検出する
  • オブジェクト追跡
    学習させたオブジェクトを追跡する
  • オブジェクト認識
    20 個の組み込みオブジェクトを認識する
  • Line Tracking
    指定された色の線を追跡し、経路予測を行う
  • 色認識
    指定された色を学習、認識、および追跡する
  • タグ認識
    タグを検出し、指定されたタグを学習、認識、追跡する
  • オブジェクトの分類
    さまざまなオブジェクトの複数の写真を学習し、学習したオブジェクトを ID 番号で表示する

 

また、カメラの画像における座標系は、次のようになっていて、フィードバック値から、カメラ画像のどの位置にオブジェクトなどがあるか(または向いているか)を読み取れます。

HUSKYLENSカメラ座標系

 

今回は、「Line Tracking」機能を使って、道路の中央にある線の経路予測を行います。

認識結果のフィードバックは、I2Cプロトコルを使います。

 

「HUSKYLENS」のLine Trackingにおけるフィードバック

「HUSKYLENS」の「Line Tracking」機能では、認識した線の経路予測値をフィードバックします。

フィードバックデータは次の形式になります。

項目名 フィードバック値 説明
xOrigin int16_t 矢印(経路予測線)の始点のX座標
yOrigin int16_t 矢印(経路予測線)の始点のY座標
xTarget int16_t 矢印(経路予測線)の終点のX座標
yTarget int16_t 矢印(経路予測線)の終点のX座標

 

今回は、ロボットの進む方向を、経路予測した方向へ向けたいので、フィードバックデータのうち、「xTarget」(経路予測結果の矢印の終端)の値がカメラ座標系の中心(x)=(160)からどのくらい離れているかで判断します。

計算方法は単純で、 xTarget – 160で計算します。(経路予測が左を向いていると負の数、右を向いていると正の数)となります。

 

モーター制御による方向補正

「HUSKYLENS」の「Line Tracking」から得たフィードバック値を使って、ロボットの方向を補正することを考えます。

今回使うタミヤのロボット工作キットは、左と右で独立したモーターによって動きます。

モーターの速度は、PWMを使って変化させることができるようになっています。

PWM制御については次の記事でご紹介しています。

関連記事

この記事では、M5StickCと冷却ファンを使って回転速度制御をしていきます。 M5StickCから冷却ファンの回転を制御できれば、扇風機のように、自由に風量を変えることができます! 今回の冷却ファンは次のものを使います。パソコン用[…]

 

2つのモーターを以下のように制御することで方向を変えながら動かすことができます。

  • 前進…左右同じ速度でモーターを回転
  • 後退…左右同じ速度でモーターを逆回転
  • 左折…右のモーターを左より早く回転
  • 右折…左のモーターを右より早く回転

フィードバック値が、中心よりも左右にずれているとき、左右のモーターの速度を変えて、フィードバック値が中心に来るように補正します。

補正には、PID(P(比例),I(積分),D(微分))制御というフィードバック制御を使います。

PID制御については、以下のサイトが詳しく記載されているので参考にしてください。

各種プロセス制御で使われているPID制御について理解して頂くために、やさしく解説しているページです。初心者にもわかりやす…

 

今回は、比例制御のみ有効にしてプログラミングします。

 

AIカメラへの電力供給

AIカメラへの電力供給は、ロボット工作キットの回路基板とは別の電源を用意しました。

今回は、18650型の電池(リチウムイオン電池 3400mAh 3.7V)2本を使用しています。

電圧をAIカメラの電圧(5V)に合わせるために、DC/DCコンバーターを使っています。

今回使用したのは、出力電圧を変更できるもので、秋月電子さんの商品です。

 

ロボット工作キットへのAIカメラ搭載

AIカメラ「HUSKYLENS」に付属のアームのサイズが、ロボット工作キットの部品にジャストフィットしていたので、そちらにネジで搭載しました。

回路の接続については、次のようにしています。

 

Arduino IDE で microbitに書き込む準備をする

今回はAruduino IDEを使ってプログラムを書き込みたいので、必要な環境づくりを行います。
やることは次の3点です。
  • Arduino IDEのインストール
  • パソコンからmicrobitをCOMポートで認識させる
  • Aruduino IDEにmicrobitのボードを登録する

 

 Arduino IDEのインストール

Arduino IDEをインストールします。

Arduino IDEのインストール方法は、次の記事で紹介しています。

関連記事

「Arduino IDE」はC言語に似た「Arduino言語」でプログラムを制作し、コンパイルやデバッグ、Arduino対応ボードに転送したりするための「統合開発環境」です 以下の手順でインストールします。 […]

 

 パソコンからmicrobitをCOMポートで認識させる

microbitには、パソコンからの書き込み用としてmicroUSB端子が実装されています。

Windows7環境では、ドライバを入れる必要がありそうですが、Windows11では何もせずに認識しました。

microbitをパソコンに接続すると、エクスプローラーからドライブとして認識されます。

MakeCodeなどで作成したプログラム(.hex)は、このドライブにコピーすることで書き込むことができます。

 

Arduino IDEからプログラムを書き込むためには、SoftDeviceという機能をmicrobitで有効にする必要があります。以下のプログラム例を使ってSoftDeviceを有効にします。

MICROBIT drive to install a MakeCode bluetooth advertising example

上記のプログラム(.hex)をダウンロードして、エクスプローラーからmicrobitに書き込みます。

 

 

 Aruduino IDE にmicrobitのボードを登録する

次に、Aruduino IDEのボードマネージャを使って、microbitを登録します。

登録に使用する情報

使用する情報 設定値
追加ボードマネージャのURL https://sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json
ボード名 Nordic Semiconductor nRF5 Boards

 

ボードマネージャのインストールは、次の記事で紹介しています。

関連記事

今回は、「Arduino IDE」の「ボードマネージャ」と書き込み先のボードの指定について記載します。 Arduino IDEは、Arduinoに対応した各種ボード(Arduino uno、M5Stack、M5Stick Cなど)へ[…]

AIカメラを使った道路認識走行ロボットのプログラミング

それでは、実際にプログラミングしてみましょう。

HUSKYLENSのArduino IDE向けライブラリのインストール

以下のリンクから、HUSKYLENSのライブラリをダウンロードします。

Github(HUSKYLENSライブラリ)

ダウンロード後に、ファイルを解凍し、「HUSKYLENS」フォルダをArduino IDEのライブラリフォルダにコピーします。

Arduino IDEのライブラリフォルダは、標準では、以下の場所になっています。

C:\Users\”ユーザ名”\Documents\Arduino\libraries

適宜読み替えてください。

 

プログラムの作成

Arduino IDEを起動して、「ファイル」メニューから「新規ファイル」をクリックして新規にプログラムを立ち上げます。Arduino IDEスケッチ例をコピー&ペーストして保存します。

 

※PID制御関数の準備

  1. Arduino IDEで、「ファイル」メニューから「スケッチ例」ー「HUSKYLENSArduino」-「HUSKYLENS_LINE_TRACKING」を選択し、スケッチを表示します。(別のウィンドウで開きます)
  2. 「HUSKYLENS_LINE_TRACKING」スケッチのウィンドウから、「スケッチ」メニューで「スケッチのフォルダを表示」を押してエクスプローラでフォルダを開きます。
  3. 「PIDLoop.h」のファイルをコピーます。
  4. 新規作成したスケッチのウィンドウを選択して「スケッチメニュー」から「スケッチのフォルダを表示」を押してエクスプローラでフォルダを開きます。
  5. 先ほどコピーした「PIDLoop.h」のファイルをフォルダに保存します。
  6. 新規作成したスケッチを一度閉じて、再度Arduino IDEで開くと「PIDLoop.h」が追加されます。
  7. 「PIDLoop.h」の「ZUMO_BASE_DEADBAND」を「0」に変更します。

 

 Arduino IDE スケッチ例

 

 M5StickC Plusへの書き込み

  1. 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
  2. 「ツール」メニューから「ボード」情報を確認し、microbitであるか確認します。
    この際、次を確認します。
    ・「シリアルポート」にマイコンを接続したCOMポートが指定されているか
    ・「SoftDevice」に「S110」が指定されているか
  3. 「ツール」メニューから「シリアルモニタ」を選択してシリアルモニタを起動します。
  4. 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。

 

 プログラム実行結果

最初は、「HUSKYLENS」の「Line Tracking」には学習データがないため、動きません。

走行テストする道路を「HUSKYLENS」のカメラで映して、「学習ボタン」を押します。

学習が完了すると経路予測の矢印が青色になって表示され、動き出します。

 

製作、動作時の様子を動画にしました!ぜひご覧ください!

 

 

編集後記

いかがだったでしょうか。

タミヤのロボット工作キット「ロボット(CRAWLER)」と、AIカメラ「HUSKYLENS」を使って、道路のラインを認識して走行するロボットが完成しました。

「HUSKYLENS」には、ほかにもAI機能があるので、ロボットと組み合わせるといろいろできそうです!

 

記事は以上になります。

最後までご覧いただきありがとうございました。

今回使用した商品をご紹介します。ぜひご確認ください!

AIカメラ「HUSKYLENS」

Gravity: HuskyLens AI ビジョンセンサー
AIカメラとして学習・推論の機能が実装されたカメラセンサーです。
I2CやUARTで認識結果をAPIとしてフィードバック取得できるので、Arduino IDE以外でも利用することができます。
Amazonで確認

TAMIYA ROBOT (CRAWLER TYPE)

タミヤ プログラミング工作シリーズ No.01 マイコンロボット工作セット クローラータイプ 71201
ロボットフレーム、モーター、ギア、マイコン(BBC microbit)、電子回路、距離センサーなどがセットになったものです。あとは電池を別途用意するだけで、障害物をよけて前進するロボットが作れます。
クローラータイプなので、戦車のようなベルトを持ち、段差もものともしない走破性を持っています。動きも速さよりも力(トルク)重視なので、見ていて楽しいです。
Amazonで確認