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

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

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

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

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

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

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

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

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

Ограничения

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

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

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

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

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

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

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

Загрузите файл проекта VEXcode IQ (2-го поколения) «Вариант 2» >

ПримечаниеПри использовании Clawbot 1-го поколения двигатель рычага необходимо будет поменять местами в конфигурации устройства, чтобы он работал так, как предполагалось в проекте выше.

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

Часть кода

Объяснение

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

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

Крупный план стопки блоков в проекте Вариант 2 VEXcode IQ. Внутри бесконечного цикла стека выделены четыре блока. Они считывают Forever, устанавливают скорость LeftMotor на позицию контроллера A %, вращают LeftMotor вперед, устанавливают скорость RightMotor на позицию контроллера D % и вращают RightMotor вперед. Схема контроллера IQ (2-го поколения) с обозначенными кнопками и джойстиками. Вид спереди контроллера. Оси левого джойстика обозначены как A и B. Центральная кнопка левого джойстика обозначена как L3. Две круглые кнопки под левым джойстиком обозначены как E Up и E Down. Оси правого джойстика обозначены как C и D. Центральная кнопка правого джойстика обозначена как R3. Две круглые кнопки под правым джойстиком обозначены как F Up и F Down.

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

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

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

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

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

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

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

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

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

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

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

Ограничения

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

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

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

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

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

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

Загрузите файл проекта VEXcode IQ (2-го поколения) «Вариант 3» >

Примечание: при использовании Clawbot 1-го поколения двигатель рычага необходимо будет поменять местами в конфигурации устройства, чтобы он работал так, как предполагалось в проекте выше.

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

Часть кода

Объяснение

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

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

Крупный план двух стопок блоков в проекте Вариант 3 VEXcode IQ. Первый стек читается так: «Когда изменяется ось контроллера A, установите скорость левого двигателя на значение % положения контроллера A, а затем вращайте левый двигатель вперед». Во втором стеке указано: «Когда изменяется ось D контроллера, установите скорость RightMotor на значение % положения контроллера D, а затем вращайте RightMotor вперед». Схема контроллера IQ (2-го поколения) с обозначенными кнопками и джойстиками. Вид спереди контроллера. Оси левого джойстика обозначены как A и B. Центральная кнопка левого джойстика обозначена как L3. Две круглые кнопки под левым джойстиком обозначены как E Up и E Down. Оси правого джойстика обозначены как C и D. Центральная кнопка правого джойстика обозначена как R3. Две круглые кнопки под правым джойстиком обозначены как F Up и F Down.

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

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

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

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

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

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

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

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

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

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

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

Ограничения

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

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

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

Last Updated: