视觉仪#

简介#

VEX AIR 无人机配备两个视觉仪,可检测并追踪 AprilTag ID。这些传感器使无人机能够分析周围环境、跟踪物体,并根据检测到的视觉数据做出反应。

以下是所有可用指令块的列表:

动作——控制视觉画面并捕获对象数据。

设置——调整访问哪些检测到的对象。

值——检索对象的存在、分类和属性。

动作#

获取对象数据#

“获取对象数据”指令块会过滤来自视觉仪帧的数据。视觉仪可以检测 AprilTag ID。

数据集按宽度从大到小的顺序存储对象,索引从 0 开始。可以使用 视觉对象属性 指令块访问每个对象的属性。如果未检测到匹配的对象,则报告数据集为空。

获取对象数据指令块。#
从 Vision [向前 v] 相机获取 [所有AprilTags v] 数据

范围

描述

签名

筛选数据集,仅包含给定签名的数据。可用的签名是所有 AprilTags。

摄像头

视觉仪用于从前视摄像头或下视摄像头检索数据。

示例

当开始
[Climb upward when an AprilTag ID is detected.]
起飞至 [300] [毫米 v] ▶
永久循环
从 Vision [向前 v] 相机获取 [所有AprilTags v] 数据
如果 <视觉对象是否存在?> 那么
爬升 [向上 v] 获得 [200] [毫米 v] ▶

设置#

设置视觉对象项#

设置视觉对象项 指令块设置要使用数据集中的哪个项。

设置 AI视觉仪对象项指令块。#
将 Vision 对象项设置为 [1]

参数

描述

物体

数据集中要使用的物体数量。

示例

当开始
[Display the smallest-appearing AprilTag ID.]
永久循环
从 Vision [向前 v] 相机获取 [所有AprilTags v] 数据
清除控制台
如果 <视觉对象是否存在?> 那么
将 Vision 对象项设置为 (视觉物体数量)
在控制台上打印 (视觉对象 [id v])▶

值#

视觉对象存在#

视觉对象存在布尔指令块报告指定的视觉仪当前是否检测到任何对象。

  • 真 — 指定的视觉仪检测到物体。

  • 假 — 指定的视觉仪未检测到物体。

显示或隐藏 AI视觉仪仪表板指令块。#
<视觉对象是否存在?>

范围

描述

该指令块没有参数。

示例

当开始
[Climb upward when an AprilTag ID is detected.]
起飞至 [300] [毫米 v] ▶
永久循环
从 Vision [向前 v] 相机获取 [所有AprilTags v] 数据
如果 <视觉对象是否存在?> 那么
爬升 [向上 v] 获得 [200] [毫米 v] ▶

视觉对象是 AprilTag ID#

视觉对象是 AprilTag ID 布尔指令块报告 AprilTag ID 是否为特定的 ID 号。

  • 真 — AprilTag ID 就是这个数字。

  • 假 — AprilTag ID 不是数字。

AI视觉仪检测到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 object is AprilTag ID [21]> 那么
在控制台上打印 [Target found!]▶
结束

视觉对象数量#

视觉对象计数报告指令块会将数据集中检测到的对象数量以整数形式报告。

设置 AI视觉仪对象项指令块。#
(视觉物体数量)

参数

描述

该指令块没有参数。

示例

当开始
[Display how many AprilTag IDs are detected.]
永久循环
从 Vision [向前 v] 相机获取 [所有AprilTags v] 数据
清除控制台
在控制台上打印 (视觉物体数量)▶
等待 [0.2] 秒

视觉对象属性#

使用 视觉对象属性 指令块后,存储的每个对象都包含多个属性(如下所示)。

AI视觉对象属性报告器指令块。#
(视觉对象 [宽 v])

除 id 之外的所有属性值都描述了使用 获取对象数据 指令块时检测到的对象的位置、大小、方向或方位。这些值以像素或度为单位。每个视觉仪的分辨率都不同:

  • 前向:640 x 480像素

  • 向下:640 x 400像素

范围

描述

属性

要使用检测到的对象的哪个属性:

宽度#

宽度 属性以像素为单位报告检测到的对象宽度,数值为 1 到 640 之间的整数。

AI视觉对象属性指令块,其参数设置为宽度。#
(视觉对象 [宽 v])

示例

当开始
[Show if the AprilTag ID appears large or small.]
永久循环
从 Vision [向前 v] 相机获取 [所有AprilTags v] 数据
清除控制台
如果 <视觉对象是否存在?> 那么
如果 <(视觉对象 [宽 v]) [math_greater_than v] [100]> 那么
在控制台上打印 [Large]▶
否则
在控制台上打印 [Small]▶
结束
结束
等待 [0.2] 秒

高度#

高度 属性以像素为单位报告检测到的对象的高度,数值为 1 到 480 之间的整数。

AI视觉对象属性指令块,其参数设置为高度。#
(视觉对象 [高 v])

示例

当开始
[Show if the AprilTag ID appears large or small.]
永久循环
从 Vision [向前 v] 相机获取 [所有AprilTags v] 数据
清除控制台
如果 <视觉对象是否存在?> 那么
如果 <(视觉对象 [高 v]) [math_greater_than v] [100]> 那么
在控制台上打印 [Large]▶
否则
在控制台上打印 [Small]▶
结束
结束
等待 [0.2] 秒

中心X#

中心X 属性以像素为单位报告检测到的对象中心的 x 坐标,数值为 1 到 640 之间的整数。

AI视觉对象属性指令块,其参数设置为中心X。#
(视觉对象 [中心X坐标 v])

示例

当开始
[Show if an AprilTag ID is to the left or the right of the camera.]
永久循环
从 Vision [向前 v] 相机获取 [所有AprilTags v] 数据
清除控制台
如果 <视觉对象是否存在?> 那么
如果 <(视觉对象 [中心X坐标 v]) [math_less_than v] [320]> 那么
在控制台上打印 [To the left]▶
否则
在控制台上打印 [To the right]▶
结束
结束
等待 [0.2] 秒

中心Y#

中心Y 属性以像素为单位报告检测到的对象中心的 y 坐标,数值为 1 到 480 之间的整数。

AI视觉对象属性指令块,其参数设置为中心Y。#
(视觉对象 [中心Y坐标 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] [毫米 v] ▶
从 Vision [向前 v] 相机获取 [所有AprilTags v] 数据
如果 <视觉对象是否存在?> 那么
如果 <(视觉对象 [中心Y坐标 v]) [math_less_than v] [240]> 那么
在控制台上打印 [Below the target!]▶
否则
在控制台上打印 [Above the target!]▶
结束
否则
在控制台上打印 [No target found!]▶

方位角#

方位角属性报告一个角度,该角度指示物体相对于无人机的位置。其行为取决于所使用的视觉仪。

0° 表示物体中心与传感器中心对齐。正值表示物体位于右侧,负值表示物体位于左侧。

传感器

返回

向下

无人机前端必须旋转一定角度才能与物体的中心对齐,角度范围从 -180º 到 180º。

向前

物体向视觉仪中心左侧或右侧偏移的度数,范围为 -180º 至 180º。

AI视觉对象属性指令块,其参数设置为中心Y。#
(视觉对象 [方位 v])

示例

当开始
[Align the front of the drone to an AprilTag ID.]
set turn velocity to (15) %
起飞至 [500] [毫米 v] ▶
永久循环
从 Vision [向下 v] 相机获取 [所有AprilTags v] 数据
如果 <视觉对象是否存在?> 那么
如果 <[-20] [math_less_than v] (视觉对象 [方位 v]) [math_less_than v] [20]> 那么
[Hover once sensor is centered on the AprilTag ID.]
徘徊
播放声音 [成功 v] ▶
否则如果 <(视觉对象 [方位 v]) [math_less_than v] [-21]> 那么
[左 v] 转
否则
[右 v] 转

旋转#

旋转 属性以 1 到 359 度的整数表示检测到的 AprilTag ID 的方向。

AI视觉对象属性指令块,其参数设置为旋转。#
(视觉对象 [旋转 v])

示例

当开始
[Turn left or right based on the rotation of an AprilTag ID.]
起飞至 [1000] [毫米 v] ▶
永久循环
从 Vision [向前 v] 相机获取 [所有AprilTags v] 数据
如果 <视觉对象是否存在?> 那么
如果 <[240] [math_less_than v] (视觉对象 [旋转 v]) [math_less_than v] [300]> 那么
[左 v] 转 [90] 度 ▶
否则如果 <[60] [math_less_than v] (视觉对象 [旋转 v]) [math_less_than v] [120]> 那么
[右 v] 转 [90] 度 ▶
否则
徘徊

原点X#

原点X 属性以像素为单位报告检测到的对象边界框左上角的 x 坐标,数值为 1 到 640 之间的整数。

AI视觉对象属性指令块,其参数设置为原点X。#
(视觉对象 [原点X v])

示例

当开始
[Draw lines to the AprilTag ID origin from all corners.]
永久循环
清屏
get [all AprilTags v] data from vision [forward v] camera
如果 <视觉对象是否存在?> 那么
在屏幕 [0] [0] (视觉对象 [原点X v]) (视觉对象 [原点Y v]) 上画线段
在屏幕 [0] [480] (视觉对象 [原点X v]) (视觉对象 [原点Y v]) 上画线段
在屏幕 [640] [0] (视觉对象 [原点X v]) (视觉对象 [原点Y v]) 上画线段
在屏幕 [640] [480] (视觉对象 [原点X v]) (视觉对象 [原点Y v]) 上画线段
结束
等待 [0.2] 秒

原点Y#

原点Y 属性以像素为单位报告检测到的对象边界框左上角的 y 坐标,数值为 1 到 480 之间的整数。

AI视觉对象属性指令块,其参数设置为原点Y。#
(视觉对象 [原点Y v])

示例

当开始
[Draw lines to the AprilTag ID origin from all corners.]
永久循环
清屏
get [all AprilTags v] data from vision [forward v] camera
如果 <视觉对象是否存在?> 那么
在屏幕 [0] [0] (视觉对象 [原点X v]) (视觉对象 [原点Y v]) 上画线段
在屏幕 [0] [480] (视觉对象 [原点X v]) (视觉对象 [原点Y v]) 上画线段
在屏幕 [640] [0] (视觉对象 [原点X v]) (视觉对象 [原点Y v]) 上画线段
在屏幕 [640] [480] (视觉对象 [原点X v]) (视觉对象 [原点Y v]) 上画线段
结束
等待 [0.2] 秒

id#

id 属性以整数形式报告检测到的 AprilTag ID 的识别号码。

AI视觉对象属性指令块,其参数设置为 tagID。#
(视觉对象 [id v])

示例

当开始
[Display the detected AprilTag ID.]
永久循环
从 Vision [向前 v] 相机获取 [所有AprilTags v] 数据
清除控制台
如果 <视觉对象是否存在?> 那么
在控制台上打印 (视觉对象 [id v])▶
结束
等待 [0.2] 秒