четверг, 28 апреля 2011 г.

Занятие 24. Балансирующий робот-сигвей.

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

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

Алгоритм в Robolab
Большую часть алгоритма занимает инициализация переменных. Следуя принципу движения по линии, в качестве установки используем переменную grey - средние показания датчика освещенности в положении равновесия. Новый параметр scale задает масштабирование управляющего воздействия. По сути, это ослабляющий коэффициент, поскольку вырабатываемое регуляторами значение слишком высоко для моторов NXT.
С приведенными коэффициентами робот хорошо стабилизируется на однотонном светлом линолеуме или парте. Т.е. ему не требуется белый цвет поверхности. Для запуска нужно достаточно точно установить сигвея в положении равновесия. Если робот стартует при некотором наклоне вперед или назад, то сразу начинает движение в направлении наклона.


четверг, 14 апреля 2011 г.

Занятие 23. Танец в круге (кегельринг).

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

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

Алгоритм действий "Танец в круге" таков:
  1. ехать вперед, пока показания датчика не понизятся на 5 пунктов (лучше 10);
  2. отъехать немного назад (полсекунды);
  3. развернуться примерно на 120-150 градусов (тоже по времени);
  4. повторять пункты 1-3 бесконечно.

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

Вытолкнуть все банки
Несколько пластиковых стаканчиков или пустых жестяных банок расставлены вниури круга, за черной линией на расстоянии 12-15 см от нее - это мусор, от которого необходимо очистить круг за кратчайшее время. Первые попытки запуска робота покажут несколько недостатков:
  1. стаканчики попадают под колеса, падают и плохо выталкиваются;
  2. даже вытолкнутые стаканчики остаются частично внитри круга, поскольку, увидев край, робот сразу устремляется назад;
  3. робот ведет себя как слон в посудной лавке;
  4. робот делает много движений впустую.
Избавимся от первого недостатка. Для этого построим бампер шириной 20-25 см рядом с датчиком освещенности.

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

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

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

Для точности управления моторами необходимо использовать другой тип команд: с контролируемым вращением. Эти команды находятся в разделе "Advanced Output Control"  и позволяют задавать мощность моторов от -100 до 100. В новом примере для компактности разместим все числовые параметры сверху, а модификаторы портов снизу.

Не делать лишних движений
Желание проконтролировать движение робота приводит к необходимости изменить траекторию движения таким образом, чтобы каждый раз, доехав до края, он возвращался в центр круга.
Севомоторы NXT имеют встроенный датчик оборотов, этим непременно надо воспользоваться. Для этого нужно обнулять показания датчика оборотов, когда робот окажется в центре. Отсчет времени невозможно повернуть вспять, чтобы снова придти в нулевую точку, а моторы можно. По замыслу робот проезжает некоторое количество оборотов вперед, после чего следует назад, пока датчик оборотов снова не будет ноль.
В Robolab для этого следует использовать специфический блок, который не обнуляет показания датчиков оборотов  при вызове (с буквой А на пиктограмме). Кроме того, в примере добавлены модификаторы "Encoder C" из палитры "NXT Commander" для ясности различия между командами управления мотором и датчиками.

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

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


среда, 6 апреля 2011 г.

Занятие 20. Пропорционально-дифференциальный регулятор.


Конструкция робота для движения вдоль стенки
На базовую тележку надо прикрепить датчик расстояния и подключить его на 1 порт.
Датчик расстояния слегка выносится вперед:
Ориентацию датчика можно варьировать:

Движение вдоль стенки
Решим такую задачу. Робот должен двигаться вдоль стенки на заданном расстоянии L. Предположим, что левое колесо робота управляется мотором B, правое - мотором С, а датчик расстояния, подключенный к порту 1, закреплен несколько впереди корпуса тележки (это важно!) и направлен на стену справа по ходу движения.

