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

На втором занятии мы детальнее познакомимся со средой программирования и подробно изучим команды, задающие движение нашему роботу-тележке, собранному на первом занятии. Итак, давайте запустим среду программирования 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

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

Аннотация: Задача управления является очень актуальной в современной науке и технике. Пусть имеется система (объект управления), которую мы должны поддерживать в заданном состоянии. Для этого у нас имеется регулятор, который (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) . Она имеет следующие параметры.

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


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

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

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


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


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

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

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

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



Для того распознавания пересечений направляющих линий может применяться множество различных способов, например в подобных целях достаточно часто применяются камеры. Но обработка изображений требует большой производительности бортового компьютера робота, поэтому такие решения не всегда применимы. В данной работе рассматривается способ управления мобильным роботом с помощью информации, поступающей от массива ИК-датчиков. С помощью массива из семи датчиков S1-S7 становится возможным определить местоположение пересечений линий. Поскольку вариантов наиболее вероятных пересечений достаточно много, следует настраивать управляющую программу робота на максимально возможное количество допустимых вариантов, определенных на основании показаний ИК-датчиков.

Выполнение маневров вблизи перекрестков

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

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

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


Аналогичным образом можно разработать программу движения робота вдоль любого из более сложных маршрутов. Для этого всего лишь необходимо задать последовательность движения робота через пересечения маршрута.

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


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

Вышеуказанные функции можно разделить на два основных типа:

1) Функции, осуществляющие поворот робота на Т-образных и Г-образных перекрестках.

2) Функции, с помощью которых робот движется до ближайшего перекрестка без каких-либо действий.

В первом случае функция состоит из двух отдельных операций – вызова функции движения вперед и вызова функции поворота в заданном направлении.

Функция l_node_l_turn предназначена для осуществления поворота налево на ближайшем левом пересечении. Функция состоит из двух других функций: l_node_forward отвечающей за движение до ближайшего Г-образного перекрестка с поворотом налево, и pivot_left, за сам отвечающей за поворот налево.

Функция l_node_forward в бесконечном цикле ищет точку пересечения траекторий с помощью функции l_node_detect. Во время поиска робот постоянно следует линии с помощью функции follow_line. После обнаружения точки пересечения маршрутов робот совершает кратковременный рывок вперед, ограниченный временем таймера, для того чтобы слегка сместиться для дальнейшего поворота налево. Данное перемещение крайне важно, для того чтобы после маневра робот оказался по центру направляющей линии. Особое внимание следует уделить процессу распознавания точек пересечения маршрута. Очевидно, что в процессе движения робота по маршруту могут возникнуть различные ситуации, но большинство из них можно описать формальными признаками, например по срабатыванию ИК-датчиков.


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


На рисунке черным цветом отмечены ИК-датчики, расположенные над черной линией, в свою очередь белым цветом – расположенные над белым участком поверхности. В процессе движения робота можно опросить каждый из датчиков и с помощью перебора вариантов определить текущее положение робота.


В приведенной выше функции описывается процесс распознавания левого Г-образного поворота. Согласно приведенному алгоритму под подобной точкой маршрута понимается участок траектории, на котором срабатывают ИК-датчики № 1, № 2, № 3.

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


Меры повышения точности работы управляющей программы крайне важны при разработке системы управления. Пренебрежение ими может привести к некорректной работе алгоритма и всей робототехнической системы в целом.

Выполнение сложных маневров

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


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


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

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

Каждая из этих функций состоит из функции следования маршруту - diag_corner_forward, I_curve_branch_forward и функции поворота в требуемом направлении – pivot_left, pivot_right. Контроль за движением робота вдоль линии под углом осуществляется с помощью ИК-датчиков № 1 и № 7, которые задают положение робота над линией. Если же робот оказывается над линией, то запускается функция follow_line, с помощью которой робот отслеживает собственное положение относительно линии и центрируется на ней с помощью ИК-датчика № 4.

Следование линии нацелено в первую очередь на движение вдоль нее с ориентацией центра робота над линией. Поскольку центр робота совпадает с ИК-датчиком № 4, функция follow_line стремится минимизировать отклонения ИК-датчиков № 3 и № 5 относительно линии.


Суть данного процесса сводится к выполнению ряда условий:

1) Если ИК-датчик № 4 находится над линией, то робот едет прямолинейно с максимальной скоростью.

2) Если один из ИК-датчиков № 3 или № 5 обнаружил линию, то робот поворачивается в противоположном направлении с минимальной скоростью.

Во время следования линии изменяется, в зависимости от положения робота, скорость его маневрирования. Это сделано из-за того, что в некоторых ситуациях необходимы плавные движения робота, чтобы он не съехал с линии, например при маневрировании между датчиками № 3 и № 5.

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

За изменение скорости движения робота отвечает функция change_speed, которая задает скорость вращения приводов в процентном соотношении от значения максимальной скорости.


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


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

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

Заключение

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


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

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


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

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

Колёсные и гусеничные роботы

Наиболее распространёнными роботами данного класса являются четырёхколёсные и гусеничные роботы. Создаются также роботы, имеющие другое число колёс - два или одно. Такого рода решения позволяют упростить конструкцию робота, а также придать роботу возможность работать в пространствах, где четырёхколёсная конструкция оказывается неработоспособна.


Сегвей в Музее роботов в Нагоя.

Двухколёсные роботы, как правило, для определения угла наклона корпуса робота и выработки подаваемого на приводы роботов соответствующего управляющего напряжения (с целью обеспечить удержание равновесия и выполнение необходимых перемещений) используют те или иные гироскопические устройства. Задача удержания равновесия двухколёсного робота связана с динамикой обратного маятника. На данный момент, разработано множество подобных «балансирующих» устройств. К таким устройствам можно отнести Сегвей, который может быть использован, как компонент робота; так например сегвей использован как транспортная платформа в разработанном НАСА роботе Робонавт.

Одноколёсные роботы во многом представляют собой развитие идей, связанных с двухколёсными роботами. Для перемещения в 2D пространстве в качестве единственного колеса может использоваться шар, приводимый во вращение несколькими приводами. Несколько разработок подобных роботов уже существуют. Примерами могут служить шаробот разработанный в университете Карнеги - Меллона, шаробот «BallIP» , разработанный в университете Тохоку Гакуин (англ. Tohoku Gakuin University ), или шаробот Rezero, разработанный в Швейцарской высшей технической школе. Роботы такого типа имеют некоторые преимущества, связанные с их вытянутой формой, которые могут позволить им лучше интегрироваться в человеческое окружение, чем это возможно для роботов некоторых других типов.

Существует некоторое количество прототипов сферических роботов. Некоторые из них для организации перемещения используют вращение внутренней массы. Роботов подобного типа называют англ. spherical orb robots , англ.orb bot и англ.ball bot .

Для перемещения по неровным поверхностям, траве и каменистой местности разрабатываются шестиколёсные роботы, которые имеют большее сцепление, по сравнению с четырёхколёсными. Ещё большее сцепление обеспечивают гусеницы. Многие современные боевые роботы, а также роботы, предназначенные для перемещения по грубым поверхностям разрабатываются как гусеничные. Вместе с тем, затруднено использование подобных роботов в помещениях, на гладких покрытиях и коврах. Примерами подобных роботов могут служить разработанный НАСА робот англ. Urban Robot («Urbie»), разработанные компанией iRobot роботы Warrior и PackBot.

Шагающие роботы


Робот-андроид ASIMO, производство Honda.

Первые публикации, посвящённые теоретическим и практическим вопросам создания шагающих роботов , относятся к 1970 - 1980-м годам XX в.

Перемещение робота с использованием «ног» представляет собой сложную задачу динамики. Уже создано некоторое количество роботов, перемещающихся на двух ногах, но эти роботы пока не могут достичь такого устойчивого движения, какое присуще человеку. Также создано множество механизмов, перемещающихся на более чем двух конечностях. Внимание к подобным конструкциям обусловлено тем, что они легче в проектировании. Предлагаются также гибридные варианты (как, например, роботы из фильма «Я, робот», способные перемещаться на двух конечностях во время ходьбы и на четырёх конечностях во время бега).

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

  • ZMP-технология: ZMP (англ. ) (англ. Zero Moment Point , «точка нулевого момента») - алгоритм, использующийся в роботах, подобных ASIMO компании Хонда. Бортовой компьютер управляет роботом таким образом, чтобы сумма всех внешних сил, действующих на робота, была направлена в сторону поверхности, по которой перемещается робот. Благодаря этому не создаётся крутящего момента, который мог бы стать причиной падения робота. Подобный способ движения не характерен для человека, в чём можно убедиться сравнив манеру перемещения робота ASIMO и человека.
  • Прыгающие роботы: в 1980-х годах профессором Марком Рейбертом (англ. Marc Raibert из англ. « Leg Laboratory » Массачусетского технологического института был разработан робот, способный сохранять равновесие посредством прыжков, используя только одну ногу. Движения робота напоминают движения человека на тренажёре пого-стик. Впоследствии алгоритм был расширен на механизмы, использующие две и четыре ноги. Подобные роботы продемонстрировали способности к бегу и способность выполнять сальто. Роботы, перемещающиеся на четырёх конечностях, продемонстрировали бег, перемещение рысью, аллюром, скачками.
  • Адаптивные алгоритмы поддержания равновесия. В основном базируются на расчете отклонений мгновенного положения центра масс робота от статически устойчивого положения или некоей наперед заданной траектории его движения. В частности, подобную технологию использует шагающий робот-носильщик Big Dog. При движении этот робот поддерживает постоянным отклонение текущего положения центра масс от точки статической устойчивости, что влечет необходимость своеобразной постановки ног («коленки внутрь» или «тянитолкай»), а также создает проблемы с остановкой машины на одном месте и отработкой переходных режимов ходьбы. Адаптивный алгоритм поддержания устойчивости также может базироваться на сохранении постоянного направления вектора скорости центра масс системы, однако подобные методики оказываются эффективными только на достаточно высоких скоростях. Наибольший интерес для современной робототехники представляет разработка комбинированных методик поддержания устойчивости, сочетающих расчет кинематических характеристик системы с высокоэффективными методами вероятностного и эвристического анализа.

Другие методы перемещения

  • Летающие роботы. Большинство современных самолётов являются летающими роботами, управляемыми пилотами. Автопилот способен контролировать полёт на всех стадиях - включая взлёт и посадку. К летающим роботам относятся также беспилотные летательные аппараты (БПЛА; важный их подкласс составляют крылатые ракеты). Подобные аппараты имеют, как правило, небольшой вес (за счёт отсутствия пилота) и могут выполнять опасные миссии; некоторые БПЛА способны вести огонь по команде оператора. Разрабатываются также БПЛА, способные вести огонь автоматически. Кроме метода движения, используемого самолётами, летающими роботами используются и другие методы движения - например, подобные тем, что используют пингвины, скаты, медузы; такой способ перемещения используют роботы Air Penguin, Air Ray и Air Jelly компании Festo, или используют методы полёта присущие насекомым, как, например, RoboBee.

Два змееподобных ползающих робота. Левый оснащён 64-мя приводами, правый - десятью.

  • Ползающие роботы. Существует ряд разработок роботов, перемещающихся подобно змеям, червям, слизням. Предполагается, что подобный способ перемещения может придать им возможность перемещаться в узких пространствах; в частности, предполагается использовать подобных роботов для поиска людей под обломками рухнувших зданий. Так же, разработаны змееподобные роботы, способные перемещаться в воде; примером подобной конструкции может служить японский робот ACM-R5.
  • Роботы, перемещающиеся по вертикальным поверхностям. При проектировании подобных роботов используются различные подходы. Первый подход - проектирование роботов, перемещающихся подобно человеку, взбирающемуся на стену, покрытую выступами. Примером подобной конструкции может служить разработанный в Стэнфордском университете робот Capuchin. Другой подход - проектирование роботов, перемещающихся подобно гекконам. Примерами подобных роботов являются Wallbot и Stickybot
  • Плавающие роботы. Существует много разработок роботов перемещающихся в воде подражая движениям рыб. По некоторым подсчетам эффективность подобного движения может на 80 % превосходить эффективность движения с использованием гребного винта. Кроме того, подобные конструкции производят меньше шума, а также отличаются повышенной манёвренностью. Это является причиной высокого интереса исследователей к роботам, движущимся подобно рыбам. Примерами подобных роботов являются разработанный в Эссекском университете робот Robotic Fish и робот Tuna разработанный Institute of Field Robotics (англ.) для исследования и моделирования способа движения, характерного для тунца. Так же, существуют разработки плавающих роботов других конструкций. Примерами являются роботы компании Festo: Aqua Ray имитирующий движения ската и Aqua Jelly, имитирующий движение медузы.

Мы предполагаем, что владелец конструктора уже знаком с контроллером 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 исполняется постоянно, то робот будет выполнять эти команды пока включено питание.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: