想象#
介绍#
VEX AIR 无人机配备两个视觉传感器,可检测并追踪 AprilTag ID。这些传感器使无人机能够分析周围环境、跟踪物体,并根据检测到的视觉数据做出反应。
以下是所有可用块的列表:
动作——控制视觉馈送并捕获对象数据。
获取对象数据 — 捕获 AprilTag ID 的数据。
设置——调整访问哪些检测到的对象。
设置视觉对象项 — 从检测到的对象列表中选择一个特定对象。
值——检索对象的存在、分类和属性。
视觉物体是否存在? — 报告是否检测到物体。
Vision 对象是 AprilTag ID — 检查检测到的 AprilTag 是否与特定 ID 匹配。
视觉对象数量——返回检测到的对象的数量。
Vision 对象属性 — 检索以下详细信息:
行动#
获取对象数据#
获取对象数据 模块会过滤来自视觉传感器帧的数据。视觉传感器可以检测 AprilTag 的 ID。
该数据集存储的对象按宽度从大到小排序,从索引 0 开始。每个对象的属性可以通过 Vision object property 块访问。如果未检测到匹配的对象,则返回空数据集。
从 Vision [所有AprilTags v] 相机获取 [向前 v] 数据
范围 |
描述 |
---|---|
签名 |
过滤数据集,使其仅包含指定签名的数据。可用的签名包括:
|
例子
当开始
[Climb upward when an AprilTag ID is detected.]
起飞至 [300] [毫米 v] ▶
永久循环
从 Vision [所有AprilTags v] 相机获取 [向前 v] 数据
如果 <视觉对象是否存在?> 那么
爬升 [向上 v] 获得 [200] [毫米 v] ▶
设置#
设置视觉对象项#
设置视觉对象项块设置要使用数据集中的哪个项。
将 Vision 对象项设置为 [1]
参数 |
描述 |
---|---|
物品 |
数据集中要使用的项目数量。 |
例子
当开始
[Display the smallest-appearing AprilTag ID.]
永久循环
从 Vision [所有AprilTags v] 相机获取 [向前 v] 数据
清除控制台
如果 <视觉对象是否存在?> 那么
将 Vision 对象项设置为 (视觉物体数量)
在控制台上打印 (视觉对象 [id v])▶
价值观#
视觉对象是否存在?#
视觉对象是否存在? 模块报告指定的视觉传感器当前是否检测到任何物体。该模块返回一个布尔值:
真 — 指定的视觉传感器检测到物体。
错误 — 指定的视觉传感器未检测到物体。
<视觉对象是否存在?>
范围 |
描述 |
---|---|
该块没有参数。 |
例子
当开始
[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 不是数字。
<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!]▶
结束
视觉物体数量#
视觉对象计数块返回数据集中检测到的对象的数量。
(视觉物体数量)
参数 |
描述 |
---|---|
该块没有参数。 |
例子
当开始
[Display how many AprilTags are detected.]
永久循环
从 Vision [所有AprilTags v] 相机获取 [向前 v] 数据
清除控制台
在控制台上打印 (视觉物体数量)▶
等待 [0.2] 秒
视觉对象属性#
使用 获取对象数据 块 后存储的每个对象(如下所示)都包含多个属性。
(视觉对象 [宽 v])
某些属性值基于使用 获取对象数据 块 时检测到的物体在视觉传感器视图中的位置。每个视觉传感器的分辨率不同:
前向:640 x 480像素
向下:640 x 400像素
范围 |
描述 |
---|---|
财产 |
使用检测到的对象哪个属性: |
宽度#
width 以像素为单位返回检测到的对象的宽度,范围是 1 到 640 之间的整数。
(视觉对象 [宽 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 之间的整数形式返回检测到的物体的高度(以像素为单位)。
(视觉对象 [高 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 之间的整数。
(视觉对象 [中心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 之间的整数。
(视觉对象 [中心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º。 |
(视觉对象 [方位 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 的方向。
(视觉对象 [旋转 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 之间的整数。
(视觉对象 [原点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 之间的整数。
(视觉对象 [原点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 的识别号。
(视觉对象 [id v])
例子
当开始
[Display the detected AprilTag ID.]
永久循环
从 Vision [所有AprilTags v] 相机获取 [向前 v] 数据
清除控制台
如果 <视觉对象是否存在?> 那么
在控制台上打印 (视觉对象 [id v])▶
结束
等待 [0.2] 秒