Расстояние до стенки в настоящий момент времени, которое показывает датчик, обозначим S1. Измеряется она в сантиметрах.
Моторы двигаются со средней скоростью 50% от максимума,  но при отклонении от заданного курса на них осуществляется управляющее воздействие u (на мотор В 50+u, на мотор С 50-u):
u=k*(S1-L),
где k - некий усиливающий коэффициент, определяющий воздействие регулятора на систему.
Таким образом, при S1=L робот не меняет курса и едет прямо. В случае отклонения его курс корректируется. Для робота NXT средних размеров коэффициент k может колебаться от  1 до 10 в зависимости от многих факторов. Подберите его самостоятельно.
В данном случае П-регулятор будет эффектно работать только при малых углах отклонения. Кроме то, движение практически всегда будет происходить по волнообразной траектории. Сделать регулирование более точным позволит введение новых принципов, учитывающих отклонение робота от курса. 

Пропорционально-дифференциальный регулятор

В некоторых случаях П-регулятор может вывести систему из устойчивого состояния.

Например, если робот направлен от стенки,  но находится по отношения к ней ближе заданного расстояния, на моторы поступит команда еще сильнее повернуть от стенки, в результате чего с ней может быть утерян контакт (датчик расстояния получает отраженный сигнал практически только от перпендикулярной поверхности).
Для защиты от подобных ситуаций добавим в регулятор дифференциальную составляющую, которая будет следить за направлением движения робота. 
u=k1*(S -L)+k2*(s1-Sold),
где Sold - расстояние на предыдущем шаге.

Необходимо подобрать подходящие значения коэффициентов k1 и k2. Обычно подбор начинается с пропорционального коэффициента (k1) при нулевом дифференциальном (k2=0). Когда достигнута некоторая стабильность на небольших отклонениях, добавляется дифференциальная составляющая.

Конструкция робота с датчиком расстояния, расположенным под углом

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

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

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

Как и впервой конструкции, датчик располагается вертикально:

Увеличенное за счет корпуса робота расстояние до стены способствует расширению области обзора:

Очевидно, что изменение конструкции влечет изменение коэффициентов регулятора k1 и k2. Обычно подбор начинается с пропорционального коэффициента при нулевом дифференциальном. Когда  достигнута  некоторая  стабильность  на  небольших  отклонениях,  добавляется дифференциальная составляющая.

среда, 30 марта 2011 г.

Занятие 22. Пропорциональный регулятор.

Пропорциональный регулятор - это устройство, оказывающее управляющее воздействие u(t) на объект пропорционально его линейному отклонению e(t) от заданного состояния x0(t);
e(t)=x0(t)-x(t), где x(t) - состояние в данный момент времени;
u(t)=ke(t), где k - усиливающий коэффициент.
То есть, чем дальше робот отклоняется от заданного курса, тем активнее должны работать моторы, выравнивая его.

Движение по линии с одним датчиком освещенности с помощью П-регулятора

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

Вот это и поможет построить П-регулятор.
Определяя состояние работа как показания датчика освещенности, научимся оказывать пропорциональное управляющее воздействие на моторы по следующему закону:
e=s1-grey, где s1 - текущие показания датчика, а grey - заданное значение.
Коэффициент k (равный в данном примере 2) должен быть достаточно мал (от 1 до 3). Такой регулятор эффективно работает только для малых углов отклонения, поэтому робота надо ставить в направлении движения так, чтобы датчик оказался по левую сторону от черной линии. Нетрудно заметить, что движение по линии на П-регуляторе отличается плавность. и на некоторых участках работ движется практически прямолинейно или точно повторяя изгибы линии.

Калибровка датчика

Обратимся к числу 48, использованному в формуле. Это среднее арифметическое показание датчика освещенности на черном и на белом, например (40+56)/2=48. Однако показания датчиков часто меняются по разным причинам: другая поверхность, изменение общей освещенности в помещении, небольшая модификация конструкции и т.п. Поэтому проведем калибровку робота вручную, определив показания датчика освещенности на белом и на черном.

Движение по линии с двумя датчиками освещенности с помощью П-регулятора
 
Правильно проехать перекресток с одним датчиком освещенности довольно сложно. Если требуется сделать это с достаточно высокой скоростью,нужно хотя бы два датчика, поставленные не расстоянии в две ширины линии (или шире).
При движении возможны четыре состояния датчика:
  • оба на белом - движение прямо;
  • левый (s1) не черном, правый (s2) на белом - движение налево;
  • левый на белом, правый на черном - движение направо;
  • оба на черном - движение прямо.

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

