确保您已使用 AI 视觉传感器配置了 颜色签名 和 颜色代码 以便它们可与您的块一起使用。 要了解有关如何配置它们的更多信息,您可以阅读以下文章:
AI视觉传感器还可以检测AI分类和AprilTags。 要了解如何启用这些检测模式,请访问:
要了解有关这些单独命令的更多详细信息以及如何在 VEXcode 中使用它们,请访问 API 站点。
使用AI视觉传感器获取视觉数据
每个 AI 视觉传感器命令都将以配置的 AI 视觉传感器的名称开头。 对于本文中的所有示例,使用的 AI 视觉传感器的名称均为 AIVision
。
拍摄快照
takeSnapshot
方法拍摄 AI 视觉传感器当前看到的照片,并从该快照中提取数据,然后可用于项目。 拍摄快照时,您需要指定 AI 视觉传感器应收集哪种类型的对象的数据:
- A签名 或颜色代码
- 这些视觉签名以 AI 视觉传感器的名称、双下划线开头,然后是视觉签名的名称,例如:
AIVision1__Blue
。
- 这些视觉签名以 AI 视觉传感器的名称、双下划线开头,然后是视觉签名的名称,例如:
-
AI 分类 -
aivision::ALL_AIOBJS
-
四月标签-
aivision::ALL_TAGS
拍摄快照将创建您指定的所有检测到的对象的一个数组。 例如,如果您想检测“蓝色” 颜色特征,并且 AI 视觉传感器检测到 3 种不同的蓝色物体,则这三个物体的数据都会放入数组中。
在此示例中,从名为 AIVision1
AI 视觉传感器拍摄了“蓝色” 颜色签名的快照。 它显示阵列中检测到的物体的数量,并每 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 分类
对于AprilTag, id
属性代表检测到的AprilTag(s) ID 号。
识别特定的 AprilTags 允许选择性导航。 您可以对机器人进行编程,使其朝某些标签移动而忽略其他标签,有效地将它们用作自动导航的路标。
对于AI 分类, id
属性表示检测到的 AI 分类的具体类型。
识别特定的 AI 分类允许机器人只关注特定的物体,比如只想导航到红色的巴基球,而不是蓝色的巴基球。
请参阅这些文章以获取有关 AprilTags 和 AI 分类 的更多信息以及如何在 AI Vision Utility 中启用它们的检测。
centerX
和 centerY
这是检测到的物体的中心坐标(以像素为单位)。
CenterX 和 CenterY 坐标有助于导航和定位。 AI 视觉传感器的分辨率为 320 x 240 像素。
您可以看到,距离 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, 毫秒);
}
originX
和 originY
OriginX 和 OriginY 是检测到的物体左上角的坐标(以像素为单位)。
OriginX 和 OriginY 坐标有助于导航和定位。 通过将该坐标与对象的宽度和高度相结合,您可以确定对象边界框的大小。 这有助于追踪移动物体或在物体之间导航。
宽度
和 高度
这是检测到的物体的宽度或高度(以像素为单位)。
宽度和高度的测量有助于识别不同的物体。 例如,巴基球的高度比环的高度大。
宽度和高度也表示物体与 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);
}
角度
角度
属性仅适用于颜色代码 和AprilTags。
这表示检测到的 颜色代码或 AprilTag 是否方向不同。
您可以查看机器人是否相对于颜色代码 或AprilTag 有不同的方向,并据此做出导航决策。
例如,如果未在适当的角度检测到颜色代码 ,则机器人可能无法正确拾取它所代表的物体。
分数
当使用 AI 视觉传感器检测AI 分类 时,使用 分数
属性。
置信度分数表示人工智能视觉传感器对其检测的确定程度。 在这张图片中,识别这四个物体的 AI 分类的信心达到 99%。 您可以使用此分数来确保您的机器人只关注高度可信的检测。
存在
存在
属性用于检测在最后拍摄的快照中是否检测到指定的 视觉特征。
这使您可以检查在前一个快照中是否检测到任何检测到的对象。 当对象存在时,此属性将返回 True,当对象不存在时,此属性将返回 False。
对象数量
objectCount 方法返回上次快照中检测到的物体的数量。
在此示例中,已检测到两个具有颜色特征 “蓝色”的物体。 当使用 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);
}