Пользовательский код контроллера в VEXcode EXP

Использование контроллера может облегчить управление и перемещение робота для выполнения задачи. Однако существуют ограничения на использование программы Drive, и в зависимости от конструкции вашего робота или поставленной задачи вам могут потребоваться разные элементы управления. Программирование контроллера позволяет оптимизировать контроллер, чтобы он лучше соответствовал вашему роботу и выполняемой задаче. Существует несколько способов кодирования контроллера в VEXcode EXP. У каждого есть свои преимущества и ограничения, а некоторые методы лучше подходят для определенных ситуаций в зависимости от желаемого результата.

В этой статье вы познакомитесь с тремя различными вариантами индивидуального кодирования контроллера в VEXcode EXP. Каждый метод будет описан с описанием его преимуществ, ограничений и примером использования, который поможет вам при выборе метода. Для целей этой статьи все показанные примеры кода были созданы для Clawbot. Однако те же концепции можно применить к многочисленным другим сборкам, найденным на builds.vex.com, а также к пользовательским сборкам.

Вариант 1: Назначение кнопок в конфигурации устройства

Этот вариант отлично подходит, если вы используете стандартную сборку, например BaseBot или Clawbot, и хотите быстро приступить к работе.

Эта опция позволяет назначать двигатели, трансмиссию или группы двигателей кнопкам контроллера в конфигурации устройства. Для получения дополнительной информации о назначении кнопок контроллеру в конфигурации устройства просмотрите эту статью.

Меню устройств VEXcode EXP с показанными параметрами контроллера. На схеме управления кнопками показано, что два джойстика управляют роботом по принципу танкового привода. Кнопки «Вверх» и «Вниз» управляют ArmMotorGroup, а кнопки оси R управляют ClawMotor.

Краткое описание варианта 1: назначение кнопок в конфигурации устройства

Преимущества

Ограничения

Пример ситуации

  • Быстрая настройка без необходимости кодирования
  • Самый простой метод
  • Легко регулируется
  • Можно назначать кнопкам отдельные двигатели, стандартную трансмиссию и группы двигателей.
  • Назначение кнопок ограничено количеством кнопок на контроллере.
  • Трансмиссия не может содержать более 4 двигателей и не может быть настроена индивидуально (поддерживается только стандартный привод, а не привод H, голономный или другой специальный привод).
  • Управление стандартной сборкой, такой как BaseBot, Clawbot, или простой модификацией этих стандартных сборок. Например, BaseBot с прикрепленным спереди воздухозаборником, управляемым моторной группой.
  • Быстрое управление тем, какие кнопки соответствуют различным поведениям робота, без особого программирования.

Вариант 2: использование бесконечного цикла

Если вы используете пользовательскую сборку вместо стандартной или хотите иметь больше возможностей настройки в своем контроллере, этот вариант подойдет. Использование цикла Forever — отличное введение в создание собственного кода для вашего контроллера.

Эта опция помещает все условия для контроллера и связанных с ним кнопок в цикл Forever. Это обеспечивает большую гибкость, особенно при разработке пользовательских сборок, но также требует некоторого опыта программирования. Однако при использовании этого варианта следует учитывать продолжительность и сложность вашего проекта. Чем больше условий будет добавлено, тем длиннее может стать стек кода. Это означает, что несколько блоков должны выполняться по порядку, а когда блоков много, это может замедлить выполнение проекта. Медленное выполнение проекта может привести к задержке между нажатием кнопок контроллера и наблюдением за поведением робота.

Конкретный пример, показанный ниже, является одним из способов использования цикла Forever с роботом индивидуальной конструкции (например, роботом со специальной трансмиссией) для управления роботом и манипулирования когтем и рукой для взаимодействия с объектами.

Открыто рабочее пространство VEXcode EXP с проектом блоков Option 2. Проект имеет стек блоков и настроенные устройства. Меню «Устройства» открывается сбоку и содержит следующие устройства: ArmMotor на порту 3, ClawMotor на порту 4, Controller, LeftMotor на порту 6 и RightMotor на порту 10. Наконец, имеется стек блоков для обработки входных данных контроллера. Стек показывает: При запуске установите остановку ArmMotor в режим удержания и установите остановку ClawMotor в режим удержания. Остальная часть стека содержится в бесконечном цикле. Он читается как Forever, установите скорость LeftMotor на позицию Controller 3 %, вращайте LeftMotor вперед, установите скорость RightMotor на позицию Controller 2 % и вращайте RightMotor вперед. Далее, если нажата кнопка «Вверх» на контроллере, вращайте ArmMotor вверх, в противном случае, если нажата кнопка «Вниз» на контроллере, вращайте ArmMotor вниз, в противном случае остановите ArmMotor. Наконец, если нажат контроллер A, то вращающийся ClawMotor открывается, в противном случае, если нажат контроллер B, то вращающийся ClawMotor закрывается, в противном случае останавливается.

Загрузите файл проекта VEXcode EXP «Вариант 2» >

Пояснение к варианту 2 кода.

Часть кода

Объяснение

Крупный план стопки блоков в проекте Вариант 2 VEXcode EXP. Выделены два блока, которые находятся за пределами цикла Forever стека. Они читают установку остановки ArmMotor в режим удержания и установку остановки ClawMotor в режим удержания.

Для этого примера кода использовался Clawbot. Когда кнопки на контроллере используются для подъема и опускания рычага, как только кнопка будет отпущена, под действием силы тяжести рычаг упадет обратно вниз. Установка руки и захвата в положение «удержание» гарантирует, что и рука, и захват останутся на месте даже после того, как кнопки на контроллере будут отпущены.

Крупный план стопки блоков в проекте Вариант 2 VEXcode EXP. Внутри бесконечного цикла стека выделены четыре блока. Они считывают Forever, устанавливают скорость LeftMotor на позицию Controller 3 %, вращают LeftMotor вперед, устанавливают скорость RightMotor на позицию Controller 2 % и вращают RightMotor вперед. Схема контроллера EXP с обозначенными кнопками и джойстиками. Вид спереди контроллера. Оси левого джойстика обозначены как 3 и 4. Центральная кнопка левого джойстика обозначена L3. Две круглые кнопки под левым джойстиком обозначены как «Вверх» и «Вниз». Оси правого джойстика обозначены как 1 и 2. Центральная кнопка правого джойстика обозначена как R3. Две круглые кнопки под правым джойстиком обозначены A и B.

Для этого примера кода использовался Clawbot. Когда кнопки на контроллере используются для подъема и опускания рычага, как только кнопка будет отпущена, под действием силы тяжести рычаг упадет обратно вниз. Установка руки и захвата в положение «удержание» гарантирует, что и рука, и захват останутся на месте даже после того, как кнопки на контроллере будут отпущены.

Цикл Forever используется для постоянной проверки того, какие кнопки нажимаются на контроллере.

Блоки [Установить скорость двигателя] используются для установки скорости двигателя в соответствии с текущим положением контроллера по осям 2 и 3. Это эквивалентно включению автомобиля в движение. Это не обязательно заставляет машину двигаться, а просто приводит ее в движение.

Каждая ось джойстика возвращает значение от -100 до +100 и возвращает нулевое значение при центрировании. Это означает, что оси джойстика при нажатии соответствуют от -100% до 100%. Чем дальше к 100 или -100 сдвинуты оси, тем быстрее будет вращаться двигатель.

Затем блок [Spin] используется для фактического перемещения двигателя. Это эквивалентно нажатию газа на автомобиле после того, как направление было задано. Это позволяет управлять каждым двигателем по одной из четырех осей контроллера.

Крупный план стопки блоков в проекте Вариант 2 VEXcode EXP. Блок if, else if, else выделен внутри цикла Forever стека. Он считывает, если нажата кнопка «Контроллер вверх», то вращайте ArmMotor вверх, в противном случае, если нажата кнопка «Контроллер вниз», то вращайте ArmMotor вниз, в противном случае останавливайте ArmMotor.

Для этого примера кода использовался Clawbot. Когда кнопки на контроллере используются для подъема и опускания рычага, как только кнопка будет отпущена, под действием силы тяжести рычаг упадет обратно вниз. Установка руки и захвата в положение «удержание» гарантирует, что и рука, и захват останутся на месте даже после того, как кнопки на контроллере будут отпущены.

Блок [If then else if then else] используется для сопоставления определенного поведения с кнопками, нажимаемыми или отпускаемыми на контроллере. В этом разделе кода устанавливаются условия, если нажаты кнопки «Вверх» или «Вниз». Если да, то произойдет определенное поведение, например, поднятие и опускание руки. Существует также другая часть условия: если ни одна кнопка не нажата, рука прекращает движение.

Обратите внимание, что следующий раздел кода проекта Claw следует тому же объяснению.

Краткое описание варианта 2: использование бесконечного цикла

Преимущества

Ограничения

Пример ситуации

  • Возможна установка нестандартных сборок, особенно трансмиссий с более чем 4 двигателями.
  • Можно назначить несколько вариантов поведения одной кнопке.
  • Можно назначать поведение различным осям контроллера (в отличие от единственных вариантов «Левая аркада», «Правая аркада», «Разделенная аркада» и «Движение танка» в конфигурации устройства).
  • Требуются некоторые знания программирования (условия, циклы и знание кнопок/джойстиков на контроллере).
  • Возможно замедление выполнения проекта или задержка времени отклика кнопок. Поскольку все команды содержатся в одном цикле Forever, выполнение кода может выполняться медленно в зависимости от установленных условий и длины кода.
  • Использование контроллера с роботом, созданным по индивидуальному заказу, особенно с нестандартной трансмиссией.
  • Если вы хотите назначить несколько вариантов поведения одной кнопке. Например, при нажатии кнопки «Вверх» «Коготь» может раскрыться, двигаться вперед, а затем сомкнуться вокруг объекта.

Вариант 3: Использование событий

Если вам нужны широкие возможности настройки вашего контроллера, использование событий — лучший вариант для вас. Одно нажатие кнопки может активировать несколько вариантов поведения робота, например, нажатие кнопки открывает захват, поднимает руку и движется вперед на заданное расстояние. Попытка закодировать несколько вариантов поведения для каждой кнопки в цикле Forever приведет к резкому замедлению выполнения проекта — использование событий позволяет сделать это более эффективно.

Этот вариант использует события для разделения потока проекта. Это похоже на использование цикла Forever, но позволяет сделать код более организованным, благодаря чему время отклика кнопки сокращается. Более быстрое время отклика означает, что вы не увидите задержки между нажатием кнопок контроллера и наблюдением за поведением робота. В этом примере показано то же поведение, что и в предыдущем проекте, но с использованием событий вместо цикла Forever.

Открыто рабочее пространство VEXcode EXP с проектом блоков Option 3. Проект состоит из 11 небольших стеков блоков и настроенных устройств. Меню «Устройства» открывается сбоку и содержит следующие устройства: ArmMotor на порту 3, ClawMotor на порту 4, Controller, LeftMotor на порту 6 и RightMotor на порту 10. Наконец, имеются 11 небольших стеков блоков, которые обрабатывают входные данные Контроллера. В первом стеке указано: При запуске установите для остановки ArmMotor режим удержания, а затем установите для остановки ClawMotor режим удержания. Во втором стеке указано: «Когда изменяется ось контроллера 3, установите скорость левого двигателя на значение % положения контроллера 3, а затем вращайте левый двигатель вперед». Третий стек гласит: «Когда изменяется ось контроллера 2, установите скорость RightMotor на значение % положения контроллера 2, а затем вращайте RightMotor вперед». Четвертый стек гласит: При нажатии кнопки контроллера «Вверх» вращать ArmMotor вверх. Пятый стек гласит: «При отпускании кнопки контроллера «Вверх» остановить ArmMotor». Шестой стек читается так: При нажатии кнопки контроллера «Вниз» вращать ArmMotor вниз. Седьмой стек гласит: При отпускании кнопки контроллера остановить ArmMotor. Восьмой стек гласит: При нажатии кнопки контроллера A вращающийся ClawMotor открывается. Девятый стек гласит: «При отпускании кнопки контроллера A остановите ClawMotor». Десятый стек гласит: При нажатии кнопки контроллера B вращающийся ClawMotor закрывается. Одиннадцатый и последний стек гласит: При отпускании кнопки контроллера B остановите ClawMotor.

Загрузите файл проекта VEXcode EXP «Вариант 3» >

Пояснение к варианту 3 кода.

Часть кода

Объяснение

Крупный план одной стопки блоков в проекте Вариант 3 VEXcode EXP. Стек показывает: При запуске установите остановку ArmMotor в режим удержания, а затем установите остановку ClawMotor в режим удержания.

Для этого примера кода использовался Clawbot. Когда кнопки на контроллере используются для подъема и опускания рычага, как только кнопка будет отпущена, под действием силы тяжести рычаг упадет обратно вниз. Установка руки и захвата в положение «удержание» гарантирует, что и рука, и захват останутся на месте даже после того, как кнопки на контроллере будут отпущены.

Крупный план двух стопок блоков в проекте Вариант 3 VEXcode EXP. Первый стек читается так: «Когда изменяется ось контроллера 3, установите скорость левого двигателя на значение % положения контроллера 3, а затем вращайте левый двигатель вперед». Во втором стеке указано: «Когда изменяется ось контроллера 2, установите скорость RightMotor на значение % положения контроллера 2, а затем вращайте RightMotor вперед». Схема контроллера EXP с обозначенными кнопками и джойстиками. Вид спереди контроллера. Оси левого джойстика обозначены как 3 и 4. Центральная кнопка левого джойстика обозначена L3. Две круглые кнопки под левым джойстиком обозначены как «Вверх» и «Вниз». Оси правого джойстика обозначены как 1 и 2. Центральная кнопка правого джойстика обозначена как R3. Две круглые кнопки под правым джойстиком обозначены A и B.

Для этого примера кода использовался Clawbot. Когда кнопки на контроллере используются для подъема и опускания рычага, как только кнопка будет отпущена, под действием силы тяжести рычаг упадет обратно вниз. Установка руки и захвата в положение «удержание» гарантирует, что и рука, и захват останутся на месте даже после того, как кнопки на контроллере будут отпущены.

{When controller axis} Блоки событий используются для запуска определенного поведения при изменении одной из четырех осей контроллера с помощью джойстиков.

Блоки [Установить скорость двигателя] используются для установки скорости двигателя в соответствии с текущим положением контроллера по осям A и D. Это эквивалентно включению автомобиля в движение. Это не обязательно заставляет машину двигаться, а просто приводит ее в движение.

Каждая ось джойстика возвращает значение от -100 до +100 и возвращает нулевое значение при центрировании. Это означает, что оси джойстика при нажатии соответствуют от -100% до 100%. Чем дальше к 100 или -100 сдвинуты оси, тем быстрее будет вращаться двигатель.

Затем блок [Spin] используется для фактического перемещения двигателя. Это эквивалентно нажатию газа на автомобиле после того, как направление было задано. Это позволяет управлять каждым двигателем по одной из четырех осей контроллера.

Крупный план четырех стопок блоков в проекте Вариант 3 VEXcode EXP. Первый стек гласит: При нажатии кнопки контроллера «Вверх» вращать ArmMotor вверх. Во втором стеке написано: «При отпускании кнопки контроллера «Вверх» остановить ArmMotor». Третий стек гласит: При нажатии кнопки контроллера «Вниз» вращать ArmMotor вниз. Четвертый стек гласит: При отпускании кнопки контроллера остановить ArmMotor.

Для этого примера кода использовался Clawbot. Когда кнопки на контроллере используются для подъема и опускания рычага, как только кнопка будет отпущена, под действием силы тяжести рычаг упадет обратно вниз. Установка руки и захвата в положение «удержание» гарантирует, что и рука, и захват останутся на месте даже после того, как кнопки на контроллере будут отпущены.

{When controller axis} Блоки событий используются для сопоставления определенного поведения с кнопками, нажимаемыми или отпускаемыми на контроллере. В этом разделе кода устанавливаются условия, если нажаты кнопки «Вверх» или «Вниз». Если да, то произойдет определенное поведение, например, поднятие, опускание или остановка руки.

Обратите внимание, что последний раздел кода проекта Claw следует тому же объяснению.

Краткое описание варианта 3: использование событий

Преимущества

Ограничения

Пример ситуации

  • Возможна установка нестандартных сборок, особенно трансмиссий с более чем 4 двигателями.
  • Можно назначить несколько вариантов поведения одной кнопке.
  • Можно назначать поведение различным осям контроллера (в отличие от единственных вариантов «Левая аркада», «Правая аркада», «Разделенная аркада» и «Движение танка» в конфигурации устройства)
  • Более быстрое выполнение кода и, следовательно, более быстрое реагирование кнопок (поскольку каждое условие вызывается отдельно, а не встроено в один стек кода)
  • Требует максимальных знаний в области кодирования параметров (условия, циклы, события и знание кнопок/джойстиков на контроллере).
  • Использование контроллера с роботом, созданным по индивидуальному заказу, особенно с нестандартной трансмиссией.
  • Если вы хотите назначить несколько вариантов поведения одной кнопке без задержек. Например, при нажатии кнопки «Вверх» «Коготь» может раскрыться, двигаться вперед, а затем сомкнуться вокруг объекта.

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

Last Updated: