机器人专用模块#
介绍#
英雄机器人 Flop 包含一个进气电机、一个机械臂电机和一个 IQ AI 视觉传感器。
所有标准 VEXcode VR 模块均可在 IQ 26-27 Level Up Playground 中使用。
以下是所有可用的机器人专用模块列表:
运动控制——移动并跟踪机器人的电机。
操作
旋转电机 – 使电机沿一个方向永远旋转。
spin motor for – 使电机旋转指定的角度或圈数。
旋转电机到位置 – 将电机旋转到指定位置。
停止电机 – 停止电机旋转。
设置
位置
价值观
AI视觉——使用IQ AI视觉传感器捕捉和分析物体。
操作
获取对象数据 - 捕获特定签名的数据,例如检测到的 AI 分类。
设置
设置对象项 - 从列表中选择特定对象。
价值观
对象存在 - 返回是否检测到任何分类。
object is - 返回是否检测到特定分类。
object is AprilTag - 返回检测到的对象是否为与特定 ID 匹配的 AprilTag。
对象计数 - 返回检测到的对象数量。
对象属性 - 返回宽度、高度、centerX、centerY、originX 或 originY。
本页示例使用 Playground 的默认起始位置。
运动#
Flop 使用进料电机来收集和弹出游戏组件。机械臂电机负责升降机械臂。
每个电机都有自己的方向选项。方向名称描述了该电机在触发器上的运动方式。
行动#
旋转马达#
旋转电机 模块可以使电机沿两个方向之一持续旋转。电机将持续旋转,直到收到其他指令,例如改变旋转方向或停止。
[IntakeMotor v] [收集器 v] 转
参数 |
描述 |
|---|---|
发动机 |
要旋转的电机:进气电机或臂电机。 |
方向 |
电机旋转方向:
|
例子
当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
驱动 [向前 v] (35) [英寸 v] ▶
[右 v] 转 (90) 度 ▶
[ArmMotor v] [向上 v] 转 (1) [转 v] ▶
驱动 [向前 v] (40) [英寸 v] ▶
[IntakeMotor v] [吐放器 v] 转
用于旋转马达#
“旋转电机”堆叠模块会使电机旋转一段特定距离。旋转距离是相对于电机当前位置的。程序会等待电机旋转完毕后,才会运行堆叠中的下一个模块。
[ArmMotor v] [向上 v] 转 (500) [度 v] ▶
参数 |
描述 |
|---|---|
发动机 |
要旋转的电机:进气电机或臂电机。 |
方向 |
电机旋转方向:
|
距离 |
电机旋转的距离。角度使用整数。圈数可以使用整数或小数。 |
单元 |
距离单位:度或圈。 |
不要等待 |
选择箭头(▶)展开代码块,显示无需等待,这样堆栈中的下一个代码块就会立即运行。 |
例子
当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
驱动 [向前 v] (35) [英寸 v] ▶
[右 v] 转 (90) 度 ▶
[ArmMotor v] [向上 v] 转 (1) [转 v] ▶
驱动 [向前 v] (40) [英寸 v] ▶
[IntakeMotor v] [吐放器 v] 转
旋转电机定位#
旋转电机定位 堆栈模块使电机旋转到特定位置。
电机的位置是指它旋转的距离,以度或圈数来衡量。一圈等于360度。在项目开始时,电机位置设置为0度。也可以使用set motor position代码块来设置电机位置。
位置值是绝对值。这意味着旋转方向取决于电机的当前位置。
例如,如果电机从0度开始旋转到720度,它将正转两圈。如果它接着旋转到360度,它将反转一圈,因为360小于720。
[ArmMotor v] 转至 (500) [度 v] ▶
参数 |
描述 |
|---|---|
发动机 |
要旋转的电机:进气电机或臂电机。 |
位置 |
电机旋转到的位置值。角度使用整数。圈数可以使用整数或小数。 |
单元 |
位置单位:度或圈。 |
不要等待 |
选择箭头(▶)展开代码块,显示无需等待,这样堆栈中的下一个代码块就会立即运行。 |
例子
当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
驱动 [向前 v] (35) [英寸 v] ▶
[右 v] 转 (90) 度 ▶
[ArmMotor v] 转至 (1) [转 v] ▶
驱动 [向前 v] (40) [英寸 v] ▶
[IntakeMotor v] [吐放器 v] 转
停止电机#
停止电机 堆栈块停止选定的电机。
[IntakeMotor v] 停止
参数 |
描述 |
|---|---|
发动机 |
要停止的电机:进气电机或臂电机。 |
例子
当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
驱动 [向前 v] (35) [英寸 v] ▶
[右 v] 转 (90) 度 ▶
[ArmMotor v] [向上 v] 转 (1) [转 v] ▶
驱动 [向前 v] (40) [英寸 v] ▶
[IntakeMotor v] [吐放器 v] 转
等待 (1) 秒
[IntakeMotor v] 停止
设置#
设定电机速度#
“设置电机转速”模块用于控制电机的转速。百分比越高,电机转速越快;百分比越低,电机转速越慢。
每个项目开始时,每个电机默认以 50% 的速度旋转。
注意:更高的速度会使电机转速更快,但精度可能会降低。更低的速度会使电机转速更慢,但精度可能会更高。
设定 [IntakeMotor v] 转速为 [50] [% v]
参数 |
描述 |
|---|---|
发动机 |
用于设置以下电机速度的电机:进气电机或臂电机。 |
速度 |
电机旋转的速度。百分比使用0%到100%之间的整数。 |
单元 |
速度单位:%。 |
例子
当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
驱动 [向前 v] (35) [英寸 v] ▶
[右 v] 转 (90) 度 ▶
[ArmMotor v] [向上 v] 转 (1) [转 v] ▶
驱动 [向前 v] (40) [英寸 v] ▶
设定 [IntakeMotor v] 转速为 [100] [% v]
[IntakeMotor v] [吐放器 v] 转
设置电机超时#
设置电机超时 代码块用于设置电机尝试完成一次运动的超时时间。如果电机无法在规定时间内完成,它将停止尝试并执行代码块堆栈中的下一个代码块。这样可以防止电机卡在某个运动中。
设定 [ArmMotor v] 超时为 [1] 秒
参数 |
描述 |
|---|---|
发动机 |
设置超时时间的电机:IntakeMotor 或 ArmMotor。 |
时间 |
电机尝试完成一次运动的秒数。该值可以是整数或小数。 |
例子
当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
驱动 [向前 v] (35) [英寸 v] ▶
[右 v] 转 (90) 度 ▶
设定 [ArmMotor v] 超时为 [2] 秒
[ArmMotor v] [向上 v] 转 (1) [转 v] ▶
驱动 [向前 v] (40) [英寸 v] ▶
[IntakeMotor v] [吐放器 v] 转
位置#
电机位置#
电机的位置是指它旋转的距离,以度或圈数来衡量。一圈等于360度。电机位置报告模块会报告电机的当前位置。
项目开始时,电机位置设置为 0 度。如果电机正向旋转一周,则位置为 360 度或 1 圈。如果电机反向旋转,则位置为负值。
([ArmMotor v] 位置 [度 v])
参数 |
描述 |
|---|---|
发动机 |
用于报告以下位置的电机:进气电机或臂电机。 |
单元 |
报告电机位置的单位:度或圈。 |
例子
当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
驱动 [向前 v] (35) [英寸 v] ▶
[右 v] 转 (90) 度 ▶
当 <([ArmMotor v] 位置 [度 v]) [math_less_than v] [360]>
[ArmMotor v] [向上 v] 转
等待 (0.002) 秒
结束
[ArmMotor v] 停止
驱动 [向前 v] (40) [英寸 v] ▶
[IntakeMotor v] [吐放器 v] 转
设置电机位置#
电机的位置是指它旋转的距离,以度或圈数来衡量。一圈等于360度。设置电机位置堆栈块会将电机的当前位置更改为新值。
例如,如果电机旋转了 180 度,将位置设置为 0 度会将该位置从 180 度重置为 0 度。然后,电机可以根据这个新值旋转到其他位置。
设定 [ArmMotor v] 转位至 (0) [度 v]
参数 |
描述 |
|---|---|
发动机 |
用于设置以下位置的电机:进气电机或臂电机。 |
位置 |
要设置的位置值。度数使用整数。转数可以使用整数或小数。 |
单元 |
位置单位:度或圈。 |
例子
当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
驱动 [向前 v] (35) [英寸 v] ▶
[右 v] 转 (90) 度 ▶
设定 [ArmMotor v] 转位至 [0] [度 v]
[ArmMotor v] [向上 v] 转 (1) [转 v] ▶
驱动 [向前 v] (40) [英寸 v] ▶
[IntakeMotor v] [吐放器 v] 转
价值观#
电机已完成#
“电机已完成”布尔模块用于报告电机是否已停止运转。这可用于根据电机的运转状态来控制其他行为的执行时间。
正确 — 电机已停止运转。
错误 — 电机仍在运转。
该模块与以下具有and don’t wait参数的运动模块配合使用:spin motor for 和 spin motor to position。
<[ArmMotor v] 已结束?>
参数 |
描述 |
|---|---|
发动机 |
报告电机是否停止运转的参数:IntakeMotor 或 ArmMotor。 |
例子
当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
驱动 [向前 v] (35) [英寸 v] ▶
[右 v] 转 (90) 度 ▶
[ArmMotor v] 转至 (1) [转 v] ◀ 并且不等待
等到 <[ArmMotor v] 已结束?>
驱动 [向前 v] (40) [英寸 v] ▶
[IntakeMotor v] [吐放器 v] 转
电机正在旋转#
“电机是否旋转”布尔模块用于报告电机是否正在旋转。这可以根据电机的运动状态来控制其他行为的执行时间。
正确——电机正在旋转。
错误 — 电机没有转动。
该模块与以下具有and don’t wait参数的运动模块配合使用:spin motor for 和 spin motor to position。
<[IntakeMotor v] 正在转?>
参数 |
描述 |
|---|---|
发动机 |
要报告电机是否正在旋转的参数:IntakeMotor 或 ArmMotor。 |
例子
当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
驱动 [向前 v] (35) [英寸 v] ▶
[右 v] 转 (90) 度 ▶
[ArmMotor v] [向上 v] 转 (1) [转 v] ▶
驱动 [向前 v] (40) [英寸 v] ▶
[IntakeMotor v] [吐放器 v] 转
等到 <非 <[IntakeMotor v] 正在转?>>
[IntakeMotor v] 停止
电机速度#
电机速度报告模块以百分比形式报告电机的旋转速度,范围从 -100% 到 100%。
([IntakeMotor v] 速度 [% v] 值 :: custom-motion)
参数 |
描述 |
|---|---|
发动机 |
要报告以下电机的速度:IntakeMotor 或 ArmMotor。 |
单元 |
电机速度的报告单位:%。 |
例子
当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
驱动 [向前 v] (35) [英寸 v] ▶
[右 v] 转 (90) 度 ▶
[ArmMotor v] [向上 v] 转 (1) [转 v] ▶
驱动 [向前 v] (40) [英寸 v] ▶
[IntakeMotor v] [吐放器 v] 转
等待 [0.2] 秒
打印 ([IntakeMotor v] 速度 [% v] 值 :: custom-motion) ▶
人工智能视觉#
行动#
获取对象数据#
获取对象数据 模块将来自 IQ AI 视觉传感器帧的数据过滤为单个签名——传感器可以识别的事物的保存描述,例如场上的游戏元素。
The dataset stores objects ordered from largest to smallest by width, starting at index 0. Each object’s properties can be accessed using the object property block. An empty dataset is returned if no matching objects are detected.
从 [AIVision v] 获取 [AI Classifications v] 数据
范围 |
描述 |
|---|---|
签名 |
筛选数据集,仅包含指定签名的数据。可用签名包括:
|
例子
当开始 :: hat events
[Drop the preloaded Bean Bag.]
[IntakeMotor v] [吐放器 v] 转 (180) [度 v] ▶
[左 v] 转 (90) 度 ▶
[Find and face the nearest red Bean Bag.]
设定转向速度为 (30) [% v]
设定 [object_counter v] 为 [1]
从 [AIVision v] 获取 [AI Classifications v] 数据
重复 ([AIVision v] 对象数目)
设定 [AIVision v] 对象标号为 (object_counter)
如果 <[AIVision v] 对象是 [RedBeanBag v]?> 那么
if <([AIVision v] 对象 [中心X坐标 v]) < (140)> then
[左 v] 转
else if <([AIVision v] object [centerX v]) > (180)> then
[右 v] 转
否则
驱动停止
结束
退出循环
结束
将 [object_counter v] 改变 [1]
结束
设置#
设置对象项#
设置对象项 块设置要使用数据集中的哪个项。
设定 [AIVision v] 对象标号为 [1]
参数 |
描述 |
|---|---|
物品 |
要使用的数据集中的项目编号。 |
例子
当开始 :: hat events
[Drop the preloaded Bean Bag.]
[IntakeMotor v] [吐放器 v] 转 (180) [度 v] ▶
[左 v] 转 (90) 度 ▶
[Find the index of the nearest red Bean Bag.]
设定 [object_counter v] 为 [1]
从 [AIVision v] 获取 [AI Classifications v] 数据
重复 ([AIVision v] 对象数目)
设定 [AIVision v] 对象标号为 (object_counter)
如果 <[AIVision v] 对象是 [RedBeanBag v]?> 那么
打印 (连接 [Nearest Red Bean Bag is ] (object_counter)) ▶
退出循环
否则
将 [object_counter v] 改变 [1]
结束
结束
价值观#
对象存在#
对象存在 代码块返回一个布尔值,指示是否在数据集中检测到任何对象。
正确 - 数据集包含检测到的对象。
错误 - 该数据集不包含任何检测到的对象。
<[AIVision v] 对象存在?>
参数 |
描述 |
|---|---|
此代码块没有参数。 |
例子
当开始 :: hat events
[Drop the preloaded Bean Bag.]
[IntakeMotor v] [吐放器 v] 转 (180) [度 v] ▶
[左 v] 转 (90) 度 ▶
[Turn until a Bean Bag is detected.]
设定转向速度为 (30) [% v]
[右 v] 转
重复直到 <[AIVision v] 对象存在?>
从 [AIVision v] 获取 [AI Classifications v] 数据
结束
驱动停止
对象是#
object is 块返回一个布尔值,指示检测到的对象是否与特定分类匹配。
正确 - 数据集中的项是特定对象。
错误 - 数据集中的项不是特定对象。
<[AIVision v] 对象是 [RedBeanBag v]?>
范围 |
描述 |
|---|---|
目的 |
要将该物品与以下哪个对象进行比较:RedBeanBag、BlueBeanBag 或 YellowBeanBag。 |
例子
当开始 :: hat events
[Drop the preloaded Bean Bag.]
[IntakeMotor v] [吐放器 v] 转 (180) [度 v] ▶
[左 v] 转 (90) 度 ▶
[Find the index of the nearest red Bean Bag.]
设定 [object_counter v] 为 [1]
从 [AIVision v] 获取 [AI Classifications v] 数据
重复 ([AIVision v] 对象数目)
设定 [AIVision v] 对象标号为 (object_counter)
如果 <[AIVision v] 对象是 [RedBeanBag v]?> 那么
打印 (连接 [Nearest Red Bean Bag is ] (object_counter)) ▶
退出循环
否则
将 [object_counter v] 改变 [1]
结束
结束
对象是 AprilTag#
object is AprilTag 块返回一个布尔值,指示检测到的对象是否是与特定 ID 匹配的 AprilTag。
正确 - 检测到的对象是具有给定 ID 的 AprilTag。
错误 - 检测到的对象不是具有给定 ID 的 AprilTag。
<[AIVision v] 对象是 AprilTag [0]?>
范围 |
描述 |
|---|---|
AprilTag ID |
要与检测到的 AprilTag 进行比较的 ID 号。 |
例子
当开始 :: hat events
[Stop when you see the Red Goal!]
设定转向速度为 (30) [% v]
[右 v] 转
重复直到 <[AIVision v] 对象是 AprilTag [1]?>
从 [AIVision v] 获取 [AprilTags v] 数据
结束
驱动停止
打印 [Found the Red Goal!] ▶
对象计数#
对象计数 模块返回数据集中检测到的对象数量,以整数形式表示。
([AIVision v] 对象数目)
参数 |
描述 |
|---|---|
此代码块没有参数。 |
例子
当开始 :: hat events
[Drop the preloaded Bean Bag.]
[IntakeMotor v] [吐放器 v] 转 (180) [度 v] ▶
[左 v] 转 (90) 度 ▶
[Print how many Bean Bags are detected.]
从 [AIVision v] 获取 [AI Classifications v] 数据
打印 ([AIVision v] 对象数目) ▶
对象属性#
使用 get object data 块存储的每个对象都包含六个属性。
([AIVision v] 对象 [宽 v])
所有属性值均描述了在调用“获取对象数据”模块时,IQ AI 视觉传感器视野中检测到的对象的位置和大小。这些值以像素为单位,基于传感器的 320 x 240 像素分辨率。
范围 |
描述 |
|---|---|
财产 |
要使用检测到的对象的哪个属性:宽度、高度、centerX、centerY、originX 或 originY。 |
宽度#
width 属性以像素为单位报告检测到的对象宽度,数值为 1 到 320 之间的整数。
([AIVision v] 对象 [宽 v])
例子
当开始
[Drop the preloaded Bean Bag.]
[IntakeMotor v] [吐放器 v] 转 (180) [度 v] ▶
[左 v] 转 (90) 度 ▶
[Approach the Bean Bag, then pick it up.]
设定驱动速度为 (30) [% v]
永久循环
从 [AIVision v] 获取 [AI Classifications v] 数据
如果 <[AIVision v] 对象存在?> 那么
设定 [AIVision v] 对象标号为 [1]
如果 <[AIVision v] 对象是 [RedBeanBag v]?> 那么
if <([AIVision v] object [width v]) > (180)> then
驱动 [向前 v] [50] [毫米 v] ▶
[IntakeMotor v] [收集器 v] 转 [90] [度 v] ▶
退出循环
否则
驱动 [向前 v]
结束
结束
结束
结束
高度#
height 属性以像素为单位报告检测到的对象的高度,数值为 1 到 240 之间的整数。
([AIVision v] 对象 [高 v])
例子
当开始
[Drop the preloaded Bean Bag.]
[IntakeMotor v] [吐放器 v] 转 (180) [度 v] ▶
[左 v] 转 (90) 度 ▶
[Approach the Bean Bag, then pick it up.]
设定驱动速度为 (30) [% v]
永久循环
从 [AIVision v] 获取 [AI Classifications v] 数据
如果 <[AIVision v] 对象存在?> 那么
设定 [AIVision v] 对象标号为 [1]
如果 <[AIVision v] 对象是 [RedBeanBag v]?> 那么
if <([AIVision v] object [height v]) > (100)> then
驱动 [向前 v] [50] [毫米 v] ▶
[IntakeMotor v] [收集器 v] 转 [90] [度 v] ▶
退出循环
否则
驱动 [向前 v]
结束
结束
结束
结束
centerX#
centerX 属性以像素为单位报告检测到的对象中心的 x 坐标,数值为 0 到 320 之间的整数。
([AIVision v] 对象 [中心X坐标 v])
例子
当开始
[Drop the preloaded Bean Bag.]
[IntakeMotor v] [吐放器 v] 转 (180) [度 v] ▶
[左 v] 转 (90) 度 ▶
[Steer to keep the Bean Bag centered while approaching.]
设定转向速度为 (30) [% v]
设定驱动速度为 (30) [% v]
永久循环
从 [AIVision v] 获取 [AI Classifications v] 数据
如果 <[AIVision v] 对象存在?> 那么
设定 [AIVision v] 对象标号为 [1]
如果 <[AIVision v] 对象是 [RedBeanBag v]?> 那么
if <([AIVision v] 对象 [中心X坐标 v]) < (140)> then
[左 v] 转 (5) 度 ▶
否则
驱动 [向前 v] (150) [毫米 v] ▶
[IntakeMotor v] [收集器 v] 转
退出循环
结束
结束
结束
结束
中心Y#
centerY 属性以像素为单位报告检测到的对象中心的 y 坐标,数值为 0 到 240 之间的整数。
([AIVision v] 对象 [中心Y坐标 v])
例子
当开始
[Drop the preloaded Bean Bag.]
[IntakeMotor v] [吐放器 v] 转 (180) [度 v] ▶
[左 v] 转 (90) 度 ▶
[Print the y-position of the Bean Bag.]
从 [AIVision v] 获取 [AI Classifications v] 数据
如果 <[AIVision v] 对象存在?> 那么
设定 [AIVision v] 对象标号为 [1]
如果 <[AIVision v] 对象是 [RedBeanBag v]?> 那么
打印 ([AIVision v] 对象 [中心Y坐标 v]) ▶
结束
结束
originX#
originX 属性以像素为单位报告检测到的对象边界框左上角的 x 坐标,数值为 0 到 320 之间的整数。
([AIVision v] 对象 [原点X v])
例子
当开始
[Drop the preloaded Bean Bag.]
[IntakeMotor v] [吐放器 v] 转 (180) [度 v] ▶
[左 v] 转 (90) 度 ▶
[Steer to keep the left edge centered.]
设定转向速度为 (30) [% v]
设定驱动速度为 (30) [% v]
永久循环
从 [AIVision v] 获取 [AI Classifications v] 数据
如果 <[AIVision v] 对象存在?> 那么
设定 [AIVision v] 对象标号为 [1]
如果 <[AIVision v] 对象是 [RedBeanBag v]?> 那么
if <([AIVision v] 对象 [原点X v]) < (100)> then
[左 v] 转 (5) 度 ▶
否则
驱动 [向前 v] (150) [毫米 v] ▶
[IntakeMotor v] [收集器 v] 转
退出循环
结束
结束
结束
结束
originY#
originY 属性以像素为单位报告检测到的对象边界框左上角的 y 坐标,数值为 0 到 240 之间的整数。
([AIVision v] 对象 [原点Y v])
例子
当开始
[Drop the preloaded Bean Bag.]
[IntakeMotor v] [吐放器 v] 转 (180) [度 v] ▶
[左 v] 转 (90) 度 ▶
[Print the y-position of the Bean Bag's top edge.]
从 [AIVision v] 获取 [AI Classifications v] 数据
如果 <[AIVision v] 对象存在?> 那么
设定 [AIVision v] 对象标号为 [1]
如果 <[AIVision v] 对象是 [RedBeanBag v]?> 那么
打印 ([AIVision v] 对象 [原点Y v]) ▶
结束
结束