VEXcode IQ 中的自定义控制器代码

使用控制器可以更轻松地驱动和移动机器人来完成任务。 但是,使用 Drive 程序存在限制,并且根据您的机器人构造或手头的任务,您可能需要不同的控制。 对控制器进行编码可以让您优化控制器,使其更好地适合您的机器人和手头的任务。 在 VEXcode IQ 中对控制器进行编码的方法有多种。 每种方法都有其优点和局限性,有些方法更适合某些情况,具体取决于所需的结果。

本文将引导您了解在 VEXcode IQ 中自定义控制器编码的三种不同选项。 将描述每种方法及其优点、局限性和示例用例,以帮助指导您选择方法。 出于本文的目的,显示的所有代码示例都是为 Clawbot 创建的。 然而,相同的概念可以应用于 builds.vex.com上找到的许多其他构建以及自定义构建。

选项 1:在设备配置中分配按钮

当您使用标准构建(例如 BaseBot 或 Clawbot)并且希望快速启动并运行时,此选项非常有用。

此选项允许您将电机、传动系统或电机组分配给设备配置中控制器上的按钮。 有关如何在设备配置中将按钮分配给控制器的更多信息, 请参阅本文

VEX IQ 控制器

选项 1 的摘要:在设备配置中分配按钮

优点

局限性

示例情况

  • 快速设置,无需编码
  • 最简单的方法
  • 轻松调节
  • 可以将单个电机、标准传动系统和电机组分配给按钮
  • 按钮分配仅限于控制器上的按钮数量
  • 传动系统不能超过 4 个电机或可定制(仅支持标准驱动器,不支持 H 驱动器、holonomic 或其他定制传动系统)
  • 操作标准构建,例如 BaseBot、Clawbot,或对这些标准构建进行简单修改。 例如,一个 BaseBot 的进气口连接在前端,由电机组控制。
  • 无需太多编码即可快速操作与机器人上的不同行为相对应的按钮

选项 2:使用永久循环

如果您使用自定义构建而不是标准构建,或者希望能够在控制器中进行更多自定义,那么此选项是一个不错的选择。 使用 Forever 循环是为控制器创建自定义代码的一个很好的介绍。

此选项将控制器及其关联按钮的所有条件置于永远循环中。 这提供了更大的灵活性,特别是对于定制构建设计,但也需要一些编码经验。 然而,使用此选项时的一个考虑因素是项目的长度和复杂性。 添加的条件越多,代码堆栈可能会变得越长。 这意味着多个块必须按顺序执行,当块很多时,这会减慢项目执行速度。 较慢的项目执行可能会在按下控制器按钮和查看机器人行为之间产生延迟。

下面显示的具体示例是您可以将 Forever 循环与自定义设计机器人(例如具有自定义传动系统的机器人)结合使用来驱动机器人并操纵爪子和手臂以便与对象交互的一种方法。

使用永远循环的图像

下载“选项2”VEXcode IQ(第2代)项目文件 >

:如果使用第一代 Clawbot,则需要在设备配置中反转臂电机才能按上述项目中的预期工作。

选项 2 代码的解释。

代码片段

解释

将 ArmMotor 停止设置为保持并将 ClawMotor 停止设置为保持

此代码示例使用了 Clawbot。 当使用控制器上的按钮来升高和降低手臂时,一旦释放按钮,由于重力,手臂就会落回下方。 将手臂和爪子都设置为“保持”将确保即使在释放控制器上的按钮后,手臂和爪子也将保持在原位。

设置电机的速度和转速 带按钮图的 VEX IQ 控制器

此代码示例使用了 Clawbot。 当使用控制器上的按钮来升高和降低手臂时,一旦释放按钮,由于重力,手臂就会落回下方。 将手臂和爪子都设置为“保持”将确保即使在释放控制器上的按钮后,手臂和爪子也将保持在原位。

使用 Forever 循环来连续检查控制器上的哪些按钮被按下。

[设置电机速度] 块用于将电机速度设置为当前控制器沿 A 轴和 D 轴的位置。 这相当于将汽车设置为行驶状态。 这并不一定会让汽车移动,它只是让它移动。

每个操纵杆轴返回 -100 到 +100 之间的值,居中时返回零值。 这意味着操纵杆轴在按下时等于 -100% 到 100%。 轴被推向 100 或 -100 越远,电机旋转得越快。

然后使用 [Spin​​] 块来实际移动电机。 这相当于一旦设定了方向就给汽车踩油门。 这允许每个电机由四个控制器轴之一控制。

按下控制器 E Up 时的条件语句

此代码示例使用了 Clawbot。 当使用控制器上的按钮来升高和降低手臂时,一旦释放按钮,由于重力,手臂就会落回下方。 将手臂和爪子都设置为“保持”将确保即使在释放控制器上的按钮后,手臂和爪子也将保持在原位。

[If then else if then else] 块用于将某些行为映射到控制器上按下或释放的按钮。 在这部分代码中,设置的条件是是否按下 E Up 或 E Down 按钮。 如果是这样,就会发生某些行为,例如手臂抬起和放下。 还有条件的 else 部分,如果没有按下任何按钮,则手臂将停止移动。

请注意,Claw 项目中的以下代码部分遵循相同的解释。

选项 2 的总结:使用永久循环

优点

局限性

示例情况

  • 可适应定制构建,尤其是具有 4 个以上电机的传动系统
  • 可以将多种行为分配给单个按钮
  • 可以将行为分配给控制器上的不同轴(而不是设备配置中的“左街机”、“右街机”、“分割街机”和“坦克驱动器”的唯一选项)
  • 需要一定的编码知识(条件、循环以及控制器上的按钮/操纵杆的知识)
  • 项目执行速度可能较慢,或按钮响应时间滞后。 由于所有命令都包含在单个 Forever 循环中,因此根据设置的条件和代码长度,代码执行可能会运行缓慢。
  • 将控制器与定制机器人一起使用,尤其是与非标准传动系统一起使用
  • 当想要将多个行为分配给单个按钮时。 例如,当按下 F 向上按钮时,爪子可以张开、向前移动,然后靠近物体。

选项 3:使用事件

如果您想要对控制器进行大量自定义,那么使用事件是您的最佳选择。 一键按下可以触发机器人的多种行为,比如按下按钮打开爪子、抬起手臂、向前行驶设定距离。 尝试在 Forever 循环中为每个按钮编写多个行为会导致项目执行速度显着减慢 - 使用事件可以让您更有效地做到这一点。

此选项使用事件来分解项目流程。 这类似于使用 Forever 循环,但允许代码更有组织性,以便按钮执行具有更快的响应时间。 更快的响应时间意味着您在按下控制器按钮和看到机器人行为之间不会出现延迟。 此示例显示与上一个项目相同的行为,但使用事件而不是永远循环完成。

使用事件而不是永远循环

下载“选项3”VEXcode IQ(第2代)项目文件 >

:如果使用第一代 Clawbot,则需要在设备配置中反转臂电机才能按上述项目中的预期工作。

选项 3 代码的解释。

代码片段

解释

将 ArmMotor 停止设置为保持并将 ClawMotor 停止设置为保持

此代码示例使用了 Clawbot。 当使用控制器上的按钮来升高和降低手臂时,一旦释放按钮,由于重力,手臂就会落回下方。 将手臂和爪子都设置为“保持”将确保即使在释放控制器上的按钮后,手臂和爪子也将保持在原位。

将 LeftMotor 速度设置为控制器 A 位置 % 并向前旋转 leftMotor 带按钮图的 VEX IQ 控制器

此代码示例使用了 Clawbot。 当使用控制器上的按钮来升高和降低手臂时,一旦释放按钮,由于重力,手臂就会落回下方。 将手臂和爪子都设置为“保持”将确保即使在释放控制器上的按钮后,手臂和爪子也将保持在原位。

{When controller axis} 当使用操纵杆更改控制器上的四个轴之一时,事件块用于触发某些行为。

[设置电机速度] 块用于将电机速度设置为当前控制器沿 A 轴和 D 轴的位置。 这相当于将汽车设置为行驶状态。 这并不一定会让汽车移动,它只是让它移动。

每个操纵杆轴返回 -100 到 +100 之间的值,居中时返回零值。 这意味着操纵杆轴在按下时等于 -100% 到 100%。 轴被推向 100 或 -100 越远,电机旋转得越快。

然后使用 [Spin​​] 块来实际移动电机。 这相当于一旦设定了方向就给汽车踩油门。 这允许每个电机由四个控制器轴之一控制。

当使用控制器上的按钮来升高和降低手臂时,一旦释放按钮,由于重力,手臂就会落回下方。

此代码示例使用了 Clawbot。 当使用控制器上的按钮来升高和降低手臂时,一旦释放按钮,由于重力,手臂就会落回下方。 将手臂和爪子都设置为“保持”将确保即使在释放控制器上的按钮后,手臂和爪子也将保持在原位。

{When controller axis} 事件块用于将某些行为映射到控制器上按下或释放的按钮。 在这部分代码中,设置的条件是是否按下 E Up 或 E Down 按钮。 如果是这样,就会发生某些行为,例如手臂抬起、放下或停止。

请注意,Claw 项目中的最后一段代码遵循相同的解释。

选项 3 的总结:使用事件

优点

局限性

示例情况

  • 可适应定制构建,尤其是具有 4 个以上电机的传动系统
  • 可以将多种行为分配给单个按钮
  • 可以将行为分配给控制器上的不同轴(而不是设备配置中的“左街机”、“右街机”、“分割街机”和“坦克驱动器”的唯一选项)
  • 代码执行速度更快,因此按钮响应速度更快(因为每个条件都是单独调用的,而不是嵌入到单个代码堆栈中)
  • 需要最多的选项编码知识(条件、循环、事件以及控制器上的按钮/操纵杆的知识)
  • 如果使用第一代 VEX IQ Brain,由于 Brain 的处理限制,项目中的事件过多可能会导致项目无法运行。
  • 将控制器与定制机器人一起使用,尤其是与非标准传动系统一起使用
  • 当想要将多个行为分配给一个按钮且没有延迟时。 例如,当按下 F 向上按钮时,爪子可以张开、向前移动,然后靠近物体。

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

Last Updated: