机器人专用模块#

介绍#

英雄机器人 Flop 包含一个进气电机、一个机械臂电机和一个 IQ AI 视觉传感器。

所有标准 VEXcode VR 模块均可在 IQ 26-27 Level Up Playground 中使用。

以下是所有可用的机器人专用模块列表:

运动控制——移动并跟踪机器人的电机。

AI视觉——使用IQ AI视觉传感器捕捉和分析物体。

  • 操作

  • 设置

  • 价值观

    • 对象存在 - 返回是否检测到任何分类。

    • object is - 返回是否检测到特定分类。

    • object is AprilTag - 返回检测到的对象是否为与特定 ID 匹配的 AprilTag。

    • 对象计数 - 返回检测到的对象数量。

    • 对象属性 - 返回宽度、高度、centerX、centerY、originX 或 originY。

本页示例使用 Playground 的默认起始位置。

运动#

Flop 使用进料电机来收集和弹出游戏组件。机械臂电机负责升降机械臂。

每个电机都有自己的方向选项。方向名称描述了该电机在触发器上的运动方式。

行动#

旋转马达#

旋转电机 模块可以使电机沿两个方向之一持续旋转。电机将持续旋转,直到收到其他指令,例如改变旋转方向或停止。

spin [IntakeMotor v] [intake v]

参数

描述

发动机

要旋转的电机:进气电机或臂电机。

方向

电机旋转方向:

  • 进气电机 — 进气 或 排气
  • 臂电机 — 上 或 下

例子

当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
drive [forward v] for (35) [inches v] ▶
[右 v] 转 (90) 度 ▶
spin [ArmMotor v] [up v] for (1) [turns v] ▶
drive [forward v] for (40) [inches v] ▶
spin [IntakeMotor v] [outtake v]

用于旋转马达#

“旋转电机”堆叠模块会使电机旋转一段特定距离。旋转距离是相对于电机当前位置的。程序会等待电机旋转完毕后,才会运行堆叠中的下一个模块。

spin [ArmMotor v] [up v] for (500) [degrees v] ▶

参数

描述

发动机

要旋转的电机:进气电机或臂电机。

方向

电机旋转方向:

  • 进气电机 — 进气 或 排气
  • 臂电机 — 上 或 下

距离

电机旋转的距离。角度使用整数。圈数可以使用整数或小数。

单元

距离单位:度或圈。

不要等待

选择箭头(▶)展开代码块,显示无需等待,这样堆栈中的下一个代码块就会立即运行。

例子

当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
drive [forward v] for (35) [inches v] ▶
[右 v] 转 (90) 度 ▶
spin [ArmMotor v] [up v] for (1) [turns v] ▶
drive [forward v] for (40) [inches v] ▶
spin [IntakeMotor v] [outtake v]

旋转电机定位#

旋转电机定位 堆栈模块使电机旋转到特定位置。

电机的位置是指它旋转的距离,以度或圈数来衡量。一圈等于360度。在项目开始时,电机位置设置为0度。也可以使用set motor position代码块来设置电机位置。

位置值是绝对值。这意味着旋转方向取决于电机的当前位置。

例如,如果电机从0度开始旋转到720度,它将正转两圈。如果它接着旋转到360度,它将反转一圈,因为360小于720。

spin [ArmMotor v] to position (500) [degrees v] ▶

参数

描述

发动机

要旋转的电机:进气电机或臂电机。

位置

电机旋转到的位置值。角度使用整数。圈数可以使用整数或小数。

单元

位置单位:度或圈。

不要等待

选择箭头(▶)展开代码块,显示无需等待,这样堆栈中的下一个代码块就会立即运行。

例子

当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
drive [forward v] for (35) [inches v] ▶
[右 v] 转 (90) 度 ▶
spin [ArmMotor v] to position (1) [turns v] ▶
drive [forward v] for (40) [inches v] ▶
spin [IntakeMotor v] [outtake v]

停止电机#

停止电机 堆栈块停止选定的电机。

stop [IntakeMotor v]

参数

描述

发动机

要停止的电机:进气电机或臂电机。

例子

当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
drive [forward v] for (35) [inches v] ▶
[右 v] 转 (90) 度 ▶
spin [ArmMotor v] [up v] for (1) [turns v] ▶
drive [forward v] for (40) [inches v] ▶
spin [IntakeMotor v] [outtake v]
等待 (1) 秒
stop [IntakeMotor v]

设置#

设定电机速度#

“设置电机转速”模块用于控制电机的转速。百分比越高,电机转速越快;百分比越低,电机转速越慢。

每个项目开始时,每个电机默认以 50% 的速度旋转。

**注意:**更高的速度会使电机转速更快,但精度可能会降低。更低的速度会使电机转速更慢,但精度可能会更高。

set [IntakeMotor v] velocity to [50] [% v]

参数

描述

发动机

用于设置以下电机速度的电机:进气电机或臂电机。

速度

电机旋转的速度。百分比使用0%到100%之间的整数。

单元

速度单位:%。

例子

当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
drive [forward v] for (35) [inches v] ▶
[右 v] 转 (90) 度 ▶
spin [ArmMotor v] [up v] for (1) [turns v] ▶
drive [forward v] for (40) [inches v] ▶
set [IntakeMotor v] velocity to [100] [% v]
spin [IntakeMotor v] [outtake v]

设置电机超时#

设置电机超时 代码块用于设置电机尝试完成一次运动的超时时间。如果电机无法在规定时间内完成,它将停止尝试并执行代码块堆栈中的下一个代码块。这样可以防止电机卡在某个运动中。

设定 [ArmMotor v] 超时为 [1] 秒

参数

描述

发动机

设置超时时间的电机:IntakeMotor 或 ArmMotor。

时间

电机尝试完成一次运动的秒数。该值可以是整数或小数。

例子

当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
drive [forward v] for (35) [inches v] ▶
[右 v] 转 (90) 度 ▶
set [ArmMotor v] timeout to [2] seconds
spin [ArmMotor v] [up v] for (1) [turns v] ▶
drive [forward v] for (40) [inches v] ▶
spin [IntakeMotor v] [outtake v]

位置#

电机位置#

电机的位置是指它旋转的距离,以度或圈数来衡量。一圈等于360度。电机位置报告模块会报告电机的当前位置。

项目开始时,电机位置设置为 0 度。如果电机正向旋转一周,则位置为 360 度或 1 圈。如果电机反向旋转,则位置为负值。

([ArmMotor v] position in [degrees v])

参数

描述

发动机

用于报告以下位置的电机:进气电机或臂电机。

单元

报告电机位置的单位:度或圈。

例子

当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
drive [forward v] for (35) [inches v] ▶
[右 v] 转 (90) 度 ▶
while <([ArmMotor v] position in [degrees v]) [math_less_than v] [360]>
[ArmMotor v] [向上 v] 转
wait (0.002) seconds
结束
[ArmMotor v] 停止
drive [forward v] for (40) [inches v] ▶
spin [IntakeMotor v] [outtake v]

设置电机位置#

电机的位置是指它旋转的距离,以度或圈数来衡量。一圈等于360度。设置电机位置堆栈块会将电机的当前位置更改为新值。

例如,如果电机旋转了 180 度,将位置设置为 0 度会将该位置从 180 度重置为 0 度。然后,电机可以根据这个新值旋转到其他位置。

设定 [ArmMotor v] 转位至 (0) [度 v]

参数

描述

发动机

用于设置以下位置的电机:进气电机或臂电机。

位置

要设置的位置值。度数使用整数。转数可以使用整数或小数。

单元

位置单位:度或圈。

例子

当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
drive [forward v] for (35) [inches v] ▶
[右 v] 转 (90) 度 ▶
设定 [ArmMotor v] 转位至 [0] [度 v]
spin [ArmMotor v] [up v] for (1) [turns v] ▶
drive [forward v] for (40) [inches v] ▶
spin [IntakeMotor v] [outtake 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) 度 ▶
drive [forward v] for (35) [inches v] ▶
[右 v] 转 (90) 度 ▶
spin [ArmMotor v] to position (1) [turns v] ◀ and don't wait
wait until <[ArmMotor v] is done?>
drive [forward v] for (40) [inches v] ▶
spin [IntakeMotor v] [outtake v]

电机正在旋转#

“电机是否旋转”布尔模块用于报告电机是否正在旋转。这可以根据电机的运动状态来控制其他行为的执行时间。

  • 正确——电机正在旋转。

  • 错误 — 电机没有转动。

该模块与以下具有and don’t wait参数的运动模块配合使用:spin motor for 和 spin motor to position。

