想象#

介绍#

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

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

动作——控制视觉馈送并捕获对象数据。

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

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

行动#

获取对象数据#

“获取对象数据”堆栈块会过滤来自视觉传感器帧的数据。视觉传感器可以检测 AprilTag ID。

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

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

范围

描述

签名

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

相机

视觉传感器用于从前方下方检索数据。

例子

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

设置#

设置视觉对象项#

设置 Vision 对象项 堆栈块设置要使用数据集中的哪个项。

设置 AI Vision 对象项堆栈块。#
将 Vision 对象项设置为 [1]

参数

描述

物品

数据集中要使用的项目数量。

例子

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

价值观#

视觉对象存在#

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

  • 正确 — 指定的视觉传感器检测到物体。

  • 错误 — 指定的视觉传感器未检测到物体。

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

范围

描述

该块没有参数。

例子

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

视觉对象是 AprilTag ID#

Vision 对象是 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 Vision 对象项堆栈块。#
(视觉物体数量)

参数

描述

该块没有参数。

例子

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

视觉对象属性#

使用 get object data 块后,存储的每个对象都包含多个属性(如下所示)。

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

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

  • 前向:640 x 480像素

  • 向下:640 x 400像素

范围

描述

财产

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

宽度#

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

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

例子

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

高度#

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

AI Vision 对象属性堆栈块,其参数设置为高度。#
(视觉对象 [高 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#

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

AI Vision 对象属性堆栈块,其参数设置为 centerX。#
(视觉对象 [中心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#

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

AI Vision 对象属性堆栈块,其参数设置为 centerY。#
(视觉对象 [中心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 Vision 对象属性堆栈块,其参数设置为 centerY。#
(视觉对象 [方位 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] 转

旋转#

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

AI Vision 对象属性堆栈块,其参数设置为旋转。#
(视觉对象 [旋转 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#

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

AI Vision 对象属性堆栈块,其参数设置为 originX。#
(视觉对象 [原点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#

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

AI Vision 对象属性堆栈块,其参数设置为 originY。#
(视觉对象 [原点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 Vision 对象属性堆栈块,其参数设置为 tagID。#
(视觉对象 [id v])

例子

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