Использование контроллера может облегчить управление и перемещение робота для выполнения задачи. Однако существуют ограничения на использование программы Drive, и в зависимости от конструкции вашего робота или поставленной задачи вам могут потребоваться разные элементы управления. Программирование контроллера позволяет оптимизировать контроллер, чтобы он лучше соответствовал вашему роботу и выполняемой задаче. Существует несколько способов кодирования контроллера в VEXcode EXP. У каждого есть свои преимущества и ограничения, а некоторые методы лучше подходят для определенных ситуаций в зависимости от желаемого результата.
В этой статье вы познакомитесь с тремя различными вариантами индивидуального кодирования контроллера в VEXcode EXP. Каждый метод будет описан с описанием его преимуществ, ограничений и примером использования, который поможет вам при выборе метода. Для целей этой статьи все показанные примеры кода были созданы для Clawbot. Однако те же концепции можно применить к многочисленным другим сборкам, найденным на builds.vex.com, а также к пользовательским сборкам.
Вариант 1: Назначение кнопок в конфигурации устройства
Этот вариант отлично подходит, если вы используете стандартную сборку, например BaseBot или Clawbot, и хотите быстро приступить к работе.
Эта опция позволяет назначать двигатели, трансмиссию или группы двигателей кнопкам контроллера в конфигурации устройства. Для получения дополнительной информации о назначении кнопок контроллеру в конфигурации устройства просмотрите эту статью.
Краткое описание варианта 1: назначение кнопок в конфигурации устройства
|
Преимущества |
Ограничения |
Пример ситуации |
|---|---|---|
|
|
|
Вариант 2: использование бесконечного цикла
Если вы используете пользовательскую сборку вместо стандартной или хотите иметь больше возможностей настройки в своем контроллере, этот вариант подойдет. Использование цикла Forever — отличное введение в создание собственного кода для вашего контроллера.
Эта опция помещает все условия для контроллера и связанных с ним кнопок в цикл Forever. Это обеспечивает большую гибкость, особенно при разработке пользовательских сборок, но также требует некоторого опыта программирования. Однако при использовании этого варианта следует учитывать продолжительность и сложность вашего проекта. Чем больше условий будет добавлено, тем длиннее может стать стек кода. Это означает, что несколько блоков должны выполняться по порядку, а когда блоков много, это может замедлить выполнение проекта. Медленное выполнение проекта может привести к задержке между нажатием кнопок контроллера и наблюдением за поведением робота.
Конкретный пример, показанный ниже, является одним из способов использования цикла Forever с роботом индивидуальной конструкции (например, роботом со специальной трансмиссией) для управления роботом и манипулирования когтем и рукой для взаимодействия с объектами.
Загрузите файл проекта VEXcode EXP «Вариант 2» >
Пояснение к варианту 2 кода.
|
Часть кода |
Объяснение |
|---|---|
|
Для этого примера кода использовался Clawbot. Когда кнопки на контроллере используются для подъема и опускания рычага, как только кнопка будет отпущена, под действием силы тяжести рычаг упадет обратно вниз. Установка руки и захвата в положение «удержание» гарантирует, что и рука, и захват останутся на месте даже после того, как кнопки на контроллере будут отпущены. |
|
|
|
Для этого примера кода использовался Clawbot. Когда кнопки на контроллере используются для подъема и опускания рычага, как только кнопка будет отпущена, под действием силы тяжести рычаг упадет обратно вниз. Установка руки и захвата в положение «удержание» гарантирует, что и рука, и захват останутся на месте даже после того, как кнопки на контроллере будут отпущены. Цикл Forever используется для постоянной проверки того, какие кнопки нажимаются на контроллере. Блоки [Установить скорость двигателя] используются для установки скорости двигателя в соответствии с текущим положением контроллера по осям 2 и 3. Это эквивалентно включению автомобиля в движение. Это не обязательно заставляет машину двигаться, а просто приводит ее в движение. Каждая ось джойстика возвращает значение от -100 до +100 и возвращает нулевое значение при центрировании. Это означает, что оси джойстика при нажатии соответствуют от -100% до 100%. Чем дальше к 100 или -100 сдвинуты оси, тем быстрее будет вращаться двигатель. Затем блок [Spin] используется для фактического перемещения двигателя. Это эквивалентно нажатию газа на автомобиле после того, как направление было задано. Это позволяет управлять каждым двигателем по одной из четырех осей контроллера. |
|
Для этого примера кода использовался Clawbot. Когда кнопки на контроллере используются для подъема и опускания рычага, как только кнопка будет отпущена, под действием силы тяжести рычаг упадет обратно вниз. Установка руки и захвата в положение «удержание» гарантирует, что и рука, и захват останутся на месте даже после того, как кнопки на контроллере будут отпущены. Блок [If then else if then else] используется для сопоставления определенного поведения с кнопками, нажимаемыми или отпускаемыми на контроллере. В этом разделе кода устанавливаются условия, если нажаты кнопки «Вверх» или «Вниз». Если да, то произойдет определенное поведение, например, поднятие и опускание руки. Существует также другая часть условия: если ни одна кнопка не нажата, рука прекращает движение. Обратите внимание, что следующий раздел кода проекта Claw следует тому же объяснению. |
Краткое описание варианта 2: использование бесконечного цикла
|
Преимущества |
Ограничения |
Пример ситуации |
|
|
|
Вариант 3: Использование событий
Если вам нужны широкие возможности настройки вашего контроллера, использование событий — лучший вариант для вас. Одно нажатие кнопки может активировать несколько вариантов поведения робота, например, нажатие кнопки открывает захват, поднимает руку и движется вперед на заданное расстояние. Попытка закодировать несколько вариантов поведения для каждой кнопки в цикле Forever приведет к резкому замедлению выполнения проекта — использование событий позволяет сделать это более эффективно.
Этот вариант использует события для разделения потока проекта. Это похоже на использование цикла Forever, но позволяет сделать код более организованным, благодаря чему время отклика кнопки сокращается. Более быстрое время отклика означает, что вы не увидите задержки между нажатием кнопок контроллера и наблюдением за поведением робота. В этом примере показано то же поведение, что и в предыдущем проекте, но с использованием событий вместо цикла Forever.
Загрузите файл проекта VEXcode EXP «Вариант 3» >
Пояснение к варианту 3 кода.
|
Часть кода |
Объяснение |
|---|---|
|
Для этого примера кода использовался Clawbot. Когда кнопки на контроллере используются для подъема и опускания рычага, как только кнопка будет отпущена, под действием силы тяжести рычаг упадет обратно вниз. Установка руки и захвата в положение «удержание» гарантирует, что и рука, и захват останутся на месте даже после того, как кнопки на контроллере будут отпущены. |
|
|
|
Для этого примера кода использовался Clawbot. Когда кнопки на контроллере используются для подъема и опускания рычага, как только кнопка будет отпущена, под действием силы тяжести рычаг упадет обратно вниз. Установка руки и захвата в положение «удержание» гарантирует, что и рука, и захват останутся на месте даже после того, как кнопки на контроллере будут отпущены. {When controller axis} Блоки событий используются для запуска определенного поведения при изменении одной из четырех осей контроллера с помощью джойстиков. Блоки [Установить скорость двигателя] используются для установки скорости двигателя в соответствии с текущим положением контроллера по осям A и D. Это эквивалентно включению автомобиля в движение. Это не обязательно заставляет машину двигаться, а просто приводит ее в движение. Каждая ось джойстика возвращает значение от -100 до +100 и возвращает нулевое значение при центрировании. Это означает, что оси джойстика при нажатии соответствуют от -100% до 100%. Чем дальше к 100 или -100 сдвинуты оси, тем быстрее будет вращаться двигатель. Затем блок [Spin] используется для фактического перемещения двигателя. Это эквивалентно нажатию газа на автомобиле после того, как направление было задано. Это позволяет управлять каждым двигателем по одной из четырех осей контроллера. |
|
Для этого примера кода использовался Clawbot. Когда кнопки на контроллере используются для подъема и опускания рычага, как только кнопка будет отпущена, под действием силы тяжести рычаг упадет обратно вниз. Установка руки и захвата в положение «удержание» гарантирует, что и рука, и захват останутся на месте даже после того, как кнопки на контроллере будут отпущены. {When controller axis} Блоки событий используются для сопоставления определенного поведения с кнопками, нажимаемыми или отпускаемыми на контроллере. В этом разделе кода устанавливаются условия, если нажаты кнопки «Вверх» или «Вниз». Если да, то произойдет определенное поведение, например, поднятие, опускание или остановка руки. Обратите внимание, что последний раздел кода проекта Claw следует тому же объяснению. |
Краткое описание варианта 3: использование событий
|
Преимущества |
Ограничения |
Пример ситуации |
|
|
|