VEXcode V5 PythonでAIビジョンセンサーを使ったコーディング

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

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

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


AIビジョンセンサーで視覚データを取得する

すべての AI ビジョン センサー コマンドは、構成された AI ビジョン センサーの名前で始まります。 この記事のすべての例では、使用される AI ビジョン センサーの名前は ai_vision_1になります。

スナップショット

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

  • カラー署名 またはカラーコード
    • これらのビジュアル シグネチャは、AI ビジョン センサーの名前、二重アンダースコア、そしてビジュアル シグネチャの名前で始まります (例: ai_vision_1__Blue
  • AI分類 - AiVision.ALL_AIOBJS
  • 4月タグ- AiVision.ALL_TAGS

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

この例では、変数 vision_objects には、 ai_vision_1という名前の AI ビジョン センサーから検出された「紫」のカラー シグネチャ を含むタプルが格納されます。 検出されたオブジェクトの数を表示し、0.5 秒ごとに新しいスナップショットをキャプチャします。

while True: 
# すべての紫色のカラーシグネチャのスナップショットを取得し、vision_objectsに保存します
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Purple)

# データを取得する前に、スナップショットでオブジェクトが検出されたことを確認します
vision_objects[0].exists == True の場合

brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)

brain.screen.print("オブジェクト数:", len(vision_objects))
wait(0.5, SECONDS)

オブジェクトのプロパティ

スナップショットからの各オブジェクトには、そのオブジェクトに関する情報を報告するために使用できるさまざまなプロパティがあります。 使用可能なプロパティは次のとおりです。

  • id
  • centerXとcenterY
  • originXとoriginY
  • 身長
  • 角度
  • スコア
  • 存在する

オブジェクトのプロパティにアクセスするには、タプルを格納する変数名と、それに続くオブジェクト インデックスを使用します。

オブジェクト インデックスは、取得する特定のオブジェクトのプロパティを示します。 スナップショットを撮影した後、AI ビジョン センサーはオブジェクトをサイズごとに自動的に分類します。 最大のオブジェクトにはインデックス 0 が割り当てられ、小さいオブジェクトにはより大きなインデックス番号が割り当てられます。

たとえば、 vision_objects 変数内で最大のオブジェクトの幅を呼び出す場合は、 vision_objects[0].widthとなります。

id

id プロパティは、 AprilTags および AI 分類でのみ使用できます

ID 0、9、3 のラベルが付いた 3 つの正方形の識別マーカー。それぞれに対応する座標とサイズの測定値が白いテキストで表示されます。 ID 0 は左側、ID 9 は右側、ID 3 は下部中央にあります。 各マーカーには、正方形の中に独自の白黒パターンがあります。

AprilTagの場合、 id プロパティは検出されたAprilTag ID番号を表します。

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

画像には 2 つのボールと 2 つのリングが示されており、それぞれの位置、サイズ、スコアを示すラベルが付いています。 赤いボールは左側、青いボールは右側、緑のリングは左下、赤いリングは右下にあります。 各オブジェクトは白いボックスで囲まれ、X、Y 座標、幅、高さ、99% のスコアなどの詳細が白いテキストで表示されます。

AI 分類の場合、 id プロパティは検出された AI 分類の特定のタイプを表します

特定の AI 分類を識別することで、ロボットは、青いバッキーボールではなく赤いバッキーボールに向かって移動するなど、特定のオブジェクトにのみ焦点を合わせることができます。

AprilTags および AI 分類 の詳細と、AI Vision Utility でそれらの検出を有効にする方法については、これらの記事をご覧ください。

中心X中心Y

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

コンピューター ビジョン システムによって追跡されている青いバッキーボール。 オブジェクトは白い四角で囲まれており、その輪郭の内側には、中央の白い十字を囲む小さな赤い四角があります。 画像の左上隅のラベルには、オブジェクトが青で、座標が X:176、Y:117、寸法が W:80、H:78 であることがわかります。

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

ビジョン システムによって追跡される 2 つの青い立方体オブジェクト。 上のオブジェクトには、座標 X:215、Y:70、寸法 W:73、H:84 のラベルが付けられ、白いアウトラインと中央に白い十字が付いています。 下のオブジェクトには、座標 X:188、Y:184、寸法 W:144、H:113 のラベルが付けられており、これも白の輪郭と中央の白い十字で囲まれています。

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

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

while True:
# すべての青色シグネチャのスナップショットを取得し、vision_objectsに保存します
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Blue)

# データを取得する前に、スナップショットでオブジェクトが検出されたことを確認します
if vision_objects[0].exists == True

# オブジェクトがAIビジョンセンサーの視野の中央にないかどうかを確認します。
if vision_objects[0].centerX > 150 and 170 > vision_objects[0].centerX:

# オブジェクトがビューの中央に来るまで右に回り続けます
drivetrain.turn(RIGHT)
そうでなければ:
drivetrain.stop()
wait(5, MSEC)

originXoriginY

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

視覚システムによって追跡されている青いバッキーボール。 オブジェクトは白いアウトラインで囲まれ、アウトラインの中央には白い十字が表示されます。 左上のラベルには、オブジェクトの色が青であること、座標が X:176、Y:117、寸法が W:80、H:78 であることが示されています。 小さな赤い四角がオブジェクトの左上隅を強調表示します。

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

高さ 、幅 、高さ

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

画像には、白い四角い輪郭で追跡されている青いバッキーボールが示されています。 左上隅には、座標 X:176、Y:117、寸法 W:80、H:78 の青いオブジェクトであることを示すラベルがあります。 赤い矢印はオブジェクトの幅と高さを強調表示します。

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

視覚認識システムによって追跡されている 2 つの青い立方体オブジェクト。 上の立方体には白い輪郭があり、その位置は X:215、Y:70、寸法は W:73、H:84 と示すラベルが付いています。 下の立方体には同様の白い輪郭があり、ラベルには X:188、Y:184、寸法 W:144、H:113 が表示されています。 各立方体の中央には白い十字があり、追跡の焦点を示していると考えられます。 ラベルには、各オブジェクトの測定値と追跡データが強調表示されます。

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

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

while True:
# すべての青色シグネチャのスナップショットを取得し、vision_objectsに保存します
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Blue)

# データを取得する前に、スナップショットでオブジェクトが検出されたことを確認します
if vision_objects[0].exists == True

# 最大の物体の幅を測定して、AIビジョンセンサーに近いかどうかを確認します
if vision_objects[0].width < 250:

# オブジェクトの幅が250ピクセルを超えるまで近づきます
drivetrain.drive(FORWARD)
そうでなければ:
drivetrain.stop()

wait(5, MSEC)

角度

赤と緑のブロックが回転する GIF 画像。 ブロックが赤から緑まで完全に水平に配置されている場合、0 度として表示されます。 赤いブロックが緑のブロックの上に垂直に重なる場合、角度は 90 度です。 ブロックが水平に緑から赤の場合は 180 度です。 緑のブロックが赤いブロックの上に垂直に重なる場合は 20 度です。

角度 プロパティは、カラーコード およびAprilTagsでのみ使用できます

これは、検出された カラー コードまたは AprilTag の向きが異なっているかどうかを表します。

ビジョン システムによって追跡されている、上部に緑色の立方体、下部に青色の立方体 2 個が積み重ねられています。 両方の立方体の周囲に白い輪郭があり、緑の立方体の中央に白い十字があります。 画像の下部のラベルには Green_Blue A:87° と表示され、検出された色と角度の測定値が示されます。 その下には、座標が X:117、Y:186、寸法が W:137、H:172 と記載されており、フレーム内に積み重ねられた立方体の位置とサイズを表しています。

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

緑と青の 2 つの立方体が並んで配置され、視覚システムによって追跡されます。 両方の立方体の周囲に白い輪郭があり、中央に白い十字があります。 左上のラベルは Green_Blue A:0° を示しており、検出された色と角度の測定値を参照しています。 その下には、座標が X:150、Y:102、寸法が W:179、H:109 と表示され、フレーム内の立方体の位置とサイズを表しています。

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

スコア

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

この画像は、視覚システムによって追跡されている 4 つのオブジェクト (ボール 2 個とリング 2 個) を示しています。 赤いボールには、座標 X:122、Y:84、W:67、H:66、スコア 99% のラベルが付けられています。 青いボールのX:228、Y:86、W:70、H:68、スコアは99%です。 緑のリングの座標は X:109、Y:186、W:98、H:92、スコアは 99% です。 赤いリングには、X:259、Y:187、W:89、H:91 のラベルが付けられ、スコアは 99% です。 各オブジェクトは白で囲まれ、追跡の精度を示します。

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

存在する

存在 プロパティは、最後に撮影されたスナップショットで指定された ビジュアル シグネチャ が検出されたかどうかを検出するために使用されます。

これにより、検出されたオブジェクトが前のスナップショットで検出されたかどうかを確認できます。 このプロパティは、オブジェクトが存在する場合は True を返し、オブジェクトが存在しない場合には False を返します。

 

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

Last Updated: