使用控制器可以更轻松地驱动和移动机器人来完成任务。 但是,使用 Drive 程序存在限制,并且根据您的机器人构造或手头的任务,您可能需要不同的控制。 对控制器进行编码可以让您优化控制器,使其更好地适合您的机器人和手头的任务。 在 VEXcode EXP 中对控制器进行编码的方法有多种。 每种方法都有其优点和局限性,有些方法更适合某些情况,具体取决于所需的结果。
本文将引导您了解在 VEXcode EXP 中自定义控制器编码的三种不同选项。 将描述每种方法及其优点、局限性和示例用例,以帮助指导您选择方法。 出于本文的目的,显示的所有代码示例都是为 Clawbot 创建的。 然而,相同的概念可以应用于 builds.vex.com上找到的许多其他构建以及自定义构建。
选项 1:在设备配置中分配按钮
当您使用标准构建(例如 BaseBot 或 Clawbot)并且希望快速启动并运行时,此选项非常有用。
此选项允许您将电机、传动系统或电机组分配给设备配置中控制器上的按钮。 有关如何在设备配置中将按钮分配给控制器的更多信息, 请参阅本文。
选项 1 的摘要:在设备配置中分配按钮
优点 |
局限性 |
示例情况 |
|
|
|
选项 2:使用永久循环
如果您使用自定义构建而不是标准构建,或者希望能够在控制器中进行更多自定义,那么此选项是一个不错的选择。 使用 Forever 循环是为控制器创建自定义代码的一个很好的介绍。
此选项将控制器及其关联按钮的所有条件置于永远循环中。 这提供了更大的灵活性,特别是对于定制构建设计,但也需要一些编码经验。 然而,使用此选项时的一个考虑因素是项目的长度和复杂性。 添加的条件越多,代码堆栈可能会变得越长。 这意味着多个块必须按顺序执行,当块很多时,这会减慢项目执行速度。 较慢的项目执行可能会在按下控制器按钮和查看机器人行为之间产生延迟。
下面显示的具体示例是您可以将 Forever 循环与自定义设计机器人(例如具有自定义传动系统的机器人)结合使用来驱动机器人并操纵爪子和手臂以便与对象交互的一种方法。
选项 2 代码的解释。
代码片段 |
解释 |
此代码示例使用了 Clawbot。 当使用控制器上的按钮来升高和降低手臂时,一旦释放按钮,由于重力,手臂就会落回下方。 将手臂和爪子都设置为“保持”将确保即使在释放控制器上的按钮后,手臂和爪子也将保持在原位。 |
|
此代码示例使用了 Clawbot。 当使用控制器上的按钮来升高和降低手臂时,一旦释放按钮,由于重力,手臂就会落回下方。 将手臂和爪子都设置为“保持”将确保即使在释放控制器上的按钮后,手臂和爪子也将保持在原位。 使用 Forever 循环来连续检查控制器上的哪些按钮被按下。 [设置电机速度] 块用于将电机速度设置为当前控制器沿 2 轴和 3 轴的位置。 这相当于将汽车设置为行驶状态。 这并不一定会让汽车移动,它只是让它移动。 每个操纵杆轴返回 -100 到 +100 之间的值,居中时返回零值。 这意味着操纵杆轴在按下时等于 -100% 到 100%。 轴被推向 100 或 -100 越远,电机旋转得越快。 然后使用 [Spin] 块来实际移动电机。 这相当于一旦设定了方向就给汽车踩油门。 这允许每个电机由四个控制器轴之一控制。 |
|
此代码示例使用了 Clawbot。 当使用控制器上的按钮来升高和降低手臂时,一旦释放按钮,由于重力,手臂就会落回下方。 将手臂和爪子都设置为“保持”将确保即使在释放控制器上的按钮后,手臂和爪子也将保持在原位。 [If then else if then else] 块用于将某些行为映射到控制器上按下或释放的按钮。 在这部分代码中,设置的条件是是否按下向上或向下按钮。 如果是这样,就会发生某些行为,例如手臂抬起和放下。 还有条件的 else 部分,如果没有按下任何按钮,则手臂将停止移动。 请注意,Claw 项目中的以下代码部分遵循相同的解释。 |
选项 2 的总结:使用永久循环
优点 |
局限性 |
示例情况 |
|
|
|
选项 3:使用事件
如果您想要对控制器进行大量自定义,那么使用事件是您的最佳选择。 一键按下可以触发机器人的多种行为,比如按下按钮打开爪子、抬起手臂、向前行驶设定距离。 尝试在 Forever 循环中为每个按钮编写多个行为会导致项目执行速度显着减慢 - 使用事件可以让您更有效地做到这一点。
此选项使用事件来分解项目流程。 这类似于使用 Forever 循环,但允许代码更有组织性,以便按钮执行具有更快的响应时间。 更快的响应时间意味着您在按下控制器按钮和看到机器人行为之间不会出现延迟。 此示例显示与上一个项目相同的行为,但使用事件而不是永远循环完成。
选项 3 代码的解释。
代码片段 |
解释 |
此代码示例使用了 Clawbot。 当使用控制器上的按钮来升高和降低手臂时,一旦释放按钮,由于重力,手臂就会落回下方。 将手臂和爪子都设置为“保持”将确保即使在释放控制器上的按钮后,手臂和爪子也将保持在原位。 |
|
此代码示例使用了 Clawbot。 当使用控制器上的按钮来升高和降低手臂时,一旦释放按钮,由于重力,手臂就会落回下方。 将手臂和爪子都设置为“保持”将确保即使在释放控制器上的按钮后,手臂和爪子也将保持在原位。 {When controller axis} 当使用操纵杆更改控制器上的四个轴之一时,事件块用于触发某些行为。 [设置电机速度] 块用于将电机速度设置为当前控制器沿 A 轴和 D 轴的位置。 这相当于将汽车设置为行驶状态。 这并不一定会让汽车移动,它只是让它移动。 每个操纵杆轴返回 -100 到 +100 之间的值,居中时返回零值。 这意味着操纵杆轴在按下时等于 -100% 到 100%。 轴被推向 100 或 -100 越远,电机旋转得越快。 然后使用 [Spin] 块来实际移动电机。 这相当于一旦方向确定后给汽车踩油门。 这允许每个电机由四个控制器轴之一控制。 |
|
此代码示例使用了 Clawbot。 当使用控制器上的按钮来升高和降低手臂时,一旦释放按钮,由于重力,手臂就会落回下方。 将手臂和爪子都设置为“保持”将确保即使在释放控制器上的按钮后,手臂和爪子也将保持在原位。 {When controller axis} 事件块用于将某些行为映射到控制器上按下或释放的按钮。 在这部分代码中,设置的条件是是否按下向上或向下按钮。 如果是这样,就会发生某些行为,例如手臂抬起、放下或停止。 请注意,Claw 项目中的最后一段代码遵循相同的解释。 |
选项 3 的总结:使用事件
优点 |
局限性 |
示例情况 |
|
|
|