VEXcode EXPブロックでAIビジョンセンサーを使ったコーディング

ブロックで使用できるように、AI ビジョン センサーで カラー シグネチャカラー コード が設定されていることを確認してください。 設定方法の詳細については、以下の記事をお読みください。

AI ビジョン センサーは、AI 分類と AprilTags も検出できます。 これらの検出モードを有効にする方法については、こちらをご覧ください。

これらの個々のブロックの詳細と、VEXcode での使用方法については、API サイトをご覧ください。


スナップショットを撮る

VEXcode EXP Take Snapshot ブロックは、COL1 の AIVision1 スナップショットを取得します。 ドロップダウンは 2 つあり、1 つは AI ビジョン センサーを選択するためのもので、もう 1 つはカラー コードを選択するためのものです。

Take Snapshot ブロックは、AI ビジョン センサーが現在見ているものを写真に撮り、そのスナップショットからプロジェクトで使用できるデータを取得します。 スナップショットを撮影するときに、AI ビジョン センサーがどのタイプのオブジェクトのデータを収集するかを指定する必要があります。

  • カラーシグネチャー
  • カラーコード
  • AI分類
  • 4月のタグ

スナップショットを撮ると、指定したすべての検出されたオブジェクトの配列が作成されます。 たとえば、「赤」のカラー シグネチャを検出する場合、AI ビジョン センサーが 3 つの異なる赤いオブジェクトを検出すると、3 つすべてのデータが配列に格納されます

異なるオブジェクト間で指定する方法の詳細については、この記事の「オブジェクト項目の設定」セクションを参照してください。

VEXcode EXP Take Snapshot ブロックは、Blue の AIVision2 スナップショットを取得します。

この例では、設定された「青」 カラー シグネチャ に一致するオブジェクトのみを検出し、それ以外のオブジェクトは検出しません。

スナップショットから取得したデータ

AI ビジョン センサーは、その後に続くすべてのブロックに最後に撮影したスナップショットを使用することに注意してください。 AI ビジョン センサーから常に最新の情報を確実に取得するには、データを取得するたびにスナップショットを再撮影してください。 

解決

AI ビジョンセンサーの解像度の図。 左上隅は 0, 0、右上隅は 320, 0、左下隅は 0, 240 とラベル付けされています。 画面の中央には 160、120 と表示されています。

AI ビジョンセンサーの解像度を理解することは、正確なデータ解釈に不可欠です。 センサーの解像度は 320 x 240 ピクセルで、正確な中心は座標 (160, 120) にあります。

X 座標が 160 未満の場合、センサーの視野の左半分に相当し、160 を超える場合、右半分に相当します。 同様に、Y 座標が 120 未満の場合、ビューの上半分が示され、120 を超える場合、ビューの下半分が示されます

AI ビジョン センサーを使用してオブジェクトを測定する方法の詳細については、「 VEXcode EXP の AI ビジョン ユーティリティのデータの理解」を参照してください。

幅と高さ

これは、検出されたオブジェクトのピクセル単位の幅または高さです。

AI ビジョン センサーが青いバッキーボールを追跡している様子が示されています。 Buckyball の周囲には追跡用の四角形があり、上のラベルには幅が 80 ピクセル、高さが 78 ピクセルであることが示されています。 赤い矢印は追跡四角形を強調表示し、その幅と高さを示しています。

幅と高さの測定値は、さまざまなオブジェクトを識別するのに役立ちます。 たとえば、バッキーボールはリングよりも高さが高くなります。

AI ビジョン センサーが 2 つの Blue Cube を追跡している様子が表示されます。 キューブの周囲には追跡用の四角形があり、そのうちの 1 つはカメラにかなり近くなっています。 近い方は幅が144、高さが113で、遠い方は幅が73、高さが84です。

幅と高さは、AI ビジョン センサーからの物体の距離も示します。 通常、測定値が小さいほど物体が遠くにあることを意味し、測定値が大きいほど物体が近いことを示唆します。

ロボットがオブジェクトに近づいて幅が特定のサイズに達したら停止する VEXcode Blocks プロジェクト。 プロジェクトは、「開始時」ブロックと「永久」ループで始まります。 プロジェクトの残りの部分は Forever ループ内にあります。 まず、Blue の AIVision1 スナップショットを取得し、プロジェクトの残りの部分は、AIVision1 オブジェクトが存在するかどうかを読み取る If ブロック内にあります。 この If ブロック内には、AIVision1 オブジェクトの幅が 250 未満であれば前進し、そうでない場合は前進を停止するという If Else ブロックがあります。

この例では、オブジェクトの幅がナビゲーションに使用されます。 ロボットは、幅が特定のサイズに達するまで物体に近づき、停止します。

CenterXとCenterY

これは、検出されたオブジェクトの中心座標(ピクセル単位)です。

AI ビジョン センサーが青いバッキーボールを追跡している様子が示されています。 Buckyball の周囲には追跡用の四角形があり、上のラベルには X 位置が 176、Y 位置が 117 であることが示されています。 追跡四角形の中心が強調表示され、位置が中心から測定されていることを示します。

CenterX と CenterY 座標は、ナビゲーションと配置に役立ちます。 AI ビジョン センサーの解像度は 320 x 240 ピクセルです。

AI ビジョン センサーが 2 つの Blue Cube を追跡している様子が表示されます。 キューブの周囲には追跡用の四角形があり、そのうちの 1 つはカメラにかなり近くなっています。 近い方の Y 位置は 184 で、遠い方の Y 位置は 70 です。

AI ビジョン センサーに近いオブジェクトは、遠いオブジェクトよりも CenterY 座標が低くなることがわかります。

VEXcode Blocks プロジェクトでは、ロボットが検出されたオブジェクトに向かって向きを変え、AI ビジョン センサーの視野の中央に入ります。 プロジェクトは、「開始時」ブロックと「永久」ループで始まります。 プロジェクトの残りの部分は Forever ループ内にあります。 まず、Blue の AIVision1 スナップショットを取得し、プロジェクトの残りの部分は、AIVision1 オブジェクトが存在するかどうかを読み取る If ブロック内にあります。 この If ブロック内には、AIVision1 オブジェクト centerX が 150 より大きく、AIVision1 オブジェクト centerX が 170 より小さい場合は右折し、それ以外の場合は運転を停止するという If Else ブロックがあります。

この例では、AI ビジョン センサーのビューの中心が (160, 120) であるため、検出されたオブジェクトの centerX 座標が 150 ピクセルより大きく 170 ピクセルより小さくなるまでロボットは右に曲がります。

角度

角度値の 360 度を示すために、赤い正方形と緑の正方形が一緒に回転するアニメーション。

角度は、カラー コード およびAprilTagsでのみ使用可能なプロパティです。 これは、検出されたカラー コードまたは AprilTag の向きが異なっているかどうかを表します。

AI ビジョン センサーが、緑、次に青のカラー コードを追跡している様子が表示されます。 ビデオフィードには、青いキューブの上に積み重ねられた緑のキューブが示されています。 カラー コードの角度値が強調表示され、87 度と表示されます。これは、カラー コードが垂直方向になっていることを示します。

ロボットがカラー コード またはAprilTag に対して異なる方向を向いているかどうかを確認し、それに応じてナビゲーションの決定を行うことができます。

AI ビジョン センサーが、緑、次に青のカラー コードを追跡している様子が表示されます。 ビデオフィードには、緑のキューブが青のキューブの隣に置かれているのが示されていますが、センサーと比較すると角度が不自然です。 カラー コードの角度値が強調表示され、0 度と表示されます。これは、カラー コードの角度を読み取ることができないことを示しています。

たとえば、カラー コード が適切な角度で検出されない場合、それが表すオブジェクトをロボットが適切に拾うことができない可能性があります。

OriginXとOriginY

OriginX と OriginY は、検出されたオブジェクトの左上隅の座標 (ピクセル単位) です。

AI ビジョン センサーが青いバッキーボールを追跡している様子が示されています。 Buckyball の周囲には追跡用の四角形があり、上のラベルには X 位置が 176、Y 位置が 117 であることが示されています。 追跡四角形の左上隅が強調表示され、原点の位置が左上隅から測定されていることを示します。

OriginX と OriginY 座標は、ナビゲーションと配置に役立ちます。 この座標をオブジェクトの幅と高さと組み合わせることで、オブジェクトの境界ボックスのサイズを決定できます。 これは、移動するオブジェクトの追跡やオブジェクト間の移動に役立ちます。

ロボットが検出したオブジェクトを画面上に四角形として描画する VEXcode Blocks プロジェクト。 プロジェクトは、「開始時」ブロックと「永久」ループで始まります。 プロジェクトの残りの部分は Forever ループ内にあります。 まず、Blue の AIVision1 スナップショットを取得し、プロジェクトの残りの部分は、AIVision1 オブジェクトが存在するかどうかを読み取る If ブロック内にあります。 この If ブロック内には、Brain 上に四角形の AIVision1 オブジェクトの originX、AIVision1 オブジェクトの originY、AIVision1 オブジェクトの幅、AIVision1 オブジェクトの高さを描画する四角形の描画ブロックがあります。

この例では、原点、幅、高さの正確な座標を使用して、Brain 上に四角形が描画されます。

タグID

tagID はAprilTagsでのみ使用できます。 これは指定されたAprilTagの ID 番号です。

3 つの AprilTag が AI Vision Utility によって追跡されています。 各タグは識別され、位置が特定され、輪郭が描かれ、システムによる追跡が示されます。 この例の AprilTag ID は 0、3、9 です。

特定の AprilTags を識別すると、選択的なナビゲーションが可能になります。 ロボットを特定のタグに向かって移動し、他のタグを無視するようにプログラムして、タグを自動ナビゲーションの道標として効果的に使用できます。

スコア

スコア プロパティは、AI ビジョン センサーでAI 分類 を検出するときに使用されます。

AI ビジョン ユーティリティによって、2 つの BuckyBall と 2 つのリングの 4 つのオブジェクトが追跡されています。 各オブジェクトは識別され、位置が特定され、輪郭が描かれ、システムによる追跡が示されます。 このユーティリティは、各オブジェクトの AI 分類スコアもリストします。この例では、各スコアは 99% です。

信頼スコアは、AI ビジョン センサーの検出の確実性を示します。 この画像では、これら 4 つのオブジェクトの AI 分類を 99% の信頼度で識別しています。 このスコアを使用すると、ロボットが信頼性の高い検出のみに集中できるようになります。


オブジェクト項目の設定

AI ビジョン センサーによってオブジェクトが検出されると、そのオブジェクトは配列に格納されます。 デフォルトでは、AI ビジョン センサーは配列の最初のオブジェクト、つまりインデックスが 1 のオブジェクトからデータを取得します。 AIビジョンセンサーが1つのオブジェクトのみを検出した場合、そのオブジェクトがデフォルトで選択されます

ただし、AI ビジョン センサーが一度に複数のオブジェクトを検出した場合は、オブジェクト項目の設定 ブロックを使用して、データを取得するオブジェクトを指定する必要があります。

VEXcode EXP オブジェクト項目設定ブロックは、AIVision1 オブジェクト項目を 1 に設定します。 AI ビジョン センサーを選択するためのドロップダウンと、オブジェクト インデックスを入力するためのテキスト フィールドがあります。

AI ビジョンセンサーによって複数のオブジェクトが検出されると、それらは最大のものから最小のものの順に配列されます。 つまり、検出された最大のオブジェクトは常にオブジェクト インデックス 1 に設定され、最小のオブジェクトは常に最高番号に設定されます。

AI ビジョン センサーが 2 つの Blue Cube を追跡している様子が表示されます。 キューブの周囲には追跡用の四角形があり、そのうちの 1 つはカメラにかなり近くなっています。 近い方の線の幅は 136 で、遠い方の線の幅は 78 です。

この例では、カラー シグネチャ 「青」で 2 つのオブジェクトが検出されました。 Take Snapshot ブロックが使用されると、これら両方が配列に配置されます。

AI ビジョン センサーが 2 つの Blue Cube を追跡している様子が表示されます。 キューブの周囲には追跡用の四角形があり、そのうちの 1 つはカメラにかなり近くなっています。 近い方の立方体には 1 というラベルが付けられ、遠い方の立方体には 2 というラベルが付けられます。

ここで、最前面のオブジェクトは最大のオブジェクトなのでオブジェクト インデックス 1 になり、最小のオブジェクトはオブジェクト インデックス 2 になります。


オブジェクトが存在する

スナップショットからデータを取得する前に、 AI ビジョン センサーがそのスナップショットからオブジェクトを検出したことを確認することがです。 ここで、「Object Exists ブロックが役立ちます。

VEXcode EXP オブジェクトが存在するブロックに AIVision1 オブジェクトが存在しますか? AI ビジョンセンサーを選択するためのドロップダウンがあります。

このブロックは、最後に撮影されたスナップショットにオブジェクトが検出されたかどうかに応じて、True またはFalse 値を返します

このブロックは 潜在的に空のスナップショットからデータを取得しようとしていないことを確認するために使用する必要があります。

検出された青い物体に向かってロボットが走行する VEXcode Blocks プロジェクト。 プロジェクトは、「開始時」ブロックと「永久」ループで始まります。 プロジェクトの残りの部分は Forever ループ内にあります。 まず、Blue の AIVision2 スナップショットを取得し、次に AIVision2 オブジェクトが存在する場合は前進し、存在しない場合は走行を停止するという If Else ブロックを実行します。

たとえば、ここではロボットが AI ビジョン センサーを使用して継続的にスナップショットを撮影します。 いずれかの オブジェクトが「青」 カラー シグネチャであると識別された場合、前進します。


スナップショットに「青」 カラー シグネチャがない場合、ロボットは動きを停止します。


オブジェクト数

AIVision1 オブジェクト数を読み取る VEXcode EXP オブジェクト カウント ブロック。 AI ビジョンセンサーを選択するためのドロップダウンがあります。

オブジェクト数 ブロックを使用すると、AI ビジョン センサーが最後のスナップショットで認識できる特定の カラー シグネチャ のオブジェクトの数を確認できます。 

AI ビジョン センサーが 2 つの Blue Cube を追跡している様子が表示されます。 キューブの周囲には追跡用の四角形があり、そのうちの 1 つはカメラにかなり近くなっています。

ここでは、AI ビジョン センサーに カラー シグネチャ 「青」が設定されており、2 つのオブジェクトを検出していることがわかります。

ロボットが検出された青いオブジェクトの数をプリント コンソールに出力する VEXcode Blocks プロジェクト。 プロジェクトは、「開始時」ブロックと「永久」ループで始まります。 プロジェクトの残りの部分は Forever ループ内にあります。 まず、Blue の AIVision2 スナップショットを取得し、コンソール上のすべての行をクリアしてから、コンソール上のカーソルを次の行に設定します。 次は、AIVision2 オブジェクトが存在するかどうかを読み取り、コンソールに AIVision2 オブジェクトの数を出力し、カーソルを次の行に設定する If ブロックです。 If ブロックの外側には、2 秒間待機するように設定された Wait ブロックがあります。以前の VEXcode Blocks プロジェクトの Print Console 出力には、2 というメッセージが印刷されています。

このコードでは、AI ビジョン センサーはスナップショットを取得し、VEXcode コンソールに「2」を出力します。これは、「青」 カラー シグネチャを 2 つだけ検出したためです。


物体

AIVision1 オブジェクトの幅を読み取る VEXcode EXP AI Vision オブジェクト ブロック。 AI ビジョン センサーを選択するためのドロップダウンと、センシングするオブジェクトの属性を選択するためのドロップダウン メニューが開いています。 オプションのリストには、幅、高さ、centerX、centerY、角度、originX、originY、tagID、スコアが含まれます。

オブジェクト ブロックを使用すると、指定したオブジェクトのプロパティをレポートできます。 これにより、最後に取得したスナップショットから取得した利用可能なデータをすべて使用できるようになります。

取得したスナップショットから取得できるオブジェクト プロパティは次のとおりです。

  • 身長
  • センターX
  • 中心Y
  • 角度
  • オリジンX
  • 起源Y
  • タグID
  • スコア

これらのプロパティの詳細については、この記事の「スナップショットから取得されたデータ」セクションをお読みください。


検出されたAprilTagは

VEXcode EXP Detected AprilTag は、AIVision1 が検出した AprilTag が 1 であると読み取るブロックです。 AI ビジョンセンサーを選択するためのドロップダウンがあります。

検出された AprilTag ブロックは、AprilTag 検出モード オンになっている場合にのみ使用できます

このブロックは、指定されたオブジェクトが特定の AprilTag であるかどうかに応じて True または False を報告します。

3 つの AprilTag が AI Vision Utility によって追跡されています。 各タグは識別され、位置が特定され、輪郭が描かれ、システムによる追跡が示されます。 この例の AprilTag ID は 0、3、9 です。

1 つのスナップショットで複数の AprilTag が検出された場合、それらはサイズではなく識別された ID に基づいて配列に配置されます

この画像では、ID 0、3、9 の 3 つの AprilTag が検出されています。 配列内では ID の昇順に整理されます。 インデックス 1 のオブジェクトは ID 0 の AprilTag に対応し、インデックス 2 のオブジェクトは ID 3 の AprilTag に対応し、インデックス 3 のオブジェクトは ID 9 の AprilTag に対応します。

AprilTags とは何か、また AI ビジョン センサーで AprilTags の検出を有効にする方法の詳細については、この記事をお読みください。


AI分類は

VEXcode EXP AI Classification は、AIVision1 AI classification が BlueBall であると読み取るブロックです。 AI ビジョン センサーを選択するためのドロップダウンと、ターゲット AI 分類オブジェクトを選択するための別のドロップダウン メニューがあります。

AI 分類 ブロックは、AI 分類検出モード オンの場合にのみ使用できます。

 

このブロックは、指定されたオブジェクトが特定の AI 分類であるかどうかに応じて True または False を報告します。

AI ビジョン センサーで検出できる AI 分類は、使用しているモデルによって異なります。 利用可能なAI分類と、AIビジョンセンサーでそれらの検出を有効にする方法の詳細については、この記事お読みください

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: