ブロックで使用できるように、AI ビジョン センサーで カラー シグネチャ と カラー コード が設定されていることを確認してください。設定方法の詳細については、以下の記事をお読みください。
AI ビジョン センサーは、AI 分類と AprilTags も検出できます。これらの検出モードを有効にする方法については、こちらをご覧ください。
これらの個々のコマンドの詳細と、VEXcode での使用方法については、API サイトをご覧ください。
AIビジョンセンサーで視覚データを取得する
すべての AI ビジョン センサー コマンドは、構成された AI ビジョン センサーの名前で始まります。この記事のすべての例において、使用される AI ビジョン センサーの名前は AIVisionになります。
スナップショット
takeSnapshot メソッドは、AI ビジョン センサーが現在見ているものを写真に撮り、そのスナップショットからプロジェクトで使用できるデータを取得します。スナップショットを撮影するときに、AI ビジョン センサーがどのタイプのオブジェクトのデータを収集するかを指定する必要があります。
-
カラー署名 またはカラーコード
- これらのビジュアル シグネチャは、AI ビジョン センサーの名前、二重アンダースコア、そしてビジュアル シグネチャの名前で始まります (例:
AIVision1__Blue。
- これらのビジュアル シグネチャは、AI ビジョン センサーの名前、二重アンダースコア、そしてビジュアル シグネチャの名前で始まります (例:
-
AI分類 -
aivision::ALL_AIOBJS -
4月タグ-
aivision::ALL_TAGS
スナップショットを撮ると、指定したすべての検出されたオブジェクトの配列が作成されます。たとえば、「青」の カラー シグネチャを検出する場合、AI ビジョン センサーが 3 つの異なる青いオブジェクトを検出すると、3 つすべてのデータが配列に格納されます。
この例では、 AIVision1という名前の AI ビジョン センサーから「青」 カラー シグネチャのスナップショットが取得されます。配列内で検出されたオブジェクトの数を表示し、0.5 秒ごとに新しいスナップショットをキャプチャします。
while (true) {
// すべての青色オブジェクトのスナップショットを取得します。
AIVision.takeSnapshot(AIVision1__Blue);
// データを取得する前に、スナップショットでオブジェクトが検出されたことを確認します。
if (AIVision.objectCount > 0) {
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, msec);
}オブジェクト
スナップショットからの各オブジェクトには、そのオブジェクトに関する情報を報告するために使用できるさまざまなプロパティがあります。オブジェクト メソッドを使用すると、これらのプロパティにアクセスできます。
使用可能なプロパティは次のとおりです。
- id
- centerXとcenterY
- originXとoriginY
- 幅
- 身長
- 角度
- 存在する
- スコア
オブジェクトのプロパティにアクセスするには、AI ビジョン センサーの名前、オブジェクトのメソッド、オブジェクトのインデックスの順に使用します。
オブジェクト インデックスは、取得する特定のオブジェクトのプロパティを示します。スナップショットを撮影した後、AI ビジョン センサーはオブジェクトをサイズごとに自動的に分類します。最大のオブジェクトにはインデックス 0 が割り当てられ、小さいオブジェクトにはより大きなインデックス番号が割り当てられます。
たとえば、最大のオブジェクトの幅を呼び出す場合は、 AIVision1.objects[0].widthとなります。
id
id プロパティは、 AprilTags および AI 分類でのみ使用できます
AprilTagの場合、 id プロパティは検出されたAprilTag ID番号を表します。
特定の AprilTags を識別すると、選択的なナビゲーションが可能になります。ロボットを特定のタグに向かって移動し、他のタグを無視するようにプログラムして、それらを自動ナビゲーションの道標として効果的に使用できます。
AI 分類の場合、 id プロパティは検出された AI 分類の特定のタイプを表します
特定の AI 分類を識別することで、ロボットは、青いバッキーボールではなく赤いバッキーボールに向かって移動するなど、特定のオブジェクトにのみ焦点を当てることができます。
AprilTags および AI 分類 の詳細と、AI Vision Utility でそれらの検出を有効にする方法については、これらの記事をご覧ください。
中心X と 中心Y
これは、検出されたオブジェクトの中心座標(ピクセル単位)です。
CenterX と CenterY 座標は、ナビゲーションと配置に役立ちます。 AI ビジョン センサーの解像度は 320 x 240 ピクセルです。
AI ビジョン センサーに近いオブジェクトは、遠いオブジェクトよりも CenterY 座標が低くなることがわかります。
この例では、AI ビジョン センサーのビューの中心が (160, 120) であるため、検出されたオブジェクトの centerX 座標が 150 ピクセルより大きく 170 ピクセルより小さくなるまでロボットは右に曲がります。
while (true) {
// すべての Blue Color オブジェクトのスナップショットを取得します。
AIVision.takeSnapshot(AIVision__Blue);
// データを取得する前に、スナップショットでオブジェクトが検出されたことを確認します。
AIVision.objectCount > 0の場合 {
AIVision.objects[0].centerX > 150.0 && 170.0 > AIVision.objects[0].centerXの場合 {
Drivetrain.turn(right);
} else {
Drivetrain.stop();
}
}
wait(5, msec);
}
originX と originY
OriginX と OriginY は、検出されたオブジェクトの左上隅の座標 (ピクセル単位) です。
OriginX と OriginY 座標は、ナビゲーションと配置に役立ちます。この座標をオブジェクトの幅と高さと組み合わせることで、オブジェクトの境界ボックスのサイズを決定できます。これは、移動するオブジェクトの追跡やオブジェクト間の移動に役立ちます。
幅高さ 、幅 、高さ
これは、検出されたオブジェクトのピクセル単位の幅または高さです。
幅と高さの測定値は、さまざまなオブジェクトを識別するのに役立ちます。たとえば、バッキーボールはリングよりも高さが高くなります。
幅と高さは、AI ビジョン センサーからの物体の距離も示します。通常、測定値が小さいほど物体が遠くにあることを意味し、測定値が大きいほど物体が近いことを示唆します。
この例では、オブジェクトの幅がナビゲーションに使用されます。ロボットは、幅が特定のサイズに達するまで物体に近づき、停止します。
while (true) {
// すべての Blue オブジェクトのスナップショットを取得します。
AIVision.takeSnapshot(AIVision1__Blue);
// データを取得する前に、スナップショットでオブジェクトが検出されたことを確認します。
AIVision.objectCountが > 0の場合{
AIVision.objects[0].widthが < 250.0の場合{
Drivetrain.drive(forward);
} else {
Drivetrain.stop();
}
}
wait(5, msec);
}角度
角度 プロパティは、カラーコード およびAprilTagsでのみ使用できます
これは、検出された カラー コードまたは AprilTag の向きが異なっているかどうかを表します。
ロボットがカラー コード またはAprilTag に対して異なる方向を向いているかどうかを確認し、それに応じてナビゲーションの決定を行うことができます。
たとえば、カラー コード が適切な角度で検出されない場合、それが表すオブジェクトをロボットが適切に拾うことができない可能性があります。
スコア
スコア プロパティは、AI ビジョン センサーでAI 分類 を検出するときに使用されます。
信頼スコアは、AI ビジョン センサーの検出の確実性を示します。この画像では、これら 4 つのオブジェクトの AI 分類を 99% の信頼度で識別しています。このスコアを使用すると、ロボットが信頼性の高い検出のみに集中できるようになります。
存在する
存在 プロパティは、最後に撮影されたスナップショットで指定された ビジュアル シグネチャ が検出されたかどうかを検出するために使用されます。
これにより、検出されたオブジェクトが前のスナップショットで検出されたかどうかを確認できます。このプロパティは、オブジェクトが存在する場合は True を返し、オブジェクトが存在しない場合には False を返します。
オブジェクト数
objectCount メソッドは、最後のスナップショットで検出されたオブジェクトの数を返します。
この例では、カラー シグネチャ 「青」で 2 つのオブジェクトが検出されました。 takeSnapshot メソッドを使用すると、両方とも配列に配置されます。
このコード スニペットは、検出されたオブジェクトの数を EXP Brain に継続的に更新します。提供された例に基づくと、2 つのオブジェクトが検出されたことを示す値 2 が繰り返し送信されます。
while (true) {
// すべての Blue オブジェクトのスナップショットを取得します。
AIVision.takeSnapshot(AIVision__Blue);
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
// データを取得する前に、スナップショットでオブジェクトが検出されたことを確認します。
if (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
wait(5 msec);
}