想像#
介紹#
VEX AIR 無人機配備兩個視覺感測器,可偵測並追蹤 AprilTag ID。這些感測器使無人機能夠分析周圍環境、追蹤物體,並根據檢測到的視覺數據做出反應。
以下是所有可用區塊的清單:
動作-控制視覺饋送並捕捉物件資料。
取得物件資料 — 擷取 AprilTag ID 的資料。
設定-調整存取哪些偵測到的物件。
設定視覺物件項目 — 從偵測到的物件清單中選擇一個特定物件。
值-檢索物件的存在、分類和屬性。
視覺物件存在 — 報告是否偵測到物件。
Vision 物件是 AprilTag ID — 檢查偵測到的 AprilTag ID 是否與特定 ID 相符。
視覺物件計數 — 報告偵測到的物件數量。
Vision 物件屬性 — 擷取以下詳細資訊:
行動#
取得對象數據#
「獲取物件資料」堆疊塊會過濾來自視覺感測器幀的資料。視覺感測器可以偵測 AprilTag ID。
資料集按寬度從大到小的順序儲存對象,索引從 0 開始。可以使用 Vision object property 程式碼區塊存取每個物件的屬性。如果未偵測到匹配的對象,則報告資料集為空。
從 Vision [前方 v] 相機取得 [所有 AprilTags v] 資料
範圍 |
描述 |
|---|---|
簽名 |
篩選資料集,僅包含給定簽署的資料。可用的簽名是所有 AprilTags。 |
相機 |
視覺感測器用於從前方或下方檢索資料。 |
例子
當開始時
[Climb upward when an AprilTag ID is detected.]
起飛至 [300] [mm v] ▶
永遠
從 Vision [前方 v] 相機取得 [所有 AprilTags v] 資料
如果 <Vision 物件存在?> 則
爬升 [上升 v] [200] [mm v] ▶
設定#
設定視覺物件項#
設定 Vision 物件項目 堆疊區塊設定要使用資料集中的哪個項目。
設定 Vision 物件項目為 [1]
參數 |
描述 |
|---|---|
物品 |
資料集中要使用的項目數量。 |
例子
當開始時
[Display the smallest-appearing AprilTag ID.]
永遠
從 Vision [前方 v] 相機取得 [所有 AprilTags v] 資料
清除主控台
如果 <Vision 物件存在?> 則
設定 Vision 物件項目為 (Vision 物件數量)
在主控台列印 (Vision 物件 [id v]) ▶
價值觀#
視覺物件存在#
視覺物件存在布林區塊報告指定的視覺感測器目前是否偵測到任何物件。
正確 — 指定的視覺感測器偵測到物體。
錯誤 — 指定的視覺感測器未偵測到物體。
<Vision 物件存在?>
範圍 |
描述 |
|---|---|
該塊沒有參數。 |
例子
當開始時
[Climb upward when an AprilTag ID is detected.]
起飛至 [300] [mm v] ▶
永遠
從 Vision [前方 v] 相機取得 [所有 AprilTags v] 資料
如果 <Vision 物件存在?> 則
爬升 [上升 v] [200] [mm v] ▶
視覺物件是 AprilTag ID#
Vision 物件是 AprilTag ID 布林區塊會報告 AprilTag ID 是否為特定的 ID 號碼。
正確 — AprilTag ID 就是這個數字。
錯誤 — AprilTag ID 不是數字。
<Vision object is AprilTag ID [1]>
參數 |
描述 |
|---|---|
AprilTag ID 號碼 |
要與偵測到的 AprilTag ID 號碼(0 到 37)進行比較的數字。 |
例子
當開始時
[Display when the target AprilTag ID is detected.]
永遠
從 Vision [前方 v] 相機取得 [所有 AprilTags v] 資料
清除主控台
如果 <Vision 物件存在?> 則
如果 <Vision object is AprilTag ID [21]> 則
在主控台列印 [Target found!] ▶
結束
視覺物體數量#
視覺物件計數報告模組會將資料集中偵測到的物件數量以整數形式報告。
(Vision 物件數量)
參數 |
描述 |
|---|---|
該塊沒有參數。 |
例子
當開始時
[Display how many AprilTag IDs are detected.]
永遠
從 Vision [前方 v] 相機取得 [所有 AprilTags v] 資料
清除主控台
在主控台列印 (Vision 物件數量) ▶
等待 [0.2] 秒
視覺物件屬性#
使用 get object data 區塊後,儲存的每個物件都包含多個屬性(如下所示)。
(Vision 物件 [寬度 v])
除 id 之外的所有屬性值都描述了使用 取得物件資料 程式碼區塊時偵測到的物件的位置、大小、方向或方位。這些值以像素或度為單位。每個視覺感測器的解析度都不同:
前向:640 x 480像素
向下:640 x 400像素
範圍 |
描述 |
|---|---|
財產 |
Which property of the detected object to use: |
寬度#
width 屬性以像素為單位報告偵測到的物件寬度,數值為 1 到 640 之間的整數。
(Vision 物件 [寬度 v])
例子
當開始時
[Show if the AprilTag ID appears large or small.]
永遠
從 Vision [前方 v] 相機取得 [所有 AprilTags v] 資料
清除主控台
如果 <Vision 物件存在?> 則
如果 <(Vision 物件 [寬度 v]) [math_greater_than v] [100]> 則
在主控台列印 [Large] ▶
否則
在主控台列印 [Small] ▶
結束
結束
等待 [0.2] 秒
高度#
height 屬性以像素為單位報告偵測到的物件的高度,數值為 1 到 480 之間的整數。
(Vision 物件 [高度 v])
例子
當開始時
[Show if the AprilTag ID appears large or small.]
永遠
從 Vision [前方 v] 相機取得 [所有 AprilTags v] 資料
清除主控台
如果 <Vision 物件存在?> 則
如果 <(Vision 物件 [高度 v]) [math_greater_than v] [100]> 則
在主控台列印 [Large] ▶
否則
在主控台列印 [Small] ▶
結束
結束
等待 [0.2] 秒
中心X#
centerX 屬性以像素為單位報告偵測到的物件中心的 x 座標,數值為 1 到 640 之間的整數。
(Vision 物件 [centerX v])
例子
當開始時
[Show if an AprilTag ID is to the left or the right of the camera.]
永遠
從 Vision [前方 v] 相機取得 [所有 AprilTags v] 資料
清除主控台
如果 <Vision 物件存在?> 則
如果 <(Vision 物件 [centerX v]) [math_less_than v] [320]> 則
在主控台列印 [To the left] ▶
否則
在主控台列印 [To the right] ▶
結束
結束
等待 [0.2] 秒
中心Y#
centerY 屬性以像素為單位報告偵測到的物件中心的 y 座標,數值為 1 到 480 之間的整數。
(Vision 物件 [centerY v])
例子
當開始時
[Take off and attempt to align the drone with an AprilTag ID on the wall.]
[Adjust the takeoff height to observe different results.]
起飛至 [800] [mm v] ▶
從 Vision [前方 v] 相機取得 [所有 AprilTags v] 資料
如果 <Vision 物件存在?> 則
如果 <(Vision 物件 [centerY v]) [math_less_than v] [240]> 則
在主控台列印 [Below the target!] ▶
否則
在主控台列印 [Above the target!] ▶
結束
否則
在主控台列印 [No target found!] ▶
軸承#
方位角屬性報告一個角度,該角度指示物體相對於無人機的位置。其行為取決於所使用的視覺感測器。
0° 表示物體中心與感測器中心對齊。正值表示物體位於右側,負值表示物體位於左側。
感應器 |
返回 |
|---|---|
向下 |
無人機前部必須旋轉一定角度才能與物體的中心對齊,角度範圍從 -180º 到 180º。 |
向前 |
物體向視覺感測器中心左側或右側偏移的度數,範圍為 -180º 至 180º。 |
(Vision 物件 [方位角 v])
範例
當開始時
[Align the front of the drone to an AprilTag ID.]
設定轉向速度為 (15)%
起飛至 [500] [mm v] ▶
永遠
從 Vision [向下 v] 相機取得 [所有 AprilTags v] 資料
如果 <Vision 物件存在?> 則
如果 <[-20] [math_less_than v] (Vision 物件 [方位角 v]) [math_less_than v] [20]> 則
[Hover once sensor is centered on the AprilTag ID.]
懸停
播放聲音 [成功 v] ▶
否則如果 <(Vision 物件 [方位角 v]) [math_less_than v] [-21]> 則
向 [左 v] 轉
否則
向 [右 v] 轉
旋轉#
rotation 屬性以 1 到 359 度的整數表示偵測到的 AprilTag ID 的方向。
(Vision 物件 [旋轉 v])
例子
當開始時
[Turn left or right based on the rotation of an AprilTag ID.]
起飛至 [1000] [mm v] ▶
永遠
從 Vision [前方 v] 相機取得 [所有 AprilTags v] 資料
如果 <Vision 物件存在?> 則
如果 <[240] [math_less_than v] (Vision 物件 [旋轉 v]) [math_less_than v] [300]> 則
向 [左 v] 轉 [90] 度 ▶
否則如果 <[60] [math_less_than v] (Vision 物件 [旋轉 v]) [math_less_than v] [120]> 則
向 [右 v] 轉 [90] 度 ▶
否則
懸停
原點X#
originX 屬性以像素為單位報告偵測到的物件邊界框左上角的 x 座標,數值為 1 到 640 之間的整數。
(Vision 物件 [originX v])
例子
當開始時
[Draw lines to the AprilTag ID origin from all corners.]
永遠
清除螢幕
get [all AprilTags v] data from vision [forward v] camera
如果 <Vision 物件存在?> 則
在螢幕上繪製線段 [0] [0] (Vision 物件 [originX v]) (Vision 物件 [originY v])
在螢幕上繪製線段 [0] [480] (Vision 物件 [originX v]) (Vision 物件 [originY v])
在螢幕上繪製線段 [640] [0] (Vision 物件 [originX v]) (Vision 物件 [originY v])
在螢幕上繪製線段 [640] [480] (Vision 物件 [originX v]) (Vision 物件 [originY v])
結束
等待 [0.2] 秒
原點Y#
originY 屬性以像素為單位報告偵測到的物件邊界框左上角的 y 座標,數值為 1 到 480 之間的整數。
(Vision 物件 [originY v])
例子
當開始時
[Draw lines to the AprilTag ID origin from all corners.]
永遠
清除螢幕
get [all AprilTags v] data from vision [forward v] camera
如果 <Vision 物件存在?> 則
在螢幕上繪製線段 [0] [0] (Vision 物件 [originX v]) (Vision 物件 [originY v])
在螢幕上繪製線段 [0] [480] (Vision 物件 [originX v]) (Vision 物件 [originY v])
在螢幕上繪製線段 [640] [0] (Vision 物件 [originX v]) (Vision 物件 [originY v])
在螢幕上繪製線段 [640] [480] (Vision 物件 [originX v]) (Vision 物件 [originY v])
結束
等待 [0.2] 秒
ID#
id 屬性以整數形式報告偵測到的 AprilTag ID 的識別號碼。
(Vision 物件 [id v])
例子
當開始時
[Display the detected AprilTag ID.]
永遠
從 Vision [前方 v] 相機取得 [所有 AprilTags v] 資料
清除主控台
如果 <Vision 物件存在?> 則
在主控台列印 (Vision 物件 [id v]) ▶
結束
等待 [0.2] 秒