人工智能视觉#
介绍#
VEX AIM 编程机器人的 AI 视觉传感器可检测并追踪物体、颜色和 AprilTag。这使得机器人能够分析周围环境、跟踪物体并根据检测到的视觉数据做出反应。以下是所有可用方法和属性的列表:
操作——显示或隐藏 AI Vision 摄像头馈送。
show_aivision – 在机器人的屏幕上显示 AI Vision 源。
hide_aivision – 隐藏屏幕上的 AI Vision 源。
tag_detection – 打开或关闭 AprilTag 检测。
Getters——检测机器人是否拿着物体。
get_data – 根据给定的签名返回检测到的对象元组。
has_sports_ball – 返回机器人是否有运动球。
has_any_barrel – 返回机器人是否具有任何类型的枪管。
has_blue_barrel – 返回机器人是否有蓝色桶。
has_orange_barrel – 返回机器人是否有橙色桶。
属性 – 从 get_data 返回的对象数据。
exists – 以布尔值表示该对象是否存在于当前检测中。
width – 检测到的物体的宽度(以像素为单位)。
高度 – 检测到的物体的高度(以像素为单位)。
centerX – 对象中心的 X 位置(以像素为单位)。
centerY – 对象中心的 Y 位置(以像素为单位)。
方位角 – 相对于机器人前方的水平角度(以度为单位)。
旋转 – 物体的方向(以度为单位)。
originX – 对象左上角的 X 位置(以像素为单位)。
originY – 对象左上角的 Y 位置(以像素为单位)。
id – 对象的分类或标签 ID。
score – AI 分类的置信度得分 (1-100)。
type – 返回对象的类型(AI、标签、颜色或代码)。
构造函数——定义颜色签名和代码。
行动#
show_aivision#
show_aivision
在机器人屏幕上显示 AI 视觉传感器的实时数据。实时数据将覆盖屏幕上的任何其他图像或文本。
**注意:**除非使用 hide_aivision 隐藏提要,否则屏幕不会显示任何其他图像或文本。
用法:
robot.screen.show_aivision()
参数 |
描述 |
---|---|
该方法没有参数。 |
# Watch the AI Vision Sensor detect AI Classifications
# and AprilTags as you move the robot
robot.screen.show_aivision()
hide_aivision#
hide_aivision
从机器人的屏幕上删除 AI 视觉传感器的实时数据馈送。
用法:
robot.screen.hide_aivision()
参数 |
描述 |
---|---|
该方法没有参数。 |
# View the AI Vision Sensor's feed for five seconds
robot.screen.show_aivision()
wait(5, SECONDS)
robot.screen.hide_aivision()
tag_detection#
tag_detection
启用或禁用 AprilTag 检测,其中状态是一个布尔值。
该传感器可以检测 Circle21h7 系列的 AprilTag ID 0 至 36。
用法:
robot.vision.tag_detection(state)
参数 |
描述 |
---|---|
|
|
robot.screen.set_font(PROP30)
# Cut off APrilTag detection after 5 seconds
while True:
if robot.timer.time(SECONDS) > 5:
robot.vision.tag_detection(False)
robot.screen.clear_screen()
robot.screen.set_cursor(3, 1)
apriltags = robot.vision.get_data(ALL_TAGS)
if apriltags:
robot.screen.print("AprilTag detected!")
else:
robot.screen.print("Nothing detected!")
wait(0.1, SECONDS)
吸气剂#
get_data#
get_data
函数会过滤来自 AI 视觉传感器帧的数据并返回一个元组。AI 视觉传感器可以检测包含预训练对象、AprilTag 或已配置颜色和颜色代码的签名。
必须先在 AI Vision 实用程序中配置 颜色签名 和 颜色代码,然后才能使用此方法。
该元组存储的对象按宽度从大到小排序,从索引 0 开始。每个对象的 属性 可以通过其索引访问。如果未检测到匹配的对象,则返回一个空元组。
用法:
robot.vision.get_data(signature, count)
参数 |
描述 |
---|---|
|
获取什么签名的数据。可用的签名有:
NAME 是在 AI Vision Utility 中配置的名称。44 |
|
可选。设置可返回的最大对象数,范围为 1 至 24(默认值:8)。 |
**注意:**可以使用 AIM Printables 中打印的 AprilTags 获取 AprilTags 5 至 37。
# Move forward if a sports ball is detected
while True:
ball = robot.vision.get_data(SPORTS_BALL)
if ball:
robot.move_for(10, 0)
wait(50, MSEC)
色彩签名#
颜色特征是 AI 视觉传感器能够识别的独特颜色。这些特征使传感器能够根据物体的颜色进行检测和跟踪。配置颜色特征后,传感器可以识别其视野范围内具有该特定颜色的物体。颜色特征与 get_data 配合使用,可以实时处理和检测彩色物体。
# Display if any objects match the Red_Box signature
while True:
robot.screen.set_cursor(1, 1)
robot.screen.clear_row(1)
# Change to any configured Color Signature
ai_objects = robot.vision.get_data(Red_Box)
if ai_objects:
robot.screen.print("Color signature detected!")
颜色代码#
颜色代码是由 2 到 4 个按特定顺序排列的颜色特征组成的结构化模式。这些代码使 AI 视觉传感器能够识别预定义的颜色模式。颜色代码可用于识别复杂物体或为自主导航创建独特的标记。
# Display if any objects match the BlueRed code
while True:
robot.screen.set_cursor(1, 1)
robot.screen.clear_row(1)
# Change to any configured Color Code
ai_objects = robot.vision.get_data(BlueRed)
if ai_objects:
robot.screen.print("Color code detected!")
has_sports_ball#
has_sports_ball
返回一个布尔值,指示机器人当前是否有运动球。
True
——机器人有一个运动球。False
— — 机器人没有体育球。
用法:
robot.has_sports_ball()
参数 |
描述 |
---|---|
该方法没有参数。 |
# Kick when the robot has a sports ball
while True:
if robot.has_sports_ball():
robot.kicker.kick(MEDIUM)
wait(50, MSEC)
has_any_barrel#
has_any_barrel
返回一个布尔值,指示机器人当前是否有任何类型的桶。
True
— — 机器人有一桶。False
— — 机器人没有枪管。
用法:
robot.has_any_barrel()
参数 |
描述 |
---|---|
该方法没有参数。 |
# Push a barrel away when detected
while True:
if robot.has_any_barrel():
robot.kicker.place()
wait(50, MSEC)
has_blue_barrel#
has_blue_barrel
返回一个布尔值,指示机器人当前是否有一个蓝色桶。
True
– 机器人有一个蓝色的桶。False
— — 机器人没有蓝色枪管。
用法:
robot.has_blue_barrel()
参数 |
描述 |
---|---|
该方法没有参数。 |
# Push a blue barrel away when detected
while True:
if robot.has_blue_barrel():
robot.kicker.place()
wait(50, MSEC)
has_orange_barrel#
has_orange_barrel
返回一个布尔值,指示机器人当前是否有一个橙色桶。
True
- 机器人有橙色枪管。False
— — 机器人没有橙色枪管。
用法:
robot.has_orange_barrel()
参数 |
描述 |
---|---|
该方法没有参数。 |
# Push an orange barrel away when detected
while True:
if robot.has_orange_barrel():
robot.kicker.place()
wait(50, MSEC)
特性#
使用 robot.vision.get_data 方法后,每个对象都包含十二个属性,这些属性存储在元组中。
Some property values are based off of the detected object’s position in the AI Vision Sensor’s view at the time that robot.vision.get_data
was used. The AI Vision Sensor has a resolution of 320 by 240 pixels.
.exists#
.exists
返回一个布尔值,指示索引是否存在于元组中。
True
:索引存在。False
:索引不存在。
# Check if at least two objects are detected
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
ai_objects = robot.vision.get_data(ALL_CARGO)
if ai_objects:
if ai_objects[1].exists:
robot.screen.print("More than 2")
else:
robot.screen.print("Less than 2")
wait(0.1, SECONDS)
.width#
.width
返回检测到的对象的宽度(以像素为单位),它是 1 到 320 之间的整数。
# Move towards a Blue Barrel until its width is
# larger than 100 pixels
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel:
if barrel[0].width < 100:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.height#
.height
返回检测到的物体的高度(以像素为单位),它是 1 到 240 之间的整数。
# Move towards a Blue Barrel until its height is
# larger than 100 pixels
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel:
if barrel[0].height < 100:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.centerX#
.centerX
返回检测到的物体中心的 x 坐标(以像素为单位),它是 0 到 320 之间的整数。
# Turn slowly until a Blue Barrel is centered in
# front of the robot
robot.set_turn_velocity(30)
robot.turn(RIGHT)
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel:
if 140 < barrel[0].centerX < 180:
robot.stop_all_movement()
wait(10,MSEC)
.centerY#
.centerY
返回检测到的物体中心的 y 坐标(以像素为单位),它是 0 到 240 之间的整数。
# Move towards a Blue Barrel until its
# center y-coordinate is more than 140 pixels
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel:
if barrel[0].centerY < 140:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.bearing#
.bearing
返回一个浮点数,表示物体距离 AI 视觉传感器视野中心左侧或右侧的距离,以度为单位。0 表示位于中心,正值表示位于右侧,负值表示位于左侧。


# Turn to keep the Blue Barrel directly in front
robot.set_turn_velocity(40)
while True:
vision_data = robot.vision.get_data(BLUE_BARREL)
if vision_data:
if vision_data[0].bearing > 5:
robot.turn(RIGHT)
elif vision_data[0].bearing < -5:
robot.turn(LEFT)
else:
robot.stop_all_movement()
else:
robot.stop_all_movement()
wait(0.1, SECONDS)
.rotation#
.rotation
returns the object’s orientation on the AI Vision Sensor’s viewing plane, measured in degrees from 0 to 359. A Color Code is 0° when its colors are arranged in a horizontal line (e.g., Red–Blue). If the colors are rotated, the angle changes (e.g., arranging Blue-Red returns 180°).
For the example below, the Color Code has been configured with red on the left and blue on the right.
In this image, putting blue on top of red is equivalent to rotating the original Color Code 270 degrees to the right.
# Turn the robot with the rotation of the Color Code
while True:
code = robot.vision.get_data(RedBlue)
if code:
# Rotate the Color Code clockwise
if 50 < code[0].rotation < 100 :
robot.move_at(90)
# Rotate the Color Code counterclockwise
elif 270 < code[0].rotation < 330 :
robot.move_at(270)
else:
robot.stop_all_movement()
else:
robot.stop_all_movement()
wait(50, MSEC)
.originX#
.originX
返回检测到的对象边界框左上角的 x 坐标(以像素为单位),它是 0 到 320 之间的整数。
# Display if an Orange Barrel is to the
# left or the right
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1,1)
orange_barrel = robot.vision.get_data(ORANGE_BARREL)
if orange_barrel:
if orange_barrel[0].originX < 160:
robot.screen.print("To the left!")
else:
robot.screen.print("To the right!")
wait(50, MSEC)
.originY#
.originY
返回检测到的对象边界框左上角的 y 坐标(以像素为单位),它是 0 到 240 之间的整数。
# Display if an Orange Barrel is close or far
# from the robot
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
orange_barrel = robot.vision.get_data(ORANGE_BARREL)
if orange_barrel:
if orange_barrel[0].originY < 80:
robot.screen.print("Far")
else:
robot.screen.print("Close")
wait(50, MSEC)
.id#
.id
以整数形式返回检测到的 AI 分类或 AprilTag 的 ID。
For an AprilTag, the .id
property represents the detected AprilTag’s ID number in the range of 0 to 37. For an AI Classification, the id corresponds to the predefined id as shown below.
人工智能分类 |
ID |
签名 |
---|---|---|
球 |
0 |
|
蓝桶 |
1 |
|
橙色桶 |
2 |
|
AIM机器人 |
3 |
|
# Move forward when AprilTag 1 is detected
while True:
apriltags = robot.vision.get_data(ALL_TAGS)
if apriltags:
if apriltags[0].id == 1:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.score#
.score
以 1 到 100 之间的整数形式返回检测到的 AI 分类的置信度分数。
# Look confident if an Orange Barrel is detected
while True:
barrel = robot.vision.get_data(ORANGE_BARREL)
if barrel:
if barrel[0].score > 95:
robot.screen.show_emoji(CONFIDENT)
else:
robot.screen.hide_emoji()
wait(50, MSEC)
.type#
.type
返回检测到的对象类型。它将返回以下之一:
对象类型 |
包含的对象 |
---|---|
|
- Sports balls |
|
- AprilTags |
|
- Color signatures |
|
- Color codes |
# Display if an AprilTag or AI Classification
# is detected
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
vision_data = robot.vision.get_data(ALL_VISION)
if vision_data:
if vision_data[0].type == AiVision.AI_OBJECT:
robot.screen.print("AI Object!")
elif vision_data[0].type == AiVision.TAG_OBJECT:
robot.screen.print("AprilTag!")
wait(0.1, SECONDS)
# Display a list of all detected objects
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
vision_data = robot.vision.get_data(ALL_VISION)
if vision_data:
for obj in vision_data:
if obj.type == AiVision.AI_OBJECT:
robot.screen.print("- AI Object")
elif obj.type == AiVision.TAG_OBJECT:
robot.screen.print("- AprilTag")
robot.screen.next_row()
wait(0.1, SECONDS)
构造函数#
Creating a Color Signature#
使用 Colordesc
构造函数创建一个新的颜色签名,然后使用 color_description
方法将其注册到 AI 视觉传感器。Colordesc
对象定义了传感器最多 7 个可检测颜色签名中的 1 个,但必须使用 color_description
明确设置才能生效。
Colordesc 用法:
Colordesc(索引、红色、绿色、蓝色、hangle、hdsat)
范围 |
描述 |
---|---|
|
表示颜色签名索引的 1 到 7 之间的整数。如果两个颜色签名使用相同的索引,则第二个颜色签名将覆盖第一个。 |
|
表示颜色红色成分的 0 至 255 之间的整数。 |
|
表示颜色的绿色成分的 0 至 255 之间的整数。 |
|
表示颜色蓝色成分的 0 至 255 之间的整数。 |
|
1 至 40 之间的浮点数,表示色调范围(以度为单位)。 |
|
表示饱和度范围从 0.10 到 1.00 的浮点数。 |
color_description 用法:
robot.vision.color_description(object)
范围 |
描述 |
---|---|
|
将 |
# Detect a red object
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
robot.vision.color_description(red_box)
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
red_boxes = robot.vision.get_data(red_box)
if red_boxes:
robot.screen.print("Red detected!")
else:
robot.screen.print("No red detected.")
wait(0.2, SECONDS)
Creating a Color Code#
使用 Codedesc
构造函数创建一个新的颜色代码,然后使用 code_description
方法激活它。颜色代码将 2 到 4 个现有的 Colordesc
对象分组为一个标识符,AI 视觉传感器可以将其作为序列进行检测,但必须使用 code_description
明确设置才能生效。
Codedesc 用法:
Codedesc(index, c1, c2, c3, c4, c5)
范围 |
描述 |
---|---|
|
颜色代码的索引,从 1 到 8。注意:如果创建两个具有相同索引的 |
|
代码中的第一个 |
|
代码中的第二个 |
|
可选。第三个 |
|
可选。第四个 |
code_description 用法:
robot.vision.code_description(object)
范围 |
描述 |
---|---|
|
一个 |
# Create Color Signatures
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
purple_box = Colordesc(2, 98, 18, 227, 10.00, 0.20)
robot.vision.color_description(red_box)
robot.vision.color_description(purple_box)
# Detect a red_purple Color Code
red_purple = Codedesc(1, red_box, purple_box)
robot.vision.code_description(red_purple)
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
code_objects = robot.vision.get_data(red_purple)
if code_objects:
robot.screen.print("Code detected!")
else:
robot.screen.print("No code detected.")
wait(0.2, SECONDS)