<[IntakeMotor v] is spinning?>

参数

描述

发动机

要报告电机是否正在旋转的参数:IntakeMotor 或 ArmMotor。

例子

当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
drive [forward v] for (35) [inches v] ▶
[右 v] 转 (90) 度 ▶
spin [ArmMotor v] [up v] for (1) [turns v] ▶
drive [forward v] for (40) [inches v] ▶
spin [IntakeMotor v] [outtake v]
wait until <not <[IntakeMotor v] is spinning?>>
stop [IntakeMotor v]

电机速度#

电机速度报告模块以百分比形式报告电机的旋转速度,范围从 -100% 到 100%。

([IntakeMotor v] velocity in [% v] :: custom-motion)

参数

描述

发动机

要报告以下电机的速度:IntakeMotor 或 ArmMotor。

单元

电机速度的报告单位:%。

例子

当开始
[Score a Bean Bag in a Blue Goal.]
[左 v] 转 (90) 度 ▶
drive [forward v] for (35) [inches v] ▶
[右 v] 转 (90) 度 ▶
spin [ArmMotor v] [up v] for (1) [turns v] ▶
drive [forward v] for (40) [inches v] ▶
spin [IntakeMotor v] [outtake v]
等待 [0.2] 秒
print ([IntakeMotor v] velocity in [% v] :: custom-motion) ▶

人工智能视觉#

行动#

获取对象数据#

获取对象数据 模块将来自 IQ AI 视觉传感器帧的数据过滤为单个签名——传感器可以识别的事物的保存描述,例如场上的游戏元素。

数据集按宽度从大到小排序存储对象,索引从 0 开始。可以使用 [**对象属性**](#object-property) 代码块访问每个对象的属性。如果没有检测到匹配的对象,则返回空数据集。

获取对象数据堆栈块。#
get [AI Classifications v] data from [AIVision v]

范围

描述

签名

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

  • AI
  • — 检测红色豆袋、蓝色豆
和黄色豆袋。3
  • AprilTags — 检测球门侧面的 AprilTag ID。5
  • 例子

    当开始 :: hat events
    [Drop the preloaded Bean Bag.]
    spin [IntakeMotor v] [outtake v] for (180) [degrees v] ▶
    [左 v] 转 (90) 度 ▶
    [Find and face the nearest red Bean Bag.]
    set turn velocity to (30) [% v]
    set [object_counter v] to [1]
    get [AI Classifications v] data from [AIVision v]
    repeat ([AIVision v] object count)
    set [AIVision v] object item to (object_counter)
    if <[AIVision v] object is [RedBeanBag v]?> then
    if <([AIVision v] object [centerX v]) < (140)> then
    [左 v] 转
    else if <([AIVision v] object [centerX v]) > (180)> then
    [右 v] 转
    否则
    驱动停止
    结束
    退出循环
    结束
    change [object_counter v] by [1]
    结束
    

    设置#

    设置对象项#

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

    设置对象项堆栈块。#
    set [AIVision v] object item to [1]
    

    参数

    描述

    物品

    要使用的数据集中的项目编号。

    例子

    当开始 :: hat events
    [Drop the preloaded Bean Bag.]
    spin [IntakeMotor v] [outtake v] for (180) [degrees v] ▶
    [左 v] 转 (90) 度 ▶
    [Find the index of the nearest red Bean Bag.]
    set [object_counter v] to [1]
    get [AI Classifications v] data from [AIVision v]
    repeat ([AIVision v] object count)
    set [AIVision v] object item to (object_counter)
    if <[AIVision v] object is [RedBeanBag v]?> then
    print (join [Nearest Red Bean Bag is ] (object_counter)) ▶
    退出循环
    否则
    change [object_counter v] by [1]
    结束
    结束
    

    价值观#

    对象存在#

    对象存在 代码块返回一个布尔值,指示是否在数据集中检测到任何对象。

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

    • 错误 - 该数据集不包含任何检测到的对象。

    AI Vision 对象存在布尔块。#
    <[AIVision v] object exists?>
    

    参数

    描述

    此代码块没有参数。

    例子

    当开始 :: hat events
    [Drop the preloaded Bean Bag.]
    spin [IntakeMotor v] [outtake v] for (180) [degrees v] ▶
    [左 v] 转 (90) 度 ▶
    [Turn until a Bean Bag is detected.]
    set turn velocity to (30) [% v]
    [右 v] 转
    repeat until <[AIVision v] object exists?>
    get [AI Classifications v] data from [AIVision v]
    结束
    驱动停止
    

    对象是#

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

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

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

    该对象是布尔块。#
    <[AIVision v] object is [RedBeanBag v]?>
    

    范围

    描述

    目的

    要将该物品与以下哪个对象进行比较:RedBeanBag、BlueBeanBag 或 YellowBeanBag。

    例子

    当开始 :: hat events
    [Drop the preloaded Bean Bag.]
    spin [IntakeMotor v] [outtake v] for (180) [degrees v] ▶
    [左 v] 转 (90) 度 ▶
    [Find the index of the nearest red Bean Bag.]
    set [object_counter v] to [1]
    get [AI Classifications v] data from [AIVision v]
    repeat ([AIVision v] object count)
    set [AIVision v] object item to (object_counter)
    if <[AIVision v] object is [RedBeanBag v]?> then
    print (join [Nearest Red Bean Bag is ] (object_counter)) ▶
    退出循环
    否则
    change [object_counter v] by [1]
    结束
    结束
    

    对象是 AprilTag#

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

    • 正确 - 检测到的对象是具有给定 ID 的 AprilTag。

    • 错误 - 检测到的对象不是具有给定 ID 的 AprilTag。

    该对象是 AprilTag 布尔块。#
    <[AIVision v] object is AprilTag [0] ?>
    

    范围

    描述

    AprilTag ID

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

    例子

    当开始 :: hat events
    [Stop when you see the Red Goal!]
    set turn velocity to (30) [% v]
    [右 v] 转
    repeat until <[AIVision v] object is AprilTag [1] ?>
    get [AprilTags v] data from [AIVision v]
    结束
    驱动停止
    print [Found the Red Goal!] ▶
    

    对象计数#

    对象计数 模块返回数据集中检测到的对象数量,以整数形式表示。

    对象计数报告器模块。#
    ([AIVision v] object count)
    

    参数

    描述

    此代码块没有参数。

    例子

    当开始 :: hat events
    [Drop the preloaded Bean Bag.]
    spin [IntakeMotor v] [outtake v] for (180) [degrees v] ▶
    [左 v] 转 (90) 度 ▶
    [Print how many Bean Bags are detected.]
    get [AI Classifications v] data from [AIVision v]
    print ([AIVision v] object count) ▶
    

    对象属性#

    使用 get object data 块存储的每个对象都包含六个属性。

    AI视觉对象属性报告器模块。#
    ([AIVision v] object [width v])
    

    所有属性值均描述了在调用“获取对象数据”模块时,IQ AI 视觉传感器视野中检测到的对象的位置和大小。这些值以像素为单位,基于传感器的 320 x 240 像素分辨率。

    范围

    描述

    财产

    要使用检测到的对象的哪个属性:宽度、高度、centerX、centerY、originX 或 originY。

    宽度#

    width 属性以像素为单位报告检测到的对象宽度,数值为 1 到 320 之间的整数。

    已选择宽度的 AI Vision 对象属性报告块。#
    ([AIVision v] object [width v])
    

    例子

    当开始
    [Drop the preloaded Bean Bag.]
    spin [IntakeMotor v] [outtake v] for (180) [degrees v] ▶
    [左 v] 转 (90) 度 ▶
    [Approach the Bean Bag, then pick it up.]
    set drive velocity to (30) [% v]
    永久循环
    get [AI Classifications v] data from [AIVision v]
    if <[AIVision v] object exists?> then
    set [AIVision v] object item to [1]
    if <[AIVision v] object is [RedBeanBag v]?> then
    if <([AIVision v] object [width v]) > (180)> then
    drive [forward v] for [50] [mm v] ▶
    spin [IntakeMotor v] [intake v] for [90] [degrees v] ▶
    退出循环
    否则
    驱动 [向前 v]
    结束
    结束
    结束
    结束
    
    高度#

    height 属性以像素为单位报告检测到的对象的高度,数值为 1 到 240 之间的整数。

    已选择高度的 AI Vision 对象属性报告块。#
    ([AIVision v] object [height v])
    

    例子

    当开始
    [Drop the preloaded Bean Bag.]
    spin [IntakeMotor v] [outtake v] for (180) [degrees v] ▶
    [左 v] 转 (90) 度 ▶
    [Approach the Bean Bag, then pick it up.]
    set drive velocity to (30) [% v]
    永久循环
    get [AI Classifications v] data from [AIVision v]
    if <[AIVision v] object exists?> then
    set [AIVision v] object item to [1]
    if <[AIVision v] object is [RedBeanBag v]?> then
    if <([AIVision v] object [height v]) > (100)> then
    drive [forward v] for [50] [mm v] ▶
    spin [IntakeMotor v] [intake v] for [90] [degrees v] ▶
    退出循环
    否则
    驱动 [向前 v]
    结束
    结束
    结束
    结束
    
    centerX#

    centerX 属性以像素为单位报告检测到的对象中心的 x 坐标,数值为 0 到 320 之间的整数。

    选中 centerX 的 AI Vision 对象属性报告器模块。#
    ([AIVision v] object [centerX v])
    

    例子

    当开始
    [Drop the preloaded Bean Bag.]
    spin [IntakeMotor v] [outtake v] for (180) [degrees v] ▶
    [左 v] 转 (90) 度 ▶
    [Steer to keep the Bean Bag centered while approaching.]
    set turn velocity to (30) [% v]
    set drive velocity to (30) [% v]
    永久循环
    get [AI Classifications v] data from [AIVision v]
    if <[AIVision v] object exists?> then
    set [AIVision v] object item to [1]
    if <[AIVision v] object is [RedBeanBag v]?> then
    if <([AIVision v] object [centerX v]) < (140)> then
    turn [left v] for (5) degrees ▶
    否则
    drive [forward v] for (150) [mm v] ▶
    spin [IntakeMotor v] [intake v]
    退出循环
    结束
    结束
    结束
    结束
    
    中心Y#

    centerY 属性以像素为单位报告检测到的对象中心的 y 坐标,数值为 0 到 240 之间的整数。

    选中 centerY 的 AI Vision 对象属性报告器模块。#
    ([AIVision v] object [centerY v])
    

    例子

    当开始
    [Drop the preloaded Bean Bag.]
    spin [IntakeMotor v] [outtake v] for (180) [degrees v] ▶
    [左 v] 转 (90) 度 ▶
    [Print the y-position of the Bean Bag.]
    get [AI Classifications v] data from [AIVision v]
    if <[AIVision v] object exists?> then
    set [AIVision v] object item to [1]
    if <[AIVision v] object is [RedBeanBag v]?> then
    print ([AIVision v] object [centerY v]) ▶
    结束
    结束
    
    originX#

    originX 属性以像素为单位报告检测到的对象边界框左上角的 x 坐标,数值为 0 到 320 之间的整数。

    已选择 originX 的 AI Vision 对象属性报告器块。#
    ([AIVision v] object [originX v])
    

    例子

    当开始
    [Drop the preloaded Bean Bag.]
    spin [IntakeMotor v] [outtake v] for (180) [degrees v] ▶
    [左 v] 转 (90) 度 ▶
    [Steer to keep the left edge centered.]
    set turn velocity to (30) [% v]
    set drive velocity to (30) [% v]
    永久循环
    get [AI Classifications v] data from [AIVision v]
    if <[AIVision v] object exists?> then
    set [AIVision v] object item to [1]
    if <[AIVision v] object is [RedBeanBag v]?> then
    if <([AIVision v] object [originX v]) < (100)> then
    turn [left v] for (5) degrees ▶
    否则
    drive [forward v] for (150) [mm v] ▶
    spin [IntakeMotor v] [intake v]
    退出循环
    结束
    结束
    结束
    结束
    
    originY#

    originY 属性以像素为单位报告检测到的对象边界框左上角的 y 坐标,数值为 0 到 240 之间的整数。

    已选择 originY 的 AI Vision 对象属性报告器块。#
    ([AIVision v] object [originY v])
    

    例子

    当开始
    [Drop the preloaded Bean Bag.]
    spin [IntakeMotor v] [outtake v] for (180) [degrees v] ▶
    [左 v] 转 (90) 度 ▶
    [Print the y-position of the Bean Bag's top edge.]
    get [AI Classifications v] data from [AIVision v]
    if <[AIVision v] object exists?> then
    set [AIVision v] object item to [1]
    if <[AIVision v] object is [RedBeanBag v]?> then
    print ([AIVision v] object [originY v]) ▶
    结束
    结束