AI 视觉#

介绍#

VEX AIM 编程机器人的 AI 视觉仪 能够检测并追踪物体、颜色以及 AprilTag ID。这使得机器人能够分析周围环境、跟随物体,并根据检测到的视觉数据做出反应。

AI视觉传感器的分辨率为320×240像素。原点(0, 0)位于左上角,传感器中心位于(160, 120),如下图所示:

图示为AIM AI视觉传感器的分辨率,坐标0,0位于图的左上角,320,0位于右上角,0,240位于左下角,160,120位于正中心。

下面是所有指令块的列表:

动作 —— 控制 AI 视觉仪的图像流并捕获物体数据。

设置 — 调整要访问的已检测到的对象。

值 — 返回对象是否存在、分类和属性。

行动#

屏幕上的AI视觉查看器#

“屏幕上的 AI 视觉查看器”模块用于启用或禁用机器人屏幕上的实时 AI 视觉画面。启用后,屏幕将显示实时传感器数据,其他图像或文本将无法显示。要显示其他内容,请使用此模块隐藏画面。

显示或隐藏 AI Vision 仪表板堆栈块。#
[显示 v]AI 视觉仪在屏幕上的查看器

参数

描述

地位

控制机器人屏幕上数据流的显示:

  • 显示 — 显示数据流。2
  • 隐藏 — 从屏幕
  • 移除数据流

示例

一组块,以“启动时”块开头,后跟注释块,内容为“查看 AI 视觉传感器的 feed 五秒钟”。“显示 AI 视觉仪表板”块显示 feed,然后“等待”块暂停执行五秒钟。等待结束后,“隐藏 AI 视觉仪表板”块将从视图中移除 feed。#
当开始
[View the AI Vision Sensor's feed for five seconds.]
[显示 v]AI 视觉仪在屏幕上的查看器
等待 [5] 秒
[隐藏 v]AI 视觉仪在屏幕上的查看器

获取对象数据#

“获取对象数据”模块用于过滤来自 AI 视觉传感器帧的数据。AI 视觉传感器可以检测包含预训练对象、AprilTag ID 或已配置颜色和颜色代码的特征。

必须先在 AI Vision Utility 中配置颜色和颜色代码,然后才能将其与此块一起使用。

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

获取对象数据堆栈块。#
从 AI 视觉仪获取 [运动球 v] 数据

范围

描述

签名

筛选数据集,仅包含给定签名的数据。可用签名包括:

  • 运动球
  • 橙色桶
  • 蓝色桶
  • AIM 机器人
  • AprilTag ID 0
  • AprilTag ID 1
  • AprilTag ID 2
  • AprilTag ID 3
  • AprilTag ID 4
  • 所有货物 — 运动球和所有桶
  • NAME — 颜色或颜色代码,其中 NAME 是在 AI 视觉实用程序中配置的名称

示例

一系列代码块以一个“启动时”代码块开始,后面跟着一个注释代码块,内容为“如果检测到运动球,则向前移动”。一个“获取对象数据”代码块用于获取运动球的图像。接下来,一个“如果”代码块检查是否存在AI视觉对象。如果存在,则“向前移动”代码块使机器人向前移动10毫米。#
当开始
[Move forward if a sports ball is detected.]
永久循环
从 AI 视觉仪获取 [运动球 v] 数据
如果 <AI 视觉仪对象存在?> 那么
将 [向前 v] 移至 [10] [毫米 v] ▶

色彩签名#

颜色特征码是人工智能视觉传感器可以识别的独特颜色。这些特征码使传感器能够根据物体的颜色来检测和跟踪物体。在人工智能视觉实用程序中配置颜色特征码后,传感器即可识别视野范围内具有该特定颜色的物体。

颜色签名在 获取对象数据 中使用,以实时处理和检测彩色对象。

AI 视觉实用程序展示了一个连接的视觉传感器正在检测两个彩色物体。左侧显示实时摄像头画面,左侧为蓝色框,右侧为红色框,每个框都带有白色边框。黑色标签显示其各自的名称、坐标和尺寸。右侧包含颜色签名设置,红色和蓝色框的色调和饱和度范围均有滑块。底部是添加颜色、冻结视频、复制和保存图像的按钮,右下角有一个关闭按钮。

示例

当开始
[Display if any objects matching the Red_Box signature is detected.]
永久循环
在屏幕上设定光标至 [1] 行 [1] 列
清除屏幕第 [1] 行
[Change the signature to any configured Color Signature.]
从 AI 视觉仪获取 [Red_Box v] 数据
如果 <AI 视觉仪对象存在?> 那么
在屏幕上打印 [Color signature detected!]▶

颜色代码#

颜色代码是一种结构化的图案,由 2 到 4 个按特定顺序排列的颜色特征组成。在 AI 视觉实用程序中配置好颜色代码后,传感器即可识别预定义的颜色图案。

颜色代码对于识别复杂物体、与游戏元素对齐或为自主导航创建唯一标记特别有用。

AI Vision Utility 界面显示一个已连接的视觉传感器正在检测两个相邻的物体,左侧为蓝色框,右侧为红色框,它们被组合成一个标记为 BlueRed 的白色边界框。检测信息包括角度 (A:11°)、坐标 (X:143, Y:103)、宽度 (W:233) 和高度 (H:108)。右侧面板列出了三个颜色特征:Red_Box、Blue_Box 和 BlueRed,并可调整色调和饱和度范围。BlueRed 特征结合了 Blue_Box 和 Red_Box。视频源下方是标有“冻结视频”、“复制图像”、“保存图像”和“关闭”的按钮。

示例

当开始
[Display if any objects matching the BlueRed code is detected.]
永久循环
在屏幕上设定光标至 [1] 行 [1] 列
清除屏幕第 [1] 行
[Change the signature to any configured Color Code.]
从 AI 视觉仪获取 [BlueRed v] 数据
如果 <AI 视觉仪对象存在?> 那么
在屏幕上打印 [Color code detected!]▶

设置#

设置 AI Vision 对象项#

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

设置 AI Vision 对象项堆栈块。#
设定 AI 视觉仪对象标号为 (1)

参数

描述

物品

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

示例

一系列代码块以一个“开始”代码块开始,紧接着是一个注释代码块,内容为“显示检测到的最大 AprilTag ID”。在一个无限循环中,“获取对象数据”代码块捕获 AprilTag ID 的图像。一个“如果”代码块检查 AI Vision 对象是否存在。如果存在,“设置 AI Vision 对象项”代码块将对象数量赋值给一个变量,然后一个“打印”代码块在屏幕上显示检测到的对象的标签 ID。#
当开始
[Display the width of the smallest detected object.]
永久循环
从 AI 视觉仪获取 [所有货物 v] 数据
清除屏幕第 [1] 行
在屏幕上设定光标至 [1] 行 [1] 列
如果 <AI 视觉仪对象存在?> 那么
设定 AI 视觉仪对象标号为 (AI 视觉仪对象数目)
在屏幕上打印 (AI 视觉仪对象 [宽 v])▶

价值观#

有对象吗?#

has object 块返回一个布尔值,指示机器人当前是否检测到有针对其 Kicker 的对象。

  • 正确——机器人已获得该物体。

  • 错误——机器人没有该物体。

<有 [运动球 v] 吗?>

范围

描述

目的

检测机器人踢球者所面对的物体:

  • 运动球
  • 任意桶
  • 橙色桶
  • 蓝色桶

示例

一组以“启动时”块开头的块,后面跟着一个注释块,注释块内容为“当机器人有球时踢”。在一个永久循环内,一个“如果”块检查机器人是否有运动球。如果为真,则以中等强度执行“踢物体”块。#
当开始
[Kick when the robot has a sports ball.]
永久循环
如果 <有 [运动球 v] 吗?> 那么
[中 v] 踢出对象

AI Vision 对象存在吗?#

AI Vision 对象存在? 模块返回一个布尔值,指示是否在数据集中检测到对象。

  • 正确——数据集包含检测到的对象。

  • 错误——未检测到任何物体。

AI Vision对象存在布尔块。#
<AI 视觉仪对象存在?>

参数

描述

该块没有参数。

示例

一系列代码块以一个“启动时”代码块开始,后面跟着一个注释代码块,内容为“如果检测到球,则向前移动”。一个“获取对象数据”代码块用于获取运动球的图像。接下来,一个“如果”代码块检查是否存在AI视觉对象。如果存在,则“向前移动”代码块使机器人向前移动10毫米。#
当开始
[Move forward if a sports ball is detected.]
永久循环
从 AI 视觉仪获取 [运动球 v] 数据
如果 <AI 视觉仪对象存在?> 那么
将 [向前 v] 移至 [10] [毫米 v] ▶

AI视觉的对象是什么?#

AI Vision 对象是? 块返回一个布尔值,指示检测到的对象是否与特定分类匹配。

  • 正确——数据集中的项是特定的对象。

  • 错误——数据集中的项不是特定对象。

AI Vision AI分类是对象布尔块。#
<AI 视觉仪对象为 [运动球 v]?>

范围

描述

目的

将物品与哪个物体进行比较:

  • 运动球
  • 橙色桶
  • 蓝色桶
  • AIM 机器人

示例

程序堆栈以一个“开始时”代码块开始,后面紧跟着一个注释代码块,内容为“如果检测到运动球,则显示”。在一个无限循环中,“获取对象数据”代码块使用 AI 分类捕获图像。屏幕被清空,光标被设置为第 1 行第 1 列。一个“如果”代码块检查是否存在 AI 视觉对象,如果存在,则另一个“如果”代码块验证分类结果是否为运动球。如果是,则一个“打印”代码块在屏幕上显示“检测到球!”,然后是一个“等待”代码块暂停 0.5 秒,之后重复上述过程。#
当开始
[Display if a sports ball is detected.]
永久循环
从 AI 视觉仪获取 [所有货物 v] 数据
清除屏幕第 [1] 行
在屏幕上设定光标至 [1] 行 [1] 列
如果 <AI 视觉仪对象存在?> 那么
如果 <AI 视觉仪对象为 [运动球 v]?> 那么
在屏幕上打印 [Sports ball detected!]▶
等待 [0.5] 秒

AI Vision 对象是 AprilTag ID?#

AI Vision 对象是否为 AprilTag ID? 块返回一个布尔值,指示检测到的 AprilTag ID 是否与特定 ID 匹配。

  • 没错——AprilTag ID 就是这个数字。

  • 错误——AprilTag ID 不是数字。

AI视觉检测到AprilTag ID是一个布尔块。#
<AI 视觉仪检测到 AprilTag [1] ?>

参数

描述

AprilTag ID

与检测到的 AprilTag 的 ID 号进行比较的数字。

AI 视觉对象计数#

AI Vision 对象计数 块以整数形式返回数据集中检测到的对象的数量。

AI 视觉仪对象数目

参数

描述

该块没有参数。

示例

当开始
[Display the amount of sports balls and barrels.]
永久循环
清除屏幕第 [1] 行
在屏幕上设定光标至 [1] 行 [1] 列
从 AI 视觉仪获取 [所有货物 v] 数据
如果 <AI 视觉仪对象存在?> 那么
在屏幕上打印 (AI 视觉仪对象数目)▶
结束
等待 [0.5] 秒

AI Vision 对象属性#

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

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

某些属性值基于使用获取对象数据块时检测到的物体在 AI 视觉传感器视图中的位置。AI 视觉传感器的分辨率为 320 x 240 像素。

画面中央是一个带有橙色条纹的蓝色圆筒,周围环绕着一个黑色边框。x 轴和 y 轴的标签分别从左到右(顶部)和从上到下(左侧)为 0 到 320。

范围

描述

财产

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

宽度#

width 返回检测到的物体的宽度,单位为像素,值为 1 到 320 之间的整数。

**注:**像素值是相对于传感器坐标系而言的。请参阅引言中的图表以获取参考。

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

带有橙色条纹的蓝色桶位于框架中央,周围环绕着黑色边界框。两条垂直的红色虚线从框架顶部延伸至边界框的左右边缘。两条线之间的双向黑色箭头表示宽度测量值。

示例

当开始
[Move towards a blue barrel until its width is larger than 100 pixels.]
永久循环
从 AI 视觉仪获取 [蓝色桶 v] 数据
如果 <AI 视觉仪对象存在?> 那么
如果 <(AI 视觉仪对象 [宽 v]) [math_less_than v] [100]> 那么
移动 [向前 v]
结束
否则
停止移动

高度#

height 返回检测到的物体的高度,单位为像素,值为 1 到 240 之间的整数。

**注:**像素值是相对于传感器坐标系而言的。请参阅引言中的图表以获取参考。

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

带有橙色条纹的蓝色桶位于框架中央,周围环绕着黑色边界框。两条水平红色虚线从框架左侧延伸至边界框的顶部和底部边缘。两条线之间的双向黑色箭头表示高度测量值。

示例

当开始
[Move towards a blue barrel until its height is larger than 100 pixels.]
永久循环
从 AI 视觉仪获取 [蓝色桶 v] 数据
如果 <AI 视觉仪对象存在?> 那么
如果 <(AI 视觉仪对象 [高 v]) [math_less_than v] [100]> 那么
移动 [向前 v]
结束
否则
停止移动

中心X#

centerX 返回被检测物体中心的 x 坐标,单位为像素,值为 0 到 320 之间的整数。

**注:**像素值是相对于传感器坐标系而言的。请参阅引言中的图表以获取参考。

AI Vision 对象属性堆栈块,其参数设置为 centerX。#
AI 视觉仪对象 [中心X坐标 v]

带有橙色条纹的蓝色桶位于框架中央,周围环绕着黑色边界框。一条垂直的红色虚线从框架顶部延伸至边界框的中心,指示中心的 X 坐标。

示例

当开始
[Turn slowly until a blue barrel is centered in front of the robot.]
设定转向速度为 [30]%
[右 v] 转
永久循环
从 AI 视觉仪获取 [蓝色桶 v] 数据
如果 <AI 视觉仪对象存在?> 那么
如果 <[140] [math_less_than v] (AI 视觉仪对象 [中心X坐标 v]) [math_less_than v] [180]> 那么
停止移动

中心Y#

centerY 返回被检测物体中心的 y 坐标,单位为像素,值为 0 到 240 之间的整数。

**注:**像素值是相对于传感器坐标系而言的。请参阅引言中的图表以获取参考。

AI Vision 对象属性堆栈块,其参数设置为 centerY。#
AI 视觉仪对象 [中心Y坐标 v]

带有橙色条纹的蓝色桶位于框架中央,周围环绕着黑色边界框。一条水平红色虚线从框架左侧延伸至边界框中心,表示中心的 Y 坐标。

示例

当开始
[Move towards a blue barrel until its center y-coordinate is more than 140 pixels.]
永久循环
从 AI 视觉仪获取 [蓝色桶 v] 数据
如果 <AI 视觉仪对象存在?> 那么
如果 <(AI 视觉仪对象 [中心Y坐标 v]) [math_less_than v] [140]> 那么
移动 [向前 v]
结束
否则
停止移动

原点X#

originX 返回被检测物体边界框左上角的 x 坐标,单位为像素,值为 0 到 320 之间的整数。

**注:**像素值是相对于传感器坐标系而言的。请参阅引言中的图表以获取参考。

AI Vision 对象属性堆栈块,其参数设置为 originX。#
AI 视觉仪对象 [原点X v]

带有橙色条纹的蓝色桶位于框架中央,周围环绕着黑色边界框。一条垂直的红色虚线从框架顶部延伸到边界框的左边缘,表示边界框原点的 X 坐标。

示例

当开始
[Display if an orange barrel is to the left or the right.]
永久循环
清除屏幕第 [1] 行
在屏幕上设定光标至 [1] 行 [1] 列
从 AI 视觉仪获取 [橙色桶 v] 数据
如果 <AI 视觉仪对象存在?> 那么
如果 <(AI 视觉仪对象 [原点X v]) [math_less_than v] [160]> 那么
在屏幕上打印 [To the left!]▶
否则
在屏幕上打印 [To the right!]▶
结束
等待 [0.5] 秒

原点#

originY 返回被检测物体边界框左上角的 y 坐标,单位为像素,值为 0 到 240 之间的整数。

**注:**像素值是相对于传感器坐标系而言的。请参阅引言中的图表以获取参考。

AI Vision 对象属性堆栈块,其参数设置为 originY。#
AI 视觉仪对象 [原点Y v]

带有橙色条纹的蓝色桶位于框架中央,周围环绕着黑色边界框。一条水平红色虚线从框架左侧延伸至边界框顶部边缘,表示边界框原点的 Y 坐标。

示例

当开始
[Display if an orange barrel is close or far from the robot.]
永久循环
清除屏幕第 [1] 行
在屏幕上设定光标至 [1] 行 [1] 列
从 AI 视觉仪获取 [橙色桶 v] 数据
如果 <AI 视觉仪对象存在?> 那么
如果 <(AI 视觉仪对象 [原点Y v]) [math_less_than v] [80]> 那么
在屏幕上打印 [Far!]▶
否则
在屏幕上打印 [Close!]▶
结束
等待 [0.5] 秒

旋转#

rotation 返回检测到的 AprilTag ID 或颜色代码的朝向(旋转角度),值为 0 到 359 之间的整数,单位为度。

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

相机界面显示一个垂直堆叠的物体,上半部分为蓝色,下半部分为红色,位于画面中央。物体下方的标签为“Red_Blue A:270° CX:185 CY:81 W:93 H:150”,指示物体的名称、旋转角度、中心 X 和 Y 坐标、宽度和高度。网格线和数字轴标记图像尺寸,X 轴范围为 0 到 320,Y 轴范围为 0 到 240。

示例

当开始
[Slide left or right depending on how the Color Code is rotated.]
永久循环
从 AI 视觉仪获取 [Red_Blue v] 数据
如果 <AI 视觉仪对象存在?> 那么
如果 <[50] [math_less_than v] (AI 视觉仪对象 [旋转 v]) [math_less_than v] [100]> 那么
移动 [右 v]
否则如果 <[270] [math_less_than v] (AI 视觉仪对象 [旋转 v]) [math_less_than v] [330]> 那么
移动 [左 v]
否则
停止移动
结束
否则
停止移动

轴承#

bearing 以度数为单位,返回物体偏离 AI 视觉仪视野中心的左右程度。值为 0 表示物体位于中心,正值表示物体在右侧,负值表示物体在左侧。

一个VEX AIM编程机器人位于场地上,一个运动球斜向前偏左。机器人中心与运动球之间的角度标记为-30度。 一个VEX AIM编程机器人位于场地上,一个运动球斜向前偏右。机器人中心与运动球之间的角度标记为30度。
当开始
[Keep the blue barrel directly in front of the robot.]
设定转向速度为 [40]%
永久循环
从 AI 视觉仪获取 [蓝色桶 v] 数据
如果 <AI 视觉仪对象存在?> 那么
如果 <(AI 视觉仪对象 [方位 v]) [math_greater_than v] [5]> 那么
[右 v] 转
否则如果 <(AI 视觉仪对象 [方位 v]) [math_less_than v] [-5]> 那么
[左 v] 转
否则
停止移动

标签ID#

tagID 返回检测到的 AprilTag ID 的识别号码,以整数形式表示。

AI Vision 对象属性堆栈块,其参数设置为 tagID。#
AI 视觉仪对象 [tagID v]

示例

当开始
[Move forward when AprilTag ID 0 is detected.]
永久循环
从 AI 视觉仪获取 [AprilTag ID 0 v] 数据
如果 <AI 视觉仪对象存在?> 那么
移动 [向前 v]
结束
停止移动