使用 VEXcode V5 C++ 中的 AI 视觉传感器进行编码

确保您已使用 AI 视觉传感器配置了 颜色签名颜色代码 以便它们可与您的块一起使用。 要了解有关如何配置它们的更多信息,您可以阅读以下文章:

AI视觉传感器还可以检测AI分类和AprilTags。 要了解如何启用这些检测模式,请访问:

要了解有关这些单独命令的更多详细信息以及如何在 VEXcode 中使用它们,请访问 API 站点。


使用AI视觉传感器获取视觉数据

每个 AI 视觉传感器命令都将以配置的 AI 视觉传感器的名称开头。 对于本文中的所有示例,使用的 AI 视觉传感器的名称均为 AIVision

拍摄快照

takeSnapshot 方法拍摄 AI 视觉传感器当前看到的照片,并从该快照中提取数据,然后可用于项目。 拍摄快照时,您需要指定 AI 视觉传感器应收集哪种类型的对象的数据:

  • A签名颜色代码
    • 这些视觉签名以 AI 视觉传感器的名称、双下划线开头,然后是视觉签名的名称,例如: AIVision1__Blue
  • AI 分类 - aivision::ALL_AIOBJS
  • 四月标签- aivision::ALL_TAGS

拍摄快照将创建您指定的所有检测到的对象的一个数组。 例如,如果您想检测“蓝色” 颜色特征,并且 AI 视觉传感器检测到 3 种不同的蓝色物体,则这三个物体的数据都会放入数组中。

在此示例中,从名为 AIVision1AI 视觉传感器拍摄了“蓝色” 颜色签名的快照。 它显示阵列中检测到的物体的数量,并每 0.5 秒捕获一次新快照。

while (true) {
// 获取所有蓝色对象的快照。
AIVision.takeSnapshot(AIVision1__Blue);

// 在提取数据之前,检查以确保在快照中检测到对象。
if (AIVision.objectCount > 0) {

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, msec);
}

对象

快照中的每个对象都有不同的属性,可用于报告有关该对象的信息。 对象方法允许您访问这些属性。

可用属性如下:

  • ID
  • centerX 和 centerY
  • originX 和 originY
  • 宽度
  • 高度
  • 角度
  • 存在
  • 分数

要访问对象的属性,请使用 AI 视觉传感器的名称,然后是对象方法,然后是对象的索引。

对象索引指示您想要检索哪个特定对象的属性。 拍摄快照后,AI 视觉传感器会自动按大小对物体进行排序。 最大的对象被分配索引 0,较小的对象获得较高的索引号。

例如,调用最大对象的宽度将是 AIVision1.objects[0].width

ID

id 属性仅适用于 AprilTags AI 分类

三个方形识别标记,分别标有 ID 0、9 和 3,每个标记都有相应的坐标和尺寸测量值,以白色文本显示。 ID 0 在左侧,ID 9 在右侧,ID 3 位于底部中央。 每个标记在一个方块内都有一个独特的黑白图案。

对于AprilTagid 属性代表检测到的AprilTag(s) ID 号。

识别特定的 AprilTags 允许选择性导航。 您可以对机器人进行编程,使其朝某些标签移动而忽略其他标签,有效地将它们用作自动导航的路标。

图像中标识出两个球和两个环,标签标明了它们的位置、大小和分数。 红球在左边,蓝球在右边,绿环在左下方,红环在右下方。 每个对象都用白色方框勾勒出来,X、Y 坐标、宽度、高度以及 99% 的分数等详细信息则以白色文字显示。

对于AI 分类id 属性表示检测到的 AI 分类的具体类型。

识别特定的 AI 分类允许机器人只关注特定的物体,比如只想导航到红色的巴基球,而不是蓝色的巴基球。

请参阅这些文章以获取有关 AprilTagsAI 分类 的更多信息以及如何在 AI Vision Utility 中启用它们的检测。

centerXcenterY

这是检测到的物体的中心坐标(以像素为单位)。

计算机视觉系统正在追踪蓝色巴基球。 该物体的轮廓为白色方块,轮廓内有一个较小的红色方块,围绕着中间的白色十字。 在图像的左上角,标签表示该物体是蓝色的,坐标为 X:176、Y:117,尺寸为 W:80、H:78。

CenterX 和 CenterY 坐标有助于导航和定位。 AI 视觉传感器的分辨率为 320 x 240 像素。

视觉系统追踪两个蓝色立方体物体。 上方物体的标签为坐标 X:215、Y:70,尺寸为 W:73、H:84,带有白色轮廓和中心白色十字。 下方物体的坐标为 X:188、Y:184,尺寸为 W:144、H:113,也以白色勾勒出中心白色十字的轮廓。

您可以看到,距离 AI 视觉传感器较近的物体的 CenterY 坐标将比较远的物体低。

在此示例中,由于 AI 视觉传感器的视图中心是 (160, 120),因此机器人将向右转弯,直到检测到的物体的中心 X 坐标大于 150 像素但小于 170 像素。

while (true) {
  // 获取所有蓝色对象的快照。
  AIVision.takeSnapshot(AIVision__Blue);

  // 在提取数据之前检查以确保在快照中检测到对象。
  if (AIVision.objectCount > 0) {

    if (AIVision.objects[0].centerX > 150.0 && 170.0 > AIVision.objects[0].centerX) {
      Drivetrain.turn(right);
    } else {
      Drivetrain.stop();
    }
  }
  等待(5, 毫秒);
}

originXoriginY

OriginX 和 OriginY 是检测到的物体左上角的坐标(以像素为单位)。

视觉系统正在追踪蓝色巴基球。 物体周围有白色轮廓,轮廓内居中有一个白色十字。 左上角的标签表示该物体的颜色为蓝色,坐标为 X:176、Y:117,尺寸为 W:80、H:78。 一个小红方块突出显示了对象的左上角。

OriginX 和 OriginY 坐标有助于导航和定位。 通过将该坐标与对象的宽度和高度相结合,您可以确定对象边界框的大小。 这有助于追踪移动物体或在物体之间导航。

宽度高度

这是检测到的物体的宽度或高度(以像素为单位)。

图像显示了一个蓝色的巴基球,上面有一个白色方形轮廓跟踪它。 左上角有一个标签,表明它是一个蓝色物体,坐标为 X:176,Y:117,尺寸为 W:80,H:78。 红色箭头突出显示物体的宽度和高度。

宽度和高度的测量有助于识别不同的物体。 例如,巴基球的高度比环的高度大。

视觉识别系统正在追踪两个蓝色立方体物体。 上方的立方体具有白色轮廓,标签指示其位置为 X:215、Y:70,尺寸为 W:73、H:84。 下方立方体具有类似的白色轮廓,标签显示 X:188、Y:184 和尺寸 W:144、H:113。 每个立方体的中心都有一个白色十字,可能表示跟踪的焦点。 标签突出显示了每个物体的测量值和跟踪数据。

宽度和高度也表示物体与 AI 视觉传感器的距离。 测量值越小通常表示物体距离较远,而测量值越大则表示物体距离较近。

在此示例中,对象的宽度用于导航。 机器人会接近物体,直到宽度达到特定尺寸后才停止。

while (true) {
  // 获取所有蓝色对象的快照。
  AIVision.takeSnapshot(AIVision1__Blue);

  // 在提取数据之前检查以确保在快照中检测到对象。
  if (AIVision.objectCount > 0) {

    if (AIVision.objects[0].width < 250.0) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  }
  等待(5, msec);
}

角度

显示红色和绿色块的旋转 gif。 当块从红色到绿色完全水平放置时,它们显示为 0 度。 如果红色块垂直位于绿色块上方,则呈 90 度。 如果块水平方向为绿色到红色,则为 180 度。 如果绿色块垂直位于红色块上方,则为 20 度。

角度 属性仅适用于颜色代码AprilTags

这表示检测到的 颜色代码AprilTag 是否方向不同。

两个立方体的堆叠,一个在顶部,一个在底部,正在被视觉系统跟踪。 两个立方体周围都有白色轮廓,绿色立方体的中心有一个白色十字。 图像底部的标签显示 Green_Blue A:87°,表示检测到的颜色和角度测量值。 在其下方,坐标排列为 X:117、Y:186,尺寸为 W:137、H:172,表示框架中堆叠立方体的位置和大小。

您可以查看机器人是否相对于颜色代码AprilTag 有不同的方向,并据此做出导航决策。

两个立方体,一个是绿色,一个是蓝色,并排放置并由视觉系统跟踪。 两个立方体周围都有白色轮廓,中心有一个白色十字架。 左上角的标签表示 Green_Blue A:0°,参考检测到的颜色和角度测量。 在其下方,坐标显示为 X:150、Y:102,尺寸为 W:179、H:109,表示立方体在框架内的位置和大小。

例如,如果未在适当的角度检测到颜色代码 ,则机器人可能无法正确拾取它所代表的物体。

分数

当使用 AI 视觉传感器检测AI 分类 时,使用 分数 属性。

图像显示视觉系统正在追踪四个物体:两个球和两个环。 红球的坐标为 X:122、Y:84、W:67、H:66,得分为 99%。 蓝球的X:228,Y:86,W:70,H:68,得分为99%。 绿环的坐标为 X:109、Y:186、W:98、H:92,得分为 99%。 红色圆环标记为 X:259、Y:187、W:89、H:91,得分为 99%。 每个物体都以白色勾勒出轮廓,表明跟踪准确性。

置信度分数表示人工智能视觉传感器对其检测的确定程度。 在这张图片中,识别这四个物体的 AI 分类的信心达到 99%。 您可以使用此分数来确保您的机器人只关注高度可信的检测。

存在

存在 属性用于检测在最后拍摄的快照中是否检测到指定的 视觉特征

这使您可以检查在前一个快照中是否检测到任何检测到的对象。 当对象存在时,此属性将返回 True,当对象不存在时,此属性将返回 False。


对象数量

objectCount 方法返回上次快照中检测到的物体的数量。

AI Vision Utility 界面左侧检测到两个蓝色立方体,每个立方体都标有其 X 和 Y 坐标和尺寸。 系统已连接,AprilTags 已打开,AI 分类已关闭。 右侧显示蓝色设置,色调和饱和度范围可调,分别设置为 22 和 0.34。 有一个选项可以添加或设置颜色并冻结视频。 固件已更新,运行版本1.0.0.b16,底部有关闭按钮。

在此示例中,已检测到两个具有颜色特征 “蓝色”的物体。 当使用 takeSnapshot 方法时,它们都将被放入数组中。

此代码片段会使用检测到的物体的数量不断更新 EXP Brain。 根据提供的示例,它将重复发送值 2,表示已检测到两个物体。

while (true) {
// 获取所有蓝色对象的快照。
AIVision.takeSnapshot(AIVision__Blue);

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 在提取数据之前,检查以确保在快照中检测到对象。
if (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, msec);
}

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: