Движение робота вперед, назад. Способы перемещения

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

Мобильные роботы могут перемещаться в различных средах: в водной, воздушной, по земле, в космосе. И движение в каждой среде имеет свои особенности, связанные с их различными физическими свойствами.

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

При разработке системы перемещения робота необходимо учитывать следующие моменты:

  • скорость или ускорение движения
  • точность позиционирования (повторяемость)
  • гибкость и робастность (надежность) при различных условиях
  • эффективность (низкое энергопотребление)

Система координат

Для того чтобы математически описать движение мобильного робота нам потребуется определить системы координат. Я введу две системы координат — мировую систему координат W (буду считать что он неподвижна в пространстве), и система координат робота R , которая перемещается в пространстве и остается неподвижной относительно самого робота.

Нам необходимо определить местоположение робота, то есть мы хотим знать, как преобразовывать координаты между W и R .

Степени свободы движения

Число степеней свободы определяет минимальное количество независимых переменных (обобщённых координат), необходимых для полного описания движения механической системы.

Твердое тело, которое перемещается и вращается двигаясь по одномерному пути имеет одну степень свободы — поступательную. В качестве примера можно привезти поезд, движущийся по рельсам.

Твердое тело, которое перемещается и вращается на плоскости имеет 3 степени свободы: 2 поступательных и 1 вращательную. Пример: наземный робот.

Твердое тело, которое перемещается и вращается в 3D-объеме имеет 6 степеней свободы: 3 поступательных и 3 вращательных. Пример: летающий робот.

Особый случай — это так называемый голономный робот, который способен перемещаться мгновенно в любом направлении в пространстве его степеней свободы (робот является голономным если число управляемых степеней свободы равно полному числу степеней свободы). Голономные роботы существуют, но требуют множество моторов и необычный конструктив, что зачастую очень непрактично. Однако, наземные голономные роботы могут быть реализованы с использованием всенаправленных колес (omni-wheels).

На видео показан пример четырехколесного робота со всенаправленными колесами.


Конфигурации колесных роботов

Существует множество различных конфигураций мобильных роботов.

Есть те, которые применяются реже, например, двухколесная платформа сигвей (segway) с динамическим балансом обладает хорошей высотой при малой площади и достаточно большим ускорением.

Или марсоход Opportunity, который имеет колеса на штангах для преодоления больших препятсвий.

Но чаще применяются другие типы конфигураций.

Это простые, надежные, прочные механизмы, пригодные для роботов, которые в основном передвигаются по плоскости.

Все эти роботы неголономны (используется два двигателя, но три степени свободы движения). Например, не может мгновенно двигаться в сторону.

Робот с дифференциальным приводом

Такая конфигурация используется в .

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

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

Движение по дуге

Обозначим скорости колес (линейные скорости с которыми они «покрывают» поверхность) и - для левого и правого колес, соответственно, и расстояние между колесами.

Для того, чтобы найти радиус криволинейного пути, рассмотрим период движения , в течении которого робот движется вдоль дуги окружности, имеющей угол .

Автомобиль/Трицикл/Реечно-зубчатый привод

Такой тип роботов имеет два мотора — один для движения, другой для рулежки.

  • Не может нормально развернуться на месте.
  • При постоянной скорости и угле поворота движется по дуге окружности.
  • В четырехколесной схеме необходим задний дифференциал и переменная связь («Принцип Аккермана») на рулевые колеса.

Круговое движение трехколесного робота

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

Радиус траектории, которую описывают задние колеса:

За время расстояние вдоль этой дуги окружности, пройденное приводными колесами равно , поэтому угол на который повернется робот:

Зубчатая передача

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

Если Передача 1 имеет крутящий момент , она оказывает тангенциальную силу

на Передачу 2 . Крутящий момент Передачи 2 поэтому

Изменение угловой скорости между Передачей 1 и Передачей 2 вычислим, рассмотрев скорость в точке где они соприкасаются:

  • Когда маленькая шестерня приводит в движение большую, второе зубчатое колесо будет иметь более высокий крутящий момент и меньшую угловую скорость пропорционально соотношению зубьев.
  • Для достижения комбинированного воздействия шестерни можно объединять в цепочки.

Оценка движения c помощью датчиков

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

Например, на основе очень простой оценки:

Пройденное расстояние пропорционально напряжению и времени. Здесь является расчетной константой (используя знания электричества и геометрии), но также может быть получена в результате калибровки .

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

Движение и состояние робота для плоскости

Если предположить, что робот ограничивается перемещением на плоскости, его местоположение может быть определено вектором состояния , состоящем из трех параметров:

И определяют местоположение предопределенной точки «центра робота» в мировой системе координат.

Определяет угол поворота между системами координат (угол между осями и ).

Две системы координат совпадают в момент, когда центр робота находится в начале координат и .

Интегральное движение на плоскости

Получая перемещения робота в некоторые моменты времени, мы можем найти весь путь, пройденный роботом, просуммировав эти значения, или перейдя к пределу (при стремлении количества измерений ) — путем их интегрирования.

При движении на плоскости мы имеем три степени свободы для определения положения, представленные при .

Рассмотрим робота, который может только двигаться вперед или поворачиваться на месте:

При прямолинейном движении робота на расстояние новое состояние будет выражено как:

Если присутствует только вращательное движение, при повороте на угол :

Оценка кругового 2D движения

Для случаев и дифференциального и трехколесного роботов мы можем получить выражения для и для случая когда присутствует только движение по дуге окружности.

Как танцевать как робот?



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

Танец стал популярен благодаря легендарному Майклу Джексону. В основе роботинга лежит сокращение мышц, сменяющееся расслаблением. Танцоры данного направления используют прямолинейные движения и фиксации точек.

Техника танца Робот

  1. Перед тем как научиться танцевать, подберите ритмичную музыку.
  2. Робот - это машина. Избавьтесь от мимики, придайте лицу холодный взгляд, устремленный в одну точку.
  3. Напрягите ваше тело и потянитесь макушкой вверх, ноги на ширине плеч, носки устремлены в стороны, руки внизу.
  4. Рассмотрим движение головы. Представьте, что вы находитесь на картинке и вам нужно осмотреть ее углы. Плавным движением начинайте поворот головы наверх вправо, затем фиксация положения, вниз-фиксация, влево-фиксация, и закончите движение поднятием головы вверх.
  5. Учимся остановкам. Наполните легкие воздухом с помощью глубокого вдоха носом, и когда грудная клетка поднимется, замрите, через несколько секунд выдохните воздух. Повторите данное движение несколько раз.
  6. Далее представьте, будто вы воздушный шар, который заполняют воздухом. Выполняя пункт 5 инструкции, подключите руки. Представьте, что вы кукла-марионетка и вас дергают за ниточки. Изменяйте положения рук, разворачивая корпус тела в разные стороны. Делайте движения медленно и с паузами. Закончите движение, стоя прямо и сложив руки вместе, будто вы сидите за партой.
  7. Не убирая положения рук, сложенных вместе, развернитесь налево и согните ваш корпус. Можно медленно покачаться корпусом в такт, затем разогнуть руки в стороны и сложить их обратно.
  8. Далее поработайте грудной клеткой. Голову зафиксируйте на месте, а корпус прогибайте вверх и вниз.
  9. Следующее движение - поворот. При повороте направо встаньте на носок левой ноги и слегка согните колено. При повороте налево аналогичные действия с правой ногой. Плечи поворачивайте вместе с ногами.
  10. Отработаем повороты полусидя. Согните колени и поворачивайте корпус вправо и влево, будто вы на крутящемся круге.
  11. Следующий элемент включает в себя движение рук и корпуса. Повернитесь налево и представьте, что хотите поднять коробку. При помощи прямых рук возьмите воображаемую коробку, повернитесь прямо, зафиксировав положение, затем повернитесь налево и поставьте коробку вниз.
  12. Делаем волну. В этом движении важна пластичность и гибкость тела. Начните волну с правой руки, затем подключите плечо, корпус и закончите движение волной на левой руке. Потренируйтесь делать также обычную волну с помощью живота.
  13. Несколько раз отрепетируйте описанные движения под музыку перед зеркалом. Соединяя элементы - получится танец. После отработки движений вы можете на свой вкус расставить их в хронологическом порядке. Придумайте свои элементы танца.

Новичкам на заметку

  • Выучите основные связки. Помните, что хорошая импровизация - это хорошо подготовленная импровизация.
  • Уделяйте большее внимание склейке связок. Переход от одного движения к другому должен смотреться гармонично.
  • Снимайте ваши занятия на видео. Это поможет вам оценить движения со стороны и изучить ошибки, над которыми нужно будет поработать.

Аннотация: Задача управления является очень актуальной в современной науке и технике. Пусть имеется система (объект управления), которую мы должны поддерживать в заданном состоянии. Для этого у нас имеется регулятор, который (1) производит сбор информации о текущем состоянии системы в момент времени t и (2) вычисляет управляющий сигнал U(t). Этот сигнал подается объекту управления, возвращая его в заданное состояние. Такая схема носит название системы с отрицательной обратной связью, поскольку при отклонении от равновесия регулятор стремится вернуть систему в нормальное состояние. В этой теме мы рассмотрим два вида регуляторов: более простой релейный и более устойчивый пропорциональный. Цель: научиться строить систему управления автономным роботом на основе простейшего релейного и пропорционального регуляторов, рассмотреть одну из задач соревновательной робототехники и изучить возможности использования датчика оборотов.

Релейный регулятор

Пример 9.1. Движение робота вдоль стены.

Пусть имеется робот, оснащённый датчиком ультразвука, и не очень ровная стена (с небольшими выступами и впадинами). Требуется написать программу управления движением робота вдоль стены на заданном расстоянии.

Следует заранее продумать положение датчика ультразвука. Как упоминалось выше (см. с. 38), этот датчик медленный. Поэтому его следует располагать чуть впереди корпуса робота. Кроме этого, его следует сместить как можно дальше от стены (см. Рис. 9.1), потому что на малых расстояниях (5 - 7 см) показания датчика ультразвука становятся слишком неточными. Далее мы увидим, что направление датчика также следует подкорректировать.

Алгоритм движения робота, записанный в словесной форме, может быть примерно таким (Рис. 9.2):

  1. двигаться прямо;
  2. если расстояние до стены больше заданного, то повернуть к стене;
  3. если расстояние до стены меньше заданного, то повернуть от стены;
  4. повторять шаги 2 - 3 бесконечно (или до наступления некоторого события).

Одним из самых очевидных решений этой задачи является релейный регулятор.

Реле в электротехнике - это замыкатель с автоматическим возвратом в исходное состояние (хотя существует множество других разновидностей). Другими словами, при превышении сигналом (например, током) некоторого предельного значения происходит замыкание реле. Как только ток снизится, реле размыкается. В нашем случае определение релейный по отношению к регулятору означает лишь то, что мы описываем поведение системы лишь для двух случаев: значение сигнала (1) меньше заданного и (2) больше заданного.

Для определённости примем в качестве заданного расстояния 20 см. Получим следующую программу (Рис. 9.3):

Как видно из текста программы, после включения обоих моторов запускается бесконечный цикл, в котором реализован вышеописанный словесный алгоритм. Хорошо заметной особенностью этого подхода является "рыскающее" движение: робот всегда поворачивает с одной и той же интенсивностью, независимо от того, насколько далеко или близко он оказался по отношению к стене. Поэтому траектория всегда будет зигзагообразной, так как во время поворотов робот всегда будет "прыгать" вокруг среднего значения 20 см. Так как датчик ультразвука является "медленным", в цикле используется небольшая задержка (0,1 с) для того, чтобы показания датчика успевали обрабатываться блоком NXT. Величина задержки фактически определяет время, в течение которого робот будет двигаться в неизменном направлении. Другими словами, увеличивая время задержки мы получим более крупные "зубцы" траектории. Как отмечалось ранее, делать задержку меньше 0,06 с не имеет смысла, потому что в этом случае датчик ультразвука просто не успеет провести измерения.

При использовании релейного регулятора возможны частые уходы робота с дистанции. Одна из причин состоит в том, что при выбранном нами расположении датчика ультразвука робот не сможет различать положения, симметричные относительно нормального положения. То есть два положения, показанные на Рис. 9.4 будут идентичными, и расстояние до стены в обоих случаях окажутся больше 20 см. В соответствии с вторым шагом алгоритма робот должен повернуть к стене (влево). И если для второго положения это верно, то для первого - ошибочно: робот ещё больше уйдёт с трассы.

Эту проблему можно решить, если расположить датчик не перпендикулярно к направлению движения (т. е. строго влево), а под углом 45° к направлению движения (Рис. 9.5).

Так нам удастся избежать случая, показанного на Рис. 9.4 . Действительно, при подруливании влево расстояние до стены будет (при небольших углах поворота < 45°) уменьшаться, а при поворотах вправо, наоборот, увеличиваться. Однако не стоит рассчитывать, что наш робот сможет проехать вдоль стены любой формы. Даже простой поворот на 90° может вызвать у него неожиданные трудности. Таким образом, наиболее значимым достоинством релейного регулятора в нашем случае является простота его алгоритма. В следующем разделе мы рассмотрим более интересный алгоритм управления.

Задание 9.1. Запрограммируйте движение робота вдоль стены с разными положениями датчика ультразвука. В каком случае движение более устойчиво?

Задание 9.2. Сравните это решение с примером 4.1 на с. 48. Реализуйте релейный алгоритм движения вдоль стены без использования ветвления.

Задание 9.3. Реализуйте релейный алгоритм движения по линии с использованием ветвления.

P-регулятор

Трудности использования релейного регулятора, о которых говорилось в п. 9.1, требуют поиска более приемлемого решения задачи управления. Одним из вариантов является пропорциональный регулятор (или P-регулятор). В этом случае управляющее воздействие на моторы робота не постоянно, как в релейном регуляторе, а изменяется пропорционально отклонению от заданного расстояния до стены. Другими словами, чем больше отклонение, тем активнее должны работать моторы, выравнивая траекторию робота. В идеале робот должен ехать прямо, если датчик регистрирует заданное расстояние. При небольшом отклонении следует небольшое подруливание. Если отклонение больше, то и подруливание больше. Алгоритм P-регулятора является классическим в теории систем автоматического управления.

Пример 9.2. Управление движением вдоль стены на основе P-регулятора.

Для P-регулятора управляющее воздействие U(t) на моторы робота в момент времени t вычисляется по формуле:

(9.1)

Очевидно, графиком для расчёта управляющего воздействия U в зависимости от ошибки E будет прямая (см. Рис. 9.6):

Из графика очень просто определить коэффициент . Выберем произвольную точку на графике. В нашем случае это точка A(1; 2) . Тогда

Ошибка может быть как положительная (если мы ближе к стене, чем надо), так и отрицательная (если мы отъехали от стены дальше, чем необходимо). Таким образом, управляющее воздействие U(t) тоже может быть как положительным, так и отрицательным.

Пусть мы имеем P-регулятор для робота, движущегося вдоль стены. Тогда мощность моторов PowerB(t) и PowerC(t) в момент времени t вычисляется по формулам:

(9.2)
(9.3)
  • Nm - нормальная мощность моторов: мощность, с которой должны крутиться оба двигателя, если отклонение от курса равно нулю. В нашей программе можно положить Nm = 50;
  • U(t) - управляющее воздействие на моторы, вычисляемое по формуле (9.1).

Знаки перед U(t) для Вашего робота могут поменяться на противоположные в зависимости от того, какой мотор находится слева, а какой справа.

Рассмотрим смысл коэффициента пропорциональности . Как видно, поворот производится в силу того, что от мощности одного мотора управляющее воздействие вычитается, тогда как к другому - прибавляется. Таким образом коэффициент может усиливать или ослаблять воздействие регулятора на моторы: если он больше единицы, то происходит усиление, а если меньше - ослабление. Большой сделает робот очень чутким к ошибкам, что приведёт к резким рывкам для исправления траектории. Малый сделает движения робота плавнее, но на крутых поворотах робот может потерять стену и сойти с траектории. Конкретные значения коэффициента , наиболее подходящие в каждом конкретном случае, будут зависеть от конструктивных особенностей робота, скорости движения (нормальной мощности), сложности трассы, используемых датчиков. Величины PowerB(t) и PowerC(t) должны лежать в диапазоне . Поэтому при больших ошибках (и, соответственно, больших управляющих сигналах) мощность моторов будет ограничиваться так, чтобы она не выходила из указанного диапазона. В этом случае пропорциональный регулятор не будет работать корректно, поскольку не сможет скомпенсировать большие ошибки. Таким образом, одной из особенностей P-регулятора является адекватная работа только при небольших ошибках. Для того, чтобы учесть это в нашей задаче нужно иметь стену без резких поворотов и двигаться с небольшой скоростью.

Реализуем алгоритм P-регулятора согласно приведённым формулам при помощи вложенных процедур (My blocks ) на языке NXT-G.

Блок вычисления отклонения (ошибки) от заданного расстояния, который мы назовём Error , имеет следующие параметры:

  • входные - текущее показание датчика расстояния X(t) ;
  • выходные - ошибка E(t)) .

Блок Error на языке NXT-G выглядит так:


Рис. 9.7.

Мы используем его в подпрограмме для вычисления управляющего воздействия U(t) . Она имеет следующие параметры.

Мы предполагаем, что владелец конструктора уже знаком с контроллером Arduino и средой проектирования Arduino IDE. Поэтому в данном описании мы не будем рассказывать, как и где скачать и установить необходимые прораммы.
Если вы с программированием Arduino сталкиваетесь в первый раз, пожалуйста познакомьтесь с подготовкой к работе на нашей странице:

В гнезда блока управления R-5 устанавливается контроллер . Поэтому и в настройках среды разработки Arduino IDE необходимо выбрать именно этот контроллер с процессором ATmega328

Теперь уже приступаем непосредственно к программированию.
Программа для контроллера Ардуино обычно состоит из 3-х частей.

В первой части, как в обычной математической задаче описываются исходные данные. Мы присваиваем названия, назначение, функционал контактов контроллера. Записываем, какие библиотеки мы будем использовать в ходе выполнения программы.

Во второй части с названием Setup пишем уже непосредственно код программы. Но этот код исполняется только один раз за время работы программы. Это необходимо для того, что бы запрограммировать выходы, входы контроллера на все время действия программы

И третья часть программы loop представляет собой команды, которые исполняются процессором в течение всего периода работы процессора.

Рассмотрим простой пример кода для движения робота.

В первой части кода мы определяем, какими контактами платы Ардуино мы будем управлять драйвером и соответственно электромоторами, придумаем название команд, что бы нам было понятно их назначение.
В блоке R-5 контакты Ардуино жестко подключены к входам драйвера.
Давайте посмотрим на рисунок ниже:

M_R _ IN - вход драйвера, управляющий направлением вращения правого электромотора. Высокий уровень (HIGHT) - вращение вперед.
M_ R _ EN - вход драйвера, разрешающий вращение правого электромотора. Высокий уровень (HIGHT) разрешает вращение. При подаче на вход сигнала с широтно-импульсной модуляцией (ШИМ, PWM) вход управляет скоростью вращения.
M_ L _ IN - вход драйвера, управляющий направлением вращения левого электромотора. Высокий уровень (HIGHT) - вращение вперед.
M_ L _ IN - вход драйвера, разрешающий вращение левого электромотора. Высокий уровень (HIGHT) разрешает вращение. При подаче на вход сигнала с широтно-импульсной модуляцией (ШИМ, PWM) вход управляет скоростью вращения.
И у нас получается следующее:

Контакт Ардуино 2 - направление вращения правого мотора
Контакт Арудино 3 - разрешение вращения правого мотора. При работе ШИМ - регулировка скорости вращения.
Контакт Ардуино 4 - направление вращения левого мотора.
Контакт Ардуино 5 - разрешение вращения левого мотора. При работе ШИМ - регулировка скорости вращения.

Пишем код.

#define DIR_R 2 // управлять направлением вращения правого мотора будем с контакта 2
#define SPEED_R 3 // управлять разрешением вращения и скоростью вращения правого //мотора будем с контакта 3
#define DIR_L 4 //управлять направлением вращения левого мотора будем с контакта 4
#define SPEED_L 5 // управлять разрешением вращения и скоростью вращения левого //мотора будем с контакта 5

//В этой части кода больше не будем задавать ни каких параметров

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

void setup()
{
pinMode (DIR_R, OUTPUT); /
/ Драйвер управляется выходными сигналами с Ардуино.
//Поэтому мы определяем все контакты, как OUTPUT

pinMode (SPEED_R, OUTPUT);
pinMode (DIR_L, OUTPUT);
pinMode (SPEED_L, OUTPUT);
}

// И в третьей части кода мы уже пишем алгоритм работы. Т.е. то, что наш робот должен
//выполнять

void loop()
{
digitalWrite (DIR_R, HIGH);
// Команда digitalWrite устанавливает на контакте 2 высокий
//уровень. Для драйвера моторов это означает то, что мотор будет вращаться вперед
// высокий уровень на контакте 3 разрешает драйверу
//вращать электромотор

digitalWrite (DIR_L, HIGH);

delay(1000);
// Вращаем 1 сек

digitalWrite (DIR_R, HIGH);
// Низкий уровень запрещает вращение моторов
digitalWrite (DIR_L, HIGH);

delay(1000);

DigitalWrite (DIR_R, LOW); // Включаем низкий уровень и мотор должен вращаться в
//обратную сторону

digitalWrite (SPEED_R, HIGH); //Разрешаем вращение мотора
digitalWrite (DIR_L, LOW);
digitalWrite (SPEED_L, HIGH);
delay(1000);

DigitalWrite (DIR_R, LOW);
digitalWrite (SPEED_R, LOW); // Вращение запрещено
digitalWrite (DIR_L, LOW);
digitalWrite (SPEED_L, LOW);
delay(1000);
}

Скопируйте текст программы и вставьте его в Arduino IDE.
После копирования обязательно проверьте, что бы комментарии в каждой строчке начинались с двух символов //.
После проверки загрузите код в контроллер. Установите контроллер в блок R-5 и включите питание робота.

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

На втором занятии мы детальнее познакомимся со средой программирования и подробно изучим команды, задающие движение нашему роботу-тележке, собранному на первом занятии. Итак, давайте запустим среду программирования Lego mindstorms EV3, загрузим наш проект lessons.ev3, созданный ранее и добавим в проект новую программу - lesson-2-1. Программу можно добавить двумя способами:

  • Выбрать команду "Файл"-"Добавить программу" (Ctrl+N) .
  • Нажать "+" на вкладке программ.

Палитры программирования и программные блоки

Давайте теперь обратим свой взгляд в нижний раздел среды программирования. Из материала первого занятия мы уже знаем, что здесь находятся команды для программирования робота. Разработчики применили оригинальный прием и, сгруппировав программные блоки, присвоили каждой группе свой цвет, назвав группы палитрами.

Зеленая палитра называется: "Действие" :

На данной палитре расположены программные блоки управления моторами, блок вывода на экран, блок управления индикатором состояния модуля. Сейчас мы начнем изучение этих программных блоков.

Зеленая палитра – блоки действия

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

Для правильной настройки блока управления большим мотором мы должны:

  1. Выбрать порт, к которому подключен мотор (A, B, C или D) (Рис. 3 поз. 1)
  2. Выбрать режим работы мотора (Рис. 3 поз. 2)
  3. Настроить параметры выбранного режима (Рис. 3 поз. 3)

Чем же отличаются режимы? Режим: "Включить" включает мотор с заданным параметром "Мощность" и после этого управление передается следующему программному блоку программы. Мотор будет продолжать вращаться, пока не будет остановлен следующим блоком "Большой мотор" с режимом "Выключить" или следующий блок "Большой мотор" не будет содержать другие параметры выполнения. Режим "Включить на количество секунд" включает большой мотор с установленной мощностью на указанное количество секунд, и только по завершению времени мотор остановится, а управление в программе перейдет к следующему программному блоку. Аналогично поведет мотор себя в режимах "Включить на количество градусов" и "Включить на количество оборотов" : только после выполнения установленного вращения мотора, он остановится и управление в программе перейдет к следующему блоку.

Параметр мощность (на Рис. 3 мощность установлена в 75) может принимать значения от -100 до 100. Положительные значения мощности задают вращение мотора по часовой стрелке, отрицательные - против часовой. При значении мощности равном 0 мотор вращаться не будет, чем "выше" значение мощности, тем быстрее вращается мотор.

Параметр мощность задается только целыми значениями, параметры: секунды, градусы, обороты могут принимать значения с десятичной дробью. Но следует помнить, что минимальный шаг вращения мотора равен одному градусу.

Отдельно следует сказать о параметре "Тормозить в конце" . Данный параметр, если установлен в значение "Тормозить" заставляет мотор тормозить после выполнения команды, а если установлен в значение "Двигаться накатом" , то мотор будет вращаться по инерции, пока сам не остановится.

Следующие два программных блока "Рулевое управление" и реализуют управление парой больших моторов. По умолчанию левый большой мотор подключается к порту "В" , а правый - к порту "С" . Но вы можете в настройках блока поменять порты подключения в соответствии с требованиями вашей конструкции (Рис. 4 поз. 1 ).

Параметр "Рулевое управление" (Рис. 4 поз. 2 ) может принимать значения от -100 до 100. Отрицательные значения параметра заставляют робота поворачивать налево, при значении равном 0 робот движется прямо, а положительные значения заставляют робота поворачивать направо. Стрелка над числовым параметром меняет свою ориентацию в зависимости от значения, подсказывая тем самым направление движения робота (Рис. 5 ).

Программный блок "Независимое управление моторами" похож на программный блок "Рулевое управление" . Он также управляет двумя большими моторами, только вместо параметра "Рулевое управление" появляется возможность независимого управления мощностью каждого мотора. При равном значении параметра "Мощность" для левого и правого мотора робот будет двигаться прямолинейно. Если на один мотор подать отрицательное значение мощности (например -50), а на второй - положительное значение (например 50), то робот будет разворачиваться на месте (Рис. 6 ).

Режимы работы этих блоков аналогичны режимам блока управления одним мотором, поэтому дополнительного описания не требуют...

Прямолинейное движение, повороты, разворот на месте остановка

Итак, теперь мы можем написать программу движения робота по какому-либо маршруту.

Задача 1

Экран, звук, индикатор состояния модуля

Программный блок "Экран" позволяет выводить текстовую или графическую информацию на жидкокристаллический экран блока EV3. Какое это может иметь практическое применение? Во-первых, на этапе программирования и отладки программы можно выводить на экран текущие показания датчиков во время работы робота. Во-вторых, можно выводить на экран название промежуточных этапов выполнения программы. Ну а в-третьих, с помощью графических изображений можно "оживить" экран робота, например с помощью мультипликации.

Программный блок "Экран" имеет четыре режима работы: режим "Текст" позволяет выводить текстовую строку на экран, режим "Фигуры" позволяет отображать на экране одну из четырех геометрических фигур (прямая, круг, прямоугольник, точка), режим "Изображение" может вывести на экран одно изображение. Изображение можно выбрать из богатой коллекции изображений или нарисовать свое, используя редактор изображений. Режим "Окно сброса настроек" сбрасывает экран модуля EV3 к стандартному информационному экрану, показываемому во время работы программы.

Рассмотрим параметры программного блока "Экран" в режиме "Текст" (Рис. 9 поз.1) . Строка, предназначенная для вывода на экран, вводится в специальное поле (Рис. 9 поз. 2) . К сожалению, в поле ввода текста можно вводить только буквы латинского алфавита, цифры и знаки препинания. Если режим "Очистить экран" установлен в значение "Истина" , то экран перед выводом информации будет очищен. Поэтому, если вам требуется объединить текущий вывод с информацией уже находящейся на экране, то установите этот режим в значение "Ложь" . Режимы "X" и "Y" определяют точку на экране, с которой начинается вывод информации. Экран блока EV3 имеет 178 пикселей (точек) в ширину и 128 пикселей в высоту. Режим "X" может принимать значения от 0 до 177, режим "Y" может принимать значения от 0 до 127. Верхняя левая точка имеет координаты (0, 0), правая нижняя (177, 127)

Во время настройки программного блока "Экран" можно включить режим предварительного просмотра (Рис. 9 поз. 3) и визуально оценить результат настроек вывода информации.

В режиме "Фигуры" (Рис. 11 поз. 1 ) настройки программного блока меняются в зависимости от типа фигуры. Так при отображении круга необходимо будет задать координаты "X" и "Y" центра окружности, а также значение "Радиуса" . Параметр "Заполнить" (Рис. 11 поз. 2) отвечает за то, что будет отображен либо контур фигуры, либо внутренняя область фигуры будет заполнена цветом, заданным в параметре "Цвет" (Рис. 11 поз. 3) .

Для отображения прямой необходимо задать координаты двух крайних точек, между которыми располагается прямая.

Чтобы отобразить прямоугольник следует задать координаты "X" и "Y" левого верхнего угла прямоугольника, а также его "Ширину" и "Высоту" .

Отобразить точку проще всего! Укажите лишь её координаты "X" и "Y".

Режим "Изображение" , наверное, самый интересный и самый используемый режим. Он позволяет выводить на экран изображения. Среда программирования содержит огромную библиотеку изображений, отсортированную по категориям. В дополнение к имеющимся изображениям вы всегда можете создать свой рисунок и, вставив его в проект, вывести на экран. ("Главное меню среды программирования" - "Инструменты" - "Редактор изображения") . Создавая своё изображение, вы можете также вывести на экран символы русского алфавита.

Как вы видите - отображению информации на экране главного модуля EV3 среда программирования придает огромное значение. Давайте рассмотрим следующий важный программный блок "Звук" . С помощью этого блока мы можем выводить на встроенный динамик блока EV3 звуковые файлы, тона произвольной длительности и частоты, а также музыкальные ноты. Давайте рассмотрим настройки программного блока в режиме "Воспроизвести тон" (Рис. 15) . В этом режиме необходимо задать "Частоту" тона (Рис. 15 поз. 1) , "Продолжительность" звучания в секундах (Рис. 15 поз. 2) , а также громкость звучания (Рис. 15 поз. 3) .

В режиме "Воспроизвести ноту" вам вместо частоты тона необходимо выбрать ноту на виртуальной клавиатуре, а также установить длительность звучания и громкость (Рис. 16) .

В режиме "Воспроизвести файл" вы можете выбрать один из звуковых файлов из библиотеки (Рис. 17 поз. 1) , либо, подключив к компьютеру микрофон, с помощью Редактора звука ("Главное меню среды программирования" - "Инструменты" - "Редактор звука") записать собственный звуковой файл и включить его в проект.

Давайте отдельно рассмотрим параметр "Тип воспроизведения" (Рис. 17 поз. 2) , общий для всех режимов программного блока "Звук" . Если данный параметр установлен в значение "Ожидать завершения" , то управление следующему программному блоку будет передано только после полного воспроизведения звука или звукового файла. В случае установки одного из двух следующих значений начнется воспроизведение звука и управление в программе перейдет к следующему программному блоку, только звук или звуковой файл будет воспроизведен один раз или будет повторяться, пока не его не остановит другой программный блок "Звук" .

Нам осталось познакомиться с последним программным блоком зеленой палитры - блоком "Индикатор состояния модуля" . Вокруг кнопок управления модулем EV3 смонтирована цветовая индикация, которая может светиться одним из трех цветов: зеленым , оранжевым или красным . За включение - выключение цветовой индикации отвечает соответствующий режим (Рис. 18 поз. 1) . Параметр "Цвет" задает цветовое оформление индикации (Рис. 18 поз. 2) . Параметр "Импульсный" отвечает за включение - отключение режима мерцания цветовой индикации (Рис. 18 поз. 3) . Как можно использовать цветовую индикацию? Например, можно во время различных режимов работы робота использовать различные цветовые сигналы. Это поможет понять: так ли выполняется программа, как мы запланировали.


Давайте используем полученные знания на практике и немного "раскрасим" нашу программу из Задачи 1.

Задача 2

Попробуйте решить задачу самостоятельно, не подглядывая в решение!