Спеціальний код контролера у 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 2-го покоління Brain, ClawMotor на порту 4, ArmMotor на порту 10, Controller, LeftMotor на порту 1 та RightMotor на порту 6. Нарешті, є стек блоків для обробки вхідних даних контролера. Стек читає: «Під час запуску встановіть зупинку ArmMotor на утримання» та «зупинку ClawMotor на утримання». Решта стека міститься в циклі Forever. Він читає «Назавжди», встановіть швидкість лівого двигуна на положення контролера A %, обертайте лівий двигун вперед, встановіть швидкість правого двигуна на положення контролера D % і обертайте правий двигун вперед. Далі, якщо натиснуто кнопку контролера E вгору, то обертайте ArmMotor вгору, інакше, якщо натиснуто кнопку контролера E вниз, то обертайте ArmMotor вниз, інакше зупиніть ArmMotor. Нарешті, якщо натиснуто кнопку контролера F угору, то ClawMotor відкривається, інакше, якщо натиснуто кнопку контролера F вниз, то ClawMotor закривається, а в іншому випадку ClawMotor зупиняється.

Завантажте файл проекту "Варіант 2" VEXcode IQ (2-го покоління) >

Примітка: якщо використовується Clawbot 1-го покоління, двигун руки потрібно буде перевернути в конфігурації пристрою, щоб він працював, як передбачено в проекті вище.

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

Частина коду

Пояснення

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

Для цього прикладу коду використовувався Clawbot. Коли кнопки на контролері використовуються для підйому та опускання руки, щойно кнопку відпустити, під дією сили тяжіння рука опуститься назад. Встановлення для руки та кігтя на «утримання» гарантує, що і рука, і кігть залишатимуться на місці навіть після того, як кнопки на контролері будуть відпущені.

Крупний план стека блоків у проекті VEXcode IQ варіанта 2. Чотири блоки виділено всередині циклу Forever стека. Вони читають «Назавжди», встановлюють швидкість лівого двигуна на положення контролера A %, обертають лівий двигун вперед, встановлюють швидкість правого двигуна на положення контролера D % і обертають правий двигун вперед. Схема контролера IQ (2-го покоління) з позначеними кнопками та джойстиками. Вид спереду контролера. Осі лівого джойстика позначені як A та B. Центральна кнопка лівого джойстика позначена як L3. Дві круглі кнопки під лівим джойстиком позначені як «Вгору» та «Вниз». Осі правого джойстика позначені як C та D. Центральна кнопка правого джойстика позначена як R3. Дві круглі кнопки під правим джойстиком позначені як F Вгору та F Вниз.

Для цього прикладу коду використовувався Clawbot. Коли кнопки на контролері використовуються для підйому та опускання руки, щойно кнопку відпустити, під дією сили тяжіння рука опуститься назад. Встановлення для руки та кігтя на «утримання» гарантує, що і рука, і кігть залишатимуться на місці навіть після того, як кнопки на контролері будуть відпущені.

Вічна петля використовується для того, щоб постійно перевіряти, які кнопки натискаються на контролері.

Блоки [Set motor velocity] використовуються для встановлення швидкості двигуна до поточного положення контролера по осях A та D. Це еквівалентно запуску автомобіля. Це не обов’язково змушує машину рухатися, це просто налаштовує її.

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

Потім блок [Spin] використовується для фактичного переміщення двигуна. Це еквівалентно натисканню газу на автомобілі після того, як уже встановлено напрямок. Це дозволяє керувати кожним двигуном за допомогою однієї з чотирьох осей контролера.

Крупний план стека блоків у проекті VEXcode IQ варіанта 2. Блок 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 Up, кіготь може відкриватися, рухатися вперед, а потім закриватися навколо об’єкта.

Варіант 3: Використання подій

Якщо ви хочете багато налаштувати свій контролер, використання подій — найкращий варіант для вас. Одне натискання кнопки може активувати кілька дій робота, як-от натискання кнопки, щоб відкрити кіготь, підняти руку та поїхати вперед на задану відстань. Спроба закодувати декілька дій для кожної кнопки в рамках циклу Forever призведе до різкого сповільнення виконання проекту – використання подій дозволяє зробити це ефективніше.

Цей параметр використовує події для розбиття потоку проекту. Це схоже на використання циклу Forever, але дозволяє зробити код більш організованим, тому час відповіді на виконання кнопки буде швидшим. Швидший час відповіді означає, що ви не побачите затримки між натисканням кнопок контролера та переглядом поведінки робота. Цей приклад показує ту саму поведінку, що й попередній проект, але виконано з використанням Подій замість Вічного циклу.

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

Завантажте файл проекту "Варіант 3" VEXcode IQ (2-го покоління) >

Примітка: якщо використовується Clawbot 1-го покоління, двигун руки потрібно буде змінити в конфігурації пристрою, щоб він працював, як передбачено в проекті вище.

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

Частина коду

Пояснення

Крупний план одного зі стеків блоків у проекті VEXcode IQ Option 3. Стек читає: «Під час запуску встановіть зупинку ArmMotor на утримання», а потім встановіть зупинку ClawMotor на утримання.

Для цього прикладу коду використовувався Clawbot. Коли кнопки на контролері використовуються для підйому та опускання руки, щойно кнопку відпустити, під дією сили тяжіння рука опуститься назад. Встановлення для руки та кігтя на «утримання» гарантує, що і рука, і кігть залишатимуться на місці навіть після того, як кнопки на контролері будуть відпущені.

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

Для цього прикладу коду використовувався Clawbot. Коли кнопки на контролері використовуються для підйому та опускання руки, щойно кнопку відпустити, під дією сили тяжіння рука опуститься назад. Встановлення для руки та кігтя на «утримання» гарантує, що і рука, і кігть залишатимуться на місці навіть після того, як кнопки на контролері будуть відпущені.

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

Блоки [Set motor velocity] використовуються для встановлення швидкості двигуна до поточного положення контролера по осях A та D. Це еквівалентно запуску автомобіля. Це не обов’язково змушує машину рухатися, це просто налаштовує її.

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

Потім блок [Spin] використовується для фактичного переміщення двигуна. Це еквівалентно натисканню газу на автомобілі після того, як уже встановлено напрямок. Це дозволяє керувати кожним двигуном за допомогою однієї з чотирьох осей контролера.

Крупний план чотирьох стопок блоків у проекті VEXcode IQ Option 3. Перший стек читається так: «Коли натиснута кнопка E контролера вгору, обертається ArmMotor вгору». Другий стек показує: «Коли кнопка контролера E вгору відпущена, зупинити ArmMotor». Третій стек показує: «Коли натиснута кнопка E на контролері, обертання ArmMotor вниз». Четвертий стек показує: «Коли кнопка контролера E відпущена, зупинити ArmMotor».

Для цього прикладу коду використовувався Clawbot. Коли кнопки на контролері використовуються для підйому та опускання руки, щойно кнопку відпустити, під дією сили тяжіння рука опуститься назад. Встановлення для руки та кігтя на «утримання» гарантує, що і рука, і кігть залишатимуться на місці навіть після того, як кнопки на контролері будуть відпущені.

{When controller axis} Блоки подій використовуються для відображення певної поведінки кнопок, які натискаються або відпускаються на контролері. У цьому розділі коду встановлюються умови, якщо натиснути кнопки E Up або E Down. Якщо так, відбуватимуться певні дії, як-от підняття, опускання або зупинка руки.

Зверніть увагу, що останній розділ коду в проекті для Claw містить таке ж пояснення.

Підсумок варіанту 3: використання подій

Переваги

Обмеження

Приклад ситуації

  • Може використовувати спеціальні конструкції, особливо трансмісії з більш ніж 4 двигунами
  • Можна призначити декілька режимів поведінки одній кнопці
  • Можна призначати поведінку для різних осей на контролері (на відміну від лише параметрів лівої аркади, правої аркади, розділеної аркади та танкового приводу в конфігурації пристрою)
  • Швидше виконання коду і, отже, реагування кнопок (оскільки кожна умова викликається окремо, а не вбудована в один єдиний стек коду)
  • Вимагає максимального знання програмування параметрів (умови, цикли, події та знання кнопок/джойстиків на контролері)
  • Якщо використовується VEX IQ Brain 1-го покоління, надто багато подій у проекті може призвести до того, що проект не запуститься через обмеження обробки Brain.
  • Використання контролера з роботом, виготовленим на замовлення, особливо з нестандартною трансмісією
  • Якщо потрібно призначити декілька дій одній кнопці без затримки. Наприклад, коли натиснуто кнопку F Up, кіготь може відкриватися, рухатися вперед, а потім закриватися навколо об’єкта.

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

Last Updated: