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

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

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

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

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

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

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

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

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

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

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

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

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

В рабочей области VEXcode V5 открыт проект блоков Option 2. Проект состоит из набора блоков и настроенных устройств. Сбоку открывается меню «Устройства», в котором отображаются следующие устройства: Controller1, ClawMotor на порту 3, ArmMotor на порту 8, LeftMotor на порту 1 и RightMotor на порту 10. В рабочей области находится стопка блоков для обработки входных данных контроллера. В стеке отображается следующее: При запуске установите параметр остановки ArmMotor в положение "удержание" и параметр остановки ClawMotor в положение "удержание". Остальная часть стека находится в бесконечном цикле. Текст гласит: «Навсегда, установите скорость левого двигателя на позицию контроллера 1 3 %, вращайте левый двигатель вперед, установите скорость правого двигателя на позицию контроллера 1 2 % и вращайте правый двигатель вперед». Далее, если нажата кнопка «Вверх» на контроллере 1, то увеличьте скорость вращения двигателя ArmMotor, в противном случае, если нажата кнопка «Вниз» на контроллере 1, убавьте скорость вращения двигателя ArmMotor, в противном случае остановите двигатель ArmMotor. Наконец, если нажата кнопка A на контроллере 1, то вращайте клешню, чтобы открыть её; если нажата кнопка B на контроллере 1, то вращайте клешню, чтобы закрыть её; в противном случае остановите клешню.

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

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

Часть кода Объяснение
Крупный план стопки блоков в проекте VEXcode V5, вариант 2. Выделены два блока, находящиеся вне бесконечного цикла стека: они считывают значения «установить режим удержания ArmMotor» и «установить режим удержания ClawMotor». Для этого примера кода использовался Clawbot. Когда кнопки на контроллере используются для подъема и опускания рычага, как только кнопка будет отпущена, под действием силы тяжести рычаг упадет обратно вниз. Установка руки и захвата в положение «удержание» гарантирует, что и рука, и захват останутся на месте даже после того, как кнопки на контроллере будут отпущены.
Крупный план стопки блоков в проекте VEXcode V5, вариант 2. Внутри бесконечного цикла стека выделены четыре блока. Они читают «Forever», устанавливают скорость левого двигателя на позицию контроллера 1 3 %, вращают левый двигатель вперед, устанавливают скорость правого двигателя на позицию контроллера 1 2 % и вращают правый двигатель вперед.

 

Контроллер V5 для визуализации расположения кнопок.

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

Часть кода Объяснение
Крупный план одного из блоков в проекте VEXcode V5, вариант 3. В стеке отображается следующее: При запуске установите параметр остановки ArmMotor в положение «удержание», а затем установите параметр остановки ClawMotor в положение «удержание».
Для этого примера кода использовался Clawbot. Когда кнопки на контроллере используются для подъема и опускания рычага, как только кнопка будет отпущена, под действием силы тяжести рычаг упадет обратно вниз. Установка руки и захвата в положение «удержание» гарантирует, что и рука, и захват останутся на месте даже после того, как кнопки на контроллере будут отпущены.
Крупный план двух стопок блоков в проекте VEXcode V5, вариант 3. В первом стеке указано: «При изменении оси 3 контроллера 1 установите скорость левого двигателя на значение позиции 3 контроллера 1 в процентах, а затем вращайте левый двигатель вперед». Второй стек содержит текст: «При изменении оси 2 контроллера 1 установите скорость правого двигателя на значение позиции 2 контроллера 1, а затем вращайте правый двигатель вперед».

 

Контроллер V5 для визуализации расположения кнопок.

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

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

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

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

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

Крупный план четырех стопок блоков в проекте Option 3 VEXcode V5. В первом стеке написано: «При нажатии кнопки «Вверх» контроллера 1 запустить двигатель ArmMotor». Второй стек содержит сообщение: Когда кнопка «Вверх» контроллера 1 будет отпущена, остановите ArmMotor. В третьем блоке содержится следующее: При нажатии кнопки «Вниз» на контроллере 1, вращайте двигатель ArmMotor вниз. Четвертый стек содержит строку: Когда кнопка «Вниз» контроллера 1 будет отпущена, остановите 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: