AIビジョン#

導入#

VEX AIMコーディングロボットのAIビジョンセンサーは、物体、色、およびAprilTag IDを検出して追跡します。これにより、ロボットは周囲の状況を分析し、物体を追跡し、検出された視覚データに基づいて反応することができます。

AIビジョンセンサーの解像度は320×240ピクセルです。原点(0, 0)は左上隅に位置し、センサーの中心は(160, 120)に配置されます。下の図を参照してください。

AIM AI Vision Sensorの解像度を示す図。図の左上が座標0, 0、右上が座標320, 0、左下が座標0, 240、中央が座標160, 120です。

以下はすべてのブロックのリストです。

操作 — AI Visionフィードを制御し、オブジェクトデータを取得します。

設定 — 検出されたオブジェクトのうち、アクセスするオブジェクトを調整します。

  • set AI Vision object item — 検出されたオブジェクトリストから特定のオブジェクトを選択します。

値 — オブジェクトの存在、分類、およびプロパティを返します。

行動#

画面上のAI Visionビューア#

AI Vision ビューア(画面上) スタックブロックは、ロボットの画面にライブ AI Vision フィードを表示するかどうかを切り替えます。有効にすると、画面にはリアルタイムのセンサーデータが表示され、他の画像やテキストは表示されなくなります。他のコンテンツを表示するには、このブロックを使用してフィードを非表示にします。

AI Visionダッシュボードのスタックブロックの表示/非表示を切り替える。#
AI Vision ビューワーをスクリーンに [表示 v]

パラメータ

説明

状態

ロボットの画面へのデータフィードの表示を制御します。show はデータフィードを表示し、hide は画面からデータフィードを非表示にします。

例

開始時に実行されるブロックから始まり、続いて「AI Vision Sensorのフィードを5秒間表示します」というコメントブロックが続くブロックのスタックです。「AI Visionダッシュボードを表示」ブロックがフィードを表示し、次に「待機」ブロックが実行を5秒間一時停止します。待機後、「AI Visionダッシュボードを非表示」ブロックがフィードを非表示にします。#
開始したとき
[View the AI Vision Sensor's feed for five seconds.]
AI Vision ビューワーをスクリーンに [表示 v]
[5] 秒待つ
AI Vision ビューワーをスクリーンに [非表示 v]

オブジェクトデータを取得する#

オブジェクトデータ取得スタックブロックは、AIビジョンセンサーフレームからのデータを単一のシグネチャ(センサーが認識できるもの、例えば事前学習済みのオブジェクト、AprilTag ID、設定済みの色またはカラーコードなどの保存された説明)にフィルタリングします。

このブロックで使用する前に、AI Vision Utilityで色とカラーコードを設定しておく必要があります。

データセットには、インデックス0から始まり、幅の大きい順から小さい順にオブジェクトが格納されます。各オブジェクトのプロパティには、AI Visionオブジェクトプロパティブロックを使用してアクセスできます。一致するオブジェクトが検出されない場合は、空のデータセットが報告されます。

オブジェクトデータ取得スタックブロック。#
AI Vision から [スポーツボール v] データを取得

パラメータ

説明

サイン

指定された署名のデータのみを含むようにデータセットをフィルタリングします。使用可能な署名は次のとおりです。

  • スポーツボール
  • オレンジの樽
  • 青い樽
  • AIMロボット
  • AprilTag ID 0
  • AprilTag ID 1
  • AprilTag ID 2
  • AprilTag ID 3
  • AprilTag ID 4
  • すべての貨物 - スポーツボールとすべての樽
  • NAME - 色またはカラーコード。NAMEはAI Vision Utilityで設定された名前です。

例

A stack of blocks that begins with a when started block, followed by a comment block reading Move forward if a Sports Ball is detected. A get object data* block captures an image of a sports ball. An if block then checks if an AI Vision object exists. If true, a move forward block moves the robot forward by 10 millimeters.#
開始したとき
[Move forward if a sports ball is detected.]
ずっと
AI Vision から [スポーツボール v] データを取得
もし <AI Vision オブジェクトあり?> なら
[前進 v] へ [10] [mm v] 移動 ▶

カラーシグネチャー#

カラーシグネチャとは、AIビジョンセンサーが認識できる固有の色のことです。このシグネチャにより、センサーは色に基づいて物体を検出および追跡できます。AIビジョンユーティリティでカラーシグネチャを設定すると、センサーは視野内のその特定の色を持つ物体を識別できるようになります。

カラーシグネチャは、オブジェクトデータ取得ブロックで使用され、色付きオブジェクトをリアルタイムで処理および検出します。

AI Vision Utility は、接続されたビジョンセンサーが 2 つの色の物体を検出している様子を示しています。左側にはライブカメラの映像が表示され、左側に青いボックス、右側に赤いボックスが表示され、それぞれ白い境界ボックスで囲まれています。黒いラベルには、それぞれの名前、座標、寸法が表示されます。右側には、赤と青のボックスの色相と彩度範囲のスライダーを備えたカラーシグネチャ設定があります。下部には、色の追加、ビデオのフリーズ、画像のコピー、画像の保存を行うボタンがあり、右下隅には閉じるボタンがあります。

例

開始したとき
[Display if any objects matching the Red_Box signature is detected.]
ずっと
スクリーンのカーソルを行 [1] 列 [1] に設定
スクリーンの行 [1] をクリア
[Change the signature to any configured Color Signature.]
AI Vision から [Red_Box v] データを取得
もし <AI Vision オブジェクトあり?> なら
[Color signature detected!] をスクリーンに表示 ▶

カラーコード#

カラーコードとは、2~4個のカラーシグネチャを特定の順序で配置した構造化されたパターンです。AI Vision Utilityでカラーコードを設定すると、センサーはあらかじめ定義された色のパターンを認識できるようになります。

カラーコードは、複雑な物体を識別したり、ゲーム要素と位置合わせしたり、自律航行用の固有マーカーを作成したりする際に特に役立ちます。

AI Vision Utility インターフェースには、接続されたビジョンセンサーが隣接する 2 つのオブジェクト (左側の青いボックスと右側の赤いボックス) を検出し、それらを BlueRed というラベルの付いた単一の白い境界ボックスにまとめて表示しています。検出情報には、角度 (A:11°)、座標 (X:143、Y:103)、幅 (W:233)、高さ (H:108) が含まれます。右側のパネルには、調整可能な色相と彩度範囲を持つ Red_Box、Blue_Box、BlueRed の 3 つのカラーシグネチャが表示されます。BlueRed シグネチャは Blue_Box と Red_Box を組み合わせたものです。ビデオフィードの下には、Freeze Video、Copy Image、Save Image、Close というラベルの付いたボタンがあります。

例

開始したとき
[Display if any objects matching the BlueRed code is detected.]
ずっと
スクリーンのカーソルを行 [1] 列 [1] に設定
スクリーンの行 [1] をクリア
[Change the signature to any configured Color Code.]
AI Vision から [BlueRed v] データを取得
もし <AI Vision オブジェクトあり?> なら
[Color code detected!] をスクリーンに表示 ▶

設定#

AI Visionオブジェクトアイテムを設定します#

set AI Vision object itemスタックブロックは、データセット内のどのアイテムを使用するかを設定します。

Set AI Visionオブジェクトアイテムスタックブロック。#
AI Vision オブジェクトのアイテムを (1) に設定

パラメータ

説明

アイテム

データセット内で使用する項目の番号。

例

開始時ブロックから始まるブロックのスタックで、続いて「検出された最大の AprilTag ID を表示します」というコメントブロックが続きます。無限ループ内で、オブジェクトデータ取得ブロックが AprilTag ID の画像をキャプチャします。if ブロックは、AI Vision オブジェクトが存在するかどうかを確認します。存在する場合は、AI Vision オブジェクトアイテム設定ブロックがオブジェクトの数を変数に割り当て、印刷ブロックが検出されたオブジェクトのタグ ID を画面に表示します。#
開始したとき
[Display the width of the smallest detected object.]
ずっと
AI Vision から [全カーゴ v] データを取得
スクリーンの行 [1] をクリア
スクリーンのカーソルを行 [1] 列 [1] に設定
もし <AI Vision オブジェクトあり?> なら
AI Vision オブジェクトのアイテムを (AI Vision オブジェクト数) に設定
(AI Vision オブジェクト [幅 v]) をスクリーンに表示 ▶

価値観#

オブジェクトを持つ#

has object ブールブロックは、ロボットが現在 Kicker に対して検出したオブジェクトを持っているかどうかを報告します。

  • 正解 — ロボットは物体を所持している。

  • 誤り — ロボットは対象物を持っていません。

<[スポーツボール v] を持っている? :: custom-ai-vision>

パラメータ

説明

物体

ロボットのキッカーに対して検出する対象物:

  • スポーツボール
  • 任意の樽
  • オレンジ色の樽
  • 青色の樽

例

開始時に実行されるブロックから始まり、続いて「ロボットがボールを持っているときにキックする」というコメントブロックが続くブロックのスタック。無限ループの中で、ifブロックがロボットがスポーツボールを持っているかどうかをチェックする。持っている場合は、キックオブジェクトブロックが中程度のパワーで実行される。#
開始したとき
[Kick when the robot has a sports ball.]
ずっと
もし <[スポーツボール v] を持っている? :: custom-ai-vision> なら
オブジェクトを [中 v] キック

AIビジョンオブジェクトが存在する#

AI Visionオブジェクトが存在するブールブロックは、データセット内でオブジェクトが検出されたかどうかを報告します。

  • 真 — データセットには検出されたオブジェクトが含まれています。

  • 誤り — 物体は検出されませんでした。

AI Visionオブジェクトはブールブロックを保有しています。#
<AI Vision オブジェクトあり?>

パラメータ

説明

このブロックにはパラメータがありません。

例

開始時ブロックから始まり、続いて「ボールが検出されたら前進する」というコメントブロックが続くブロックのスタック。オブジェクトデータ取得ブロックがスポーツボールの画像をキャプチャします。次に、ifブロックがAI Visionオブジェクトが存在するかどうかを確認します。存在する場合は、前進ブロックがロボットを10ミリメートル前進させます。#
開始したとき
[Move forward if a sports ball is detected.]
ずっと
AI Vision から [スポーツボール v] データを取得
もし <AI Vision オブジェクトあり?> なら
[前進 v] へ [10] [mm v] 移動 ▶

AIビジョンオブジェクトは#

AI Vision オブジェクトは、検出されたオブジェクトが特定の分類に一致するかどうかを報告します。

  • 真 — データセット内の項目は特定のオブジェクトです。

  • 偽 — データセット内の項目は特定のオブジェクトではありません。

AIビジョンAI分類は、オブジェクトのブールブロックです。#
<AI Vision オブジェクトは [スポーツボール v]?>

パラメータ

説明

物体

比較対象とする物体:

  • スポーツボール
  • オレンジ色の樽
  • 青色の樽
  • AIMロボット

例

開始時に始まるブロックのスタックで、続いて「スポーツボールが検出された場合は表示します」というコメントブロックがあります。永久ループ内で、オブジェクトデータ取得ブロックがAI分類を使用して画像をキャプチャします。画面がクリアされ、カーソルが1行目、1列目に設定されます。ifブロックがAI Visionオブジェクトが存在するかどうかをチェックし、存在する場合は、別のifブロックが分類がスポーツボールであるかどうかを確認します。存在する場合は、printブロックが画面に「ボールが検出されました!」と表示し、続いてwaitブロックが0.5秒間一時停止してから処理を繰り返します。#
開始したとき
[Display if a sports ball is detected.]
ずっと
AI Vision から [全カーゴ v] データを取得
スクリーンの行 [1] をクリア
スクリーンのカーソルを行 [1] 列 [1] に設定
もし <AI Vision オブジェクトあり?> なら
もし <AI Vision オブジェクトは [スポーツボール v]?> なら
[Sports ball detected!] をスクリーンに表示 ▶
[0.5] 秒待つ

AI VisionオブジェクトはAprilTag IDです#

AI Vision オブジェクトは AprilTag ID です ブールブロックは、検出された AprilTag ID が特定の ID と一致するかどうかを報告します。

  • 真 — AprilTag ID は番号です。

  • 誤り — AprilTag ID は番号ではありません。

AI Visionが検出したAprilTag IDはブールブロックです。#
<AI Vision object is AprilTag ID [1] ?>

パラメータ

説明

AprilタグID

検出されたAprilTag ID番号と比較する番号。

AIビジョンオブジェクト数#

AI Visionオブジェクトカウントレポーターブロックは、データセット内で検出されたオブジェクトの数を整数として報告します。

AI Vision オブジェクト数

パラメータ

説明

このブロックにはパラメータがありません。

例

開始したとき
[Display the amount of sports balls and barrels.]
ずっと
スクリーンの行 [1] をクリア
スクリーンのカーソルを行 [1] 列 [1] に設定
AI Vision から [全カーゴ v] データを取得
もし <AI Vision オブジェクトあり?> なら
(AI Vision オブジェクト数) をスクリーンに表示 ▶
終わり
[0.5] 秒待つ

AI Visionオブジェクトプロパティ#

オブジェクトデータの取得 ブロックが使用された後に保存される各オブジェクトには、以下に示す 9 つのプロパティが含まれています。

AI Visionオブジェクトプロパティレポーターブロック。#
AI Vision オブジェクト [幅 v]

tagIDを除くすべてのプロパティ値は、get object dataブロックが使用された時点での、検出されたオブジェクトの位置、サイズ、向き、または方位を表します。これらの値は、センサーの320×240ピクセルの解像度に基づいて、ピクセルまたは度で測定されます。

青い樽にオレンジ色のストライプが入ったものがフレームの中央に配置され、黒い境界ボックスで囲まれています。x軸とy軸は、上部に左から右へ0から320、左側に上から下へ0から240とそれぞれラベル付けされています。

パラメータ

説明

財産

検出したオブジェクトのどのプロパティを使用するか:

幅#

widthプロパティは、検出されたオブジェクトの幅をピクセル単位で、1から320までの整数値で報告します。

注: ピクセル値はセンサーの座標系に対する相対値です。はじめにの図を参照してください。

パラメータが幅に設定されたAI Visionオブジェクトのプロパティスタックブロック。#
AI Vision オブジェクト [幅 v]

青い樽にオレンジ色のストライプが入ったものがフレームの中央に配置され、黒い境界ボックスで囲まれています。フレームの上部から境界ボックスの左右の端まで、2本の赤い破線が垂直に伸びています。これらの線の間にある両方向の黒い矢印は、幅の測定値を示しています。

例

開始したとき
[Move towards a blue barrel until its width is larger than 100 pixels.]
ずっと
AI Vision から [青のバレル v] データを取得
もし <AI Vision オブジェクトあり?> なら
もし <(AI Vision オブジェクト [幅 v]) [math_less_than v] [100]> なら
[前進 v] へ移動
終わり
でなければ
全移動を停止

身長#

heightプロパティは、検出されたオブジェクトの高さをピクセル単位で、1から240までの整数値で報告します。

注: ピクセル値はセンサーの座標系に対する相対値です。はじめにの図を参照してください。

パラメータが高さに設定されたAI Visionオブジェクトのプロパティスタックブロック。#
AI Vision オブジェクト [高さ v]

オレンジ色のストライプが入った青い樽がフレームの中央に配置され、黒い境界ボックスで囲まれています。フレームの左側から境界ボックスの上端と下端まで、2本の赤い水平破線が伸びています。これらの線の間にある両方向の黒い矢印は、高さの測定値を示しています。

例

開始したとき
[Move towards a blue barrel until its height is larger than 100 pixels.]
ずっと
AI Vision から [青のバレル v] データを取得
もし <AI Vision オブジェクトあり?> なら
もし <(AI Vision オブジェクト [高さ v]) [math_less_than v] [100]> なら
[前進 v] へ移動
終わり
でなければ
全移動を停止

センターX#

centerXプロパティは、検出されたオブジェクトの中心のx座標をピクセル単位で、0から320までの整数値で報告します。

注: ピクセル値はセンサーの座標系に対する相対値です。はじめにの図を参照してください。

パラメータがcenterXに設定されたAI Visionオブジェクトプロパティスタックブロック。#
AI Vision オブジェクト [centerX v]

青い樽にオレンジ色のストライプが入ったものがフレームの中央に配置され、黒い境界ボックスで囲まれています。フレームの上部から境界ボックスの中心まで垂直の赤い破線が伸びており、中心のX座標を示しています。

例

開始したとき
[Turn slowly until a blue barrel is centered in front of the robot.]
旋回速度を [30]% に設定
[右 v] へ旋回
ずっと
AI Vision から [青のバレル v] データを取得
もし <AI Vision オブジェクトあり?> なら
もし <[140] [math_less_than v] (AI Vision オブジェクト [centerX v]) [math_less_than v] [180]> なら
全移動を停止

センターY#

centerYプロパティは、検出されたオブジェクトの中心のy座標をピクセル単位で、0から240までの整数値で報告します。

注: ピクセル値はセンサーの座標系に対する相対値です。はじめにの図を参照してください。

パラメータがcenterYに設定されたAI Visionオブジェクトプロパティスタックブロック。#
AI Vision オブジェクト [centerY v]

オレンジ色のストライプが入った青い樽がフレームの中央に配置され、黒い境界ボックスで囲まれています。フレームの左側から境界ボックスの中心まで水平の赤い破線が伸びており、中心のY座標を示しています。

例

開始したとき
[Move towards a blue barrel until its center y-coordinate is more than 140 pixels.]
ずっと
AI Vision から [青のバレル v] データを取得
もし <AI Vision オブジェクトあり?> なら
もし <(AI Vision オブジェクト [centerY v]) [math_less_than v] [140]> なら
[前進 v] へ移動
終わり
でなければ
全移動を停止

オリジネーション#

originXプロパティは、検出されたオブジェクトのバウンディングボックスの左上隅のx座標をピクセル単位で、0から320までの整数値で報告します。

注: ピクセル値はセンサーの座標系に対する相対値です。はじめにの図を参照してください。

パラメータがoriginXに設定されたAI Visionオブジェクトプロパティスタックブロック。#
AI Vision オブジェクト [originX v]

オレンジ色のストライプが入った青い樽がフレームの中央に配置され、黒い境界ボックスで囲まれています。フレームの上部から境界ボックスの左端まで垂直の赤い破線が伸びており、境界ボックスの原点のX座標を示しています。

例

開始したとき
[Display if an orange barrel is to the left or the right.]
ずっと
スクリーンの行 [1] をクリア
スクリーンのカーソルを行 [1] 列 [1] に設定
AI Vision から [オレンジのバレル v] データを取得
もし <AI Vision オブジェクトあり?> なら
もし <(AI Vision オブジェクト [originX v]) [math_less_than v] [160]> なら
[To the left!] をスクリーンに表示 ▶
でなければ
[To the right!] をスクリーンに表示 ▶
終わり
[0.5] 秒待つ

起源Y#

originYプロパティは、検出されたオブジェクトのバウンディングボックスの左上隅のy座標をピクセル単位で、0から240までの整数値として報告します。

注: ピクセル値はセンサーの座標系に対する相対値です。はじめにの図を参照してください。

パラメータがoriginYに設定されたAI Visionオブジェクトプロパティスタックブロック。#
AI Vision オブジェクト [originY v]

オレンジ色のストライプが入った青い樽がフレームの中央に配置され、黒い境界ボックスで囲まれています。フレームの左側から境界ボックスの上端まで水平の赤い破線が伸びており、境界ボックスの原点のY座標を示しています。

例

開始したとき
[Display if an orange barrel is close or far from the robot.]
ずっと
スクリーンの行 [1] をクリア
スクリーンのカーソルを行 [1] 列 [1] に設定
AI Vision から [オレンジのバレル v] データを取得
もし <AI Vision オブジェクトあり?> なら
もし <(AI Vision オブジェクト [originY v]) [math_less_than v] [80]> なら
[Far!] をスクリーンに表示 ▶
でなければ
[Close!] をスクリーンに表示 ▶
終わり
[0.5] 秒待つ

回転#

rotationプロパティは、検出されたAprilTag IDまたはカラーコードの向きを、0~359度の整数値で報告します。

AI Visionオブジェクトのプロパティスタックブロック。パラメータは回転に設定されている。#
AI Vision オブジェクト [回転 v]

カメラのインターフェースには、上半分が青、下半分が赤の垂直に積み重ねられたオブジェクトがフレームの中央に表示されます。オブジェクトの下のラベルには、Red_Blue A:270° CX:185 CY:81 W:93 H:150 と表示され、オブジェクトの名前、回転角度、中心の X および Y 座標、幅、高さを示しています。グリッド線と数値軸は画像の寸法を示しており、X は 0 ~ 320、Y は 0 ~ 240 の範囲です。

例

開始したとき
[Slide left or right depending on how the Color Code is rotated.]
ずっと
AI Vision から [Red_Blue v] データを取得
もし <AI Vision オブジェクトあり?> なら
もし <[50] [math_less_than v] (AI Vision オブジェクト [回転 v]) [math_less_than v] [100]> なら
[右 v] へ移動
もし <[270] [math_less_than v] (AI Vision オブジェクト [回転 v]) [math_less_than v] [330]> なら(続き)
[左 v] へ移動
でなければ
全移動を停止
終わり
でなければ
全移動を停止

ベアリング#

bearingプロパティは、AIビジョンセンサーの視野の中心からオブジェクトが左右にどれだけ離れているかを度数で示します。値が0の場合は中心に位置し、正の値はオブジェクトが右にあることを意味し、負の値はオブジェクトが左にあることを意味します。

フィールド上に置かれたVEX AIMコーディングロボット。スポーツボールはロボットの斜め前方左方向にある。ロボットの中心とスポーツボールの間には角度が描かれており、-30度と記されている。 VEX AIMコーディングロボットがフィールド上にあり、スポーツボールがロボットの斜め前方右方向に置かれている。ロボットの中心とスポーツボールの間には角度が描かれており、30度と記されている。
開始したとき
[Keep the blue barrel directly in front of the robot.]
旋回速度を [40]% に設定
ずっと
AI Vision から [青のバレル v] データを取得
もし <AI Vision オブジェクトあり?> なら
もし <(AI Vision オブジェクト [方位角 v]) [math_greater_than v] [5]> なら
[右 v] へ旋回
もし <(AI Vision オブジェクト [方位角 v]) [math_less_than v] [-5]> なら(続き)
[左 v] へ旋回
でなければ
全移動を停止

タグID#

tagIDプロパティは、検出されたAprilTag IDの識別番号を整数として報告します。

パラメータがtagIDに設定されたAI Visionオブジェクトプロパティスタックブロック。#
AI Vision オブジェクト [tagID v]

例

開始したとき
[Move forward when AprilTag ID 0 is detected.]
ずっと
AI Vision から [AprilTag ID 0 v] データを取得
もし <AI Vision オブジェクトあり?> なら
[前進 v] へ移動
終わり
全移動を停止