И еще замечание. Встречаются датчики, показания которых расходятся на 10-20%. Желательно их не ставить в паре на регулятор с большим коэффициентом, поскольку при резком изменении общей освещенности даже на однородном белом поле отклонения могут оказаться различными, что приведет к неожиданным последствиям.

четверг, 17 марта 2011 г.

Занятие 21. Релейный регулятор.

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

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

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

среда, 2 марта 2011 г.

Занятие 20. Двухмоторная тележка

Это самая распространенная разновидность роботов. Тележка может быть с тремя точками опоры, две из которых - ведущие колеса, а третья - волокуша, или свободно вращающееся колесико.
Процесс построения одной из наиболее простых тележек.
Шаг 1. Для крепления моторов, которые будут располагаться по обе стороны от NXT, берем две изогнутые балки:
Шаг 2. В зависимости от расположения балок центр тяжести тележки может быть смещен:
Шаг3. Дополнительные крепления для придания устойчивости:
Все готово для установки контроллера:

Шаг 4. Колеса устанавливаются на 6-модульные оси, втулки предохраняют от нежелательного трения о корпус.
Шаг 5. Конструкция для крепления третьего колеса:
Шаг 6. Элементы подвижного колеса. Длины осей - 3 и 5 модулей. Колесо должно вращаться свободно.
Тележка готова.
Знакомство со средой Robolab 2.9
Палитра функций включает в себя различные типы команд:
Простейшие алгоритмы.
Квадрат. По умолчанию считаем, что левый мотор подключен к порту В, правый - к порту С. Проверьте подключение.


Повторяй 4 раза:
  • моторы B, C вперед;
  • жди N/100 секунды;
  • мотор С назад (B продолжает двигаться вперед);
  • жди N/100 секунды.
Стоп моторы.

среда, 23 февраля 2011 г.

Занятие 19. Шагающий робот

Требования к конструкции:
  • механизм должен стоять на поверхности, упираясь только на четыре конечности, каждая из которых не может совершать вращительное движение вокруг одного из центра;
  • движение конечностей должно быть возвратно-поступательным;
  • в конструкции робота запрещено использование колес, соприкасающихся с поверхностью земли;
  • конечности робота приводятся в движение одним мотором с помощью механической передачи;
  • мотор присоединен к источнику питания;
  • центр тяжести робота должен быть смещен вперед по ходу движения.
Процесс сборки
Шаг 1. Единственный привод обеспечит прямолинейное движение робота:
Шаг 2. 15-ти модульные балки крепятся к мотору и к угловым балкам из дополнительного набора:
Шаг 3.NXT крепится к угловым балкам:

Шаг 4. Ведущие оси будут разной длины: 5 и 6-ти модульные. Они вставляются в мотор с двух сторон так, чтобы из соответствующих балок выступали части осей длиной ровно 1 модуль.

Шаг 5. На ведущие оси насаживаются 24-зубые шестерни.

Шаг 6. Остальные штифты крепятся на бежевые штифты-полуоси. Синие для этой цели не подойдут, поскольку создают очень большое  трение.

Шаг 7. Выравнивание крайних шестеренок. Все 4 основные шестерни (24 зуба) должны быть расположены так, чтобы пары отверстий на них были строго параллельны друг другц. Расположение 40-зубых центральных шестерней не играет роли.

Другой способы выравнивания:

Шаг 8.Часть из восьми гладких штифтов вставляется а 24-зубые шестеренки симметрично относительно центра большой шестерни. И ровно наоборот с другой стороны: то есть если справа от NXТ они были ближе к центру, то слева должны быть дальше от центра.
 Со второй строны штифты вставлены противоположно относительно первой:

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

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

Шаг 11. Все коленца одинаковы. Остается их правильно присоединить. балки к шестеренкам следует крепить по принципу: диагонально-противоположные конечности движутся одинаково, а соседние отличаются от них на пол-оборота. При этом следует использовать гладкие штифты.

С другой стороны конечности встают в противофазе.

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

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