想象#

介绍#

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

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

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

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

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

行动#

获取对象数据#

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

该数据集存储的对象按宽度从大到小排序,从索引 0 开始。每个对象的属性可以通过 Vision object property 块访问。如果未检测到匹配的对象,则返回空数据集。

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

范围

描述

签名

过滤数据集,使其仅包含指定签名的数据。可用的签名包括:

  • 所有 AprilTags

例子

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

设置#

设置视觉对象项#

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

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

参数

描述

物品

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

例子

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

价值观#

视觉对象是否存在?#

视觉对象是否存在? 模块报告指定的视觉传感器当前是否检测到任何物体。该模块返回一个布尔值:

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

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

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

范围

描述

该块没有参数。

例子

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

视觉对象是 AprilTag ID#

Vision 对象是否为 AprilTag ID? 块报告 AprilTag 是否为特定 ID 号。此块返回一个布尔值:

  • — AprilTag ID 是数字。

  • 错误 — AprilTag ID 不是数字。

AI Vision 检测到 AprilTag 是布尔块。#
<Vision object is AprilTag [1]>

参数

描述

四月标签号码

与检测到的 AprilTag 的 ID 号(0 到 37)进行比较的数字。

例子

当开始
[Display when the target AprilTag ID is detected.]
永久循环
从 Vision [所有AprilTags v] 相机获取 [向前 v] 数据
清除控制台
如果 <视觉对象是否存在?> 那么
如果 <Vision object is AprilTag [21]> 那么
在控制台上打印 [Target found!]▶
结束

视觉物体数量#

视觉对象计数块返回数据集中检测到的对象的数量。

设置 AI Vision 对象项堆栈块。#
(视觉物体数量)

参数

描述

该块没有参数。

例子

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

视觉对象属性#

使用 获取对象数据 后存储的每个对象(如下所示)都包含多个属性。

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

某些属性值基于使用 获取对象数据 时检测到的物体在视觉传感器视图中的位置。每个视觉传感器的分辨率不同:

  • 前向:640 x 480像素

  • 向下:640 x 400像素

范围

描述

财产

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

宽度#

width 以像素为单位返回检测到的对象的宽度,范围是 1 到 640 之间的整数。

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

例子

当开始
[Show if the AprilTag ID appears large or small.]
永久循环
从 Vision [所有AprilTags v] 相机获取 [向前 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 [所有AprilTags v] 相机获取 [向前 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 is to the left or the right of the camera.]
永久循环
从 Vision [所有AprilTags v] 相机获取 [向前 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 [所有AprilTags v] 相机获取 [向前 v] 数据
如果 <视觉对象是否存在?> 那么
如果 <(视觉对象 [中心Y坐标 v]) [math_less_than v] [240]> 那么
在控制台上打印 [Below the target!]▶
否则
在控制台上打印 [Above the target!]▶
结束
否则
在控制台上打印 [No target found!]▶

轴承#

bearing 返回一个表示物体相对于无人机位置的角度。具体行为取决于所使用的视觉传感器。

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 [所有AprilTags v] 相机获取 [向下 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 到 360 度之间的整数形式返回检测到的 AprilTag 的方向。

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

例子

当开始
[Turn left or right based on the rotation of an AprilTag ID.]
起飞至 [1000] [毫米 v] ▶
永久循环
从 Vision [所有AprilTags v] 相机获取 [向前 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 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 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 [所有AprilTags v] 相机获取 [向前 v] 数据
清除控制台
如果 <视觉对象是否存在?> 那么
在控制台上打印 (视觉对象 [id v])▶
结束
等待 [0.2] 秒