Карпов В.Э. Робот M48. К вопросу движения по полосе Содержание Введение .............................................................................................................................................. 2 Контроллер.......................................................................................................................................... 2 Датчики и органы управления .......................................................................................................... 4 Органы управления ........................................................................................................................ 4 Фотодатчики ................................................................................................................................... 4 Ходовая часть ..................................................................................................................................... 5 Алгоритмы управления...................................................................................................................... 6 1. Линейный регулятор с независимым управлением ............................................................ 7 2. Дискретная система управления ........................................................................................... 8 3. Пропорциональное управление ............................................................................................ 8 4. Нелинейное управление (косинусный закон) .................................................................... 10 Эксперименты................................................................................................................................... 11 Вид трассы и способы управления ............................................................................................. 11 Замечания и комментарии ........................................................................................................... 11 1. Реальные законы управления .............................................................................................. 11 2. Проблема торможения ......................................................................................................... 12 3. Ограничения контроллера ................................................................................................... 13 4. Прочие системы датчиков ................................................................................................... 13 5. Регулировка скорости .......................................................................................................... 14 Заключение ....................................................................................................................................... 14 Ссылки ............................................................................................................................................... 15 Приложение 1. Руководство по эксплуатации .............................................................................. 16 Приложение 3. Программа «Слалом» ............................................................................................ 18 Приложение 3. Контроллер робота (ATmega48) ........................................................................... 19 Приложение 4. Состав диска с дополнительными материалами ................................................ 20 1 Введение Ниже описывается простой учебный робот, предназначенный для демонстрации некоторых законов управления на примере решения задачи движения по полосе. Изложение построено таким образом, чтобы охватить основные этапы создания подобного рода устройств - от выбора элементной базы до некоторых особенностей программного обеспечения. При этом предполагается, что читатель имеет достаточный опыт работы с микроконтроллерными системами. В каком-то смысле предлагаемый ниже материал может рассматриваться как продолжение курса «Спортивная робототехника». Основная утилитарная задача заключается не в том, чтобы построить очередного робота, решающего известную задачу движения, а в том, чтобы обратить внимание читателя на некоторые общие для решения целого ряда задач моменты. Таковыми моментами являются и разработка архитектуры контроллера, и методология выбора датчиков, и интерфейсы подключения внешних устройств (датчиков) и, безусловно, некоторые вопросы построения регуляторов. Контроллер Наш контроллер построен на основе ОЭВМ ATmega48. Обоснование выбора именно ATmega48 может выглядеть следующим образом: 1. Это - весьма дешевая микросхема. 2. Пора переходить (в целях экономии места) к «компактным» компонентам. 3. ATmega48 совместима с более серьезными изделиями - ATmega88 и ATmega168. Последнее означает, что вместо ATmega48 можно установить ATmega88 или ATmega168, причем не нарушая ни программной (предыдущий код будет работать), ни аппаратной (те же выводы) совместимости. Действительно, разница между ATmega48, ATmega88 и ATmega168 сводится к имеющейся у них памяти: ATmega48 ATmega88 ATmega168 Флэш-память 4K 8K 16 K Память EEPROM 256 512 512 Память ОЗУ 512 1K 1K Состав контроллера. Контроллер робота относится к категории систем «общего» назначения. Как всегда этот «универсализм» является результатом компромисса между гибкостью и удобством. Ориентируясь больше на решение задач мобильной робототехники, был получен следующий вариант контроллера, имеющего на борту: эмиттерные повторители – 2 шт. пищалка – 1 шт. драйвер двигателей L293 – 1 шт. свободные выходы – 2 шт. входы датчиков с интерфейсом «сигнал-плюс-минус» – 6 шт. драйвер интерфейса RS232. два раздельных входа питания (логика и силовая часть - L293). разъем программирования. Частота кварцевого резонатора - 7.3728 МГц. Все это - достаточно очевидные вещи. Пояснения, возможно, требует интерфейс подключения датчиков. Дело в том, что часто бывает удобно использовать в качестве 2 датчиков некоторые схемы, требующие отдельного питания. Это и ИК-дальномеры Sharp, и датчики освещенности типа QRD1114 и многие другие. Как бы то ни было, все они хотят питание и возвращают уже готовый сигнал, который мы направляем на вход АЦП. Для этого и применяются в контроллере не пара контактов («сигнал+земля»), а тройка - «Сигнал» «+5В» - «Земля». Кстати, именно такое расположение контактов («сигнал» - «+» - «-») является достаточно безопасным. Если при подключении перепутать положение вилки, то короткого замыкания или фатальной переполюсовки не получится, т.к. «+» останется на своем месте. Что касается пищалки, то это действительно полезная штука и ради нее можно не пожалеть усилий на изготовление транзисторного ключа. Ниже приведена схема контроллера. Рис.1. Схема электрическая принципиальная Разъем питания RS232 Драйвер двигателей Свободные выходы (1-2) Разъем двигателей RS232 Внешнее питание двигателей (отключено) Входы датчиков (1-6) -- Пищалка + + + Разъем подключения фототранзисторов Разъем программирования 3 Рис.2. Печатная плата и внешний вид контроллера Получившаяся плата достаточно компактна и удобна. Ее габариты - примерно 60x56мм. Датчики и органы управления Органы управления К органам управления относятся прежде всего различного рода кнопки, тумблеры, переключатели, позволяющие устанавливать различные режимы работы, настраивать робота и т.п. Все они используют стандартный интерфейс «сигнал» - «+» - «-» и подключены ко входам АЦП. Входы АЦП - это порты ввода, находящиеся в т.н. T-состоянии, т.е. они не подтянуты ни к земле, ни к высокому уровню. Именно поэтому и простые контактные и двухпозиционные переключатели следует подключать по нижеприведенным схемам. Сигнал 5.6K + - Сигнал + 5.6K - Рис.3. Подключение органов управления В нашем роботе в качестве органов управления используется кнопка «Старт» и переключатели с фиксированным положением («Выбор режима»). Кроме того, как будет видно ниже, полезным окажется еще один орган управления - переменный резистор установки максимальной скорости. Фотодатчики Основными датчиками робота являются датчики освещенности, с помощью которых робот отслеживает свое местоположение относительно полосы. Об этих датчиках говорилось много в предыдущих курсах, однако здесь хотелось бы обратить внимание на некоторые важные моменты. Вариантов датчиков освещенности может быть великое множество. В нашей задаче важнейшим требованиями к ним являются достаточная чувствительность и линейность характеристик. Рассмотрим два варианта датчиков. Датчик освещенности на основе оптопары QRD1114. Это - «дорогой» вариант (в том случае, если приходится пользоваться чем-то вроде оценочной платы инфракрасного рефлективного датчика от INNOVATIVE EXPERIMENT IE-ZX-03Q. IE-ZX-03Q - оптопара «излучатель-приемник» в одном корпусе. Проблем с подключением и использованием этой оптопары обычно нет. Единственное, что следует помнить – это большую зависимость значения сигнала от высоты над поверхностью (следует держать датчик на одном уровне). «Самодельный» датчик. Это тоже оптопара, состоящая из сверхяркого излучателя и фотоприемника. Это обычно дешевле, однако сопряжено с некоторыми особенностями: 1. Эмиттерный повторитель. Специфика АЦП требует, увы, наличия достаточно хорошего тока. А отсюда следует желательность наличия, скажем, схемы эмиттерного повторителя. Или операционного усилителя. Ниже представлены некоторые варианты подключения фотодатчика. 4 Фд + ATMega Rф Т1 КТ 3102 Фд R2 100к R Vcc АЦП R1 1к - а) б) Рис.4. Схемы подключения фотодатчика 2. Подсветка. В качестве подсветки можно использовать любой мощный ИК-диод, однако удобнее, если он будет излучать в видимом диапазоне (удобнее для отладки и контроля). Фотоприемники обладают обычно достаточно широкой полосой чувствительности, поэтому светить можно различными цветами - от синего (что, в общем-то, уже не очень хорошо) до красного. Здесь важнее не перестараться с яркостью пятна подсветки. Пятно лучше немного приглушить, поставив ограничивающее сопротивление побольше либо приподняв датчики над поверхностью. В противном случае будет очень сильное отражение даже от черной полосы (на этом ловятся многие начинающие робототехники). 3. Фотоэлемент. Одним из наиболее распространенных и часто используемых фотоэлементов является фототранзистор. Фототранзистор дешев, у него очень хорошая чувствительность и малое время срабатывания. Однако у него есть один существенный недостаток - нелинейность характеристики. Он слишком быстро переходит в режим насыщения, не позволяя отследить изменение освещенности. Поэтому с ним надо работать весьма аккуратно. Гораздо удобнее использовать в качестве фотоэлемента «обычный» фоторезистор. Что-то вроде отечественного «СФ3-4Б». Он более медленный и не такой чувствительный, однако позволяет весьма устойчиво измерять освещенность в широких диапазонах, не срываясь в насыщение. А скорость его в нашей задаче несущественна. Ходовая часть Робот представляет собой круглую платформу с центральным расположением двух ходовых двигателей и двумя опорными колесами - спереди и сзади. Причем опорные колеса находятся выше уровня опорных колес на 2-3 мм. Это приводит с одной стороны, к некоторой продольной неустойчивости (робот при движении покачивается). С другой же, мы имеем хорошо управляемую систему, способную разворачиваться вокруг центра масс. Правда, двигаться такой робот может лишь по ровной поверхности. В качестве двигателей используются мотор-редукторы IE-BO2-48M (электродвигатель постоянного тока с редуктором 1:48). Питание - батарея из 4 аккумуляторов - 4.8-6В. 5 Рис.5. Вид спереди и вид сверху Алгоритмы управления Методов, алгоритмов и схем решения задачи движения по простой линии существует великое множество. Они рассчитаны на самые разные системы используемых датчиков полосы - от видеокамеры до простейшего порогового датчика освещенности. Мы рассмотрим лишь некоторые из них, в частности те, которые используют расположение пары датчиков освещенности по краям черной линии. Итак, наш робот оснащен парой датчиков освещенности, выдающих аналоговый сигнал, величина которого зависит от цвета поверхности. Рис.6. Расположение датчиков Кроме того, будем считать, что наше устройство обладает возможностью программной настройки датчиков на значения максимальной и минимальной освещенности. Речь идет о том, что в начале работы робот устанавливается обоими датчиками на светлый фон и происходит замер освещенности. Далее робот устанавливается датчиками на темную полосу и измеряется соответствующий сигнал. В дальнейшем система использует полученные граничные значения. Это позволяет настраиваться на различные режимы освещенности. В [Карпов, Волкова, 2010] описываются некоторые методы управления, основанные на том, что, в зависимости от значения регулируемой величины, происходит притормаживание того или иного ведущего колеса. Этот же принцип мы возьмем за основу системы управления для нашей задачи, однако начнем с более простых методов. 6 1. Линейный регулятор с независимым управлением Это есть не что иное, как программная эмуляция аналоговой схемы управления, той, которая использовалась в начальном курсе «Знакомство с автоматикой и электроникой» [Карпов, 2009]. Аналоговая схема представляла собой пару независимых регуляторов: срабатывание датчика освещенности приводило к запуску соответствующего двигателя. Если датчик освещенности уходил при движении робота со светлого фона, то соответствующий двигатель притормаживался и робот возвращался на маршрут. ФД1 СУ1 Д1 ФД2 СУ2 Д2 Рис.7. Два независимых регулятора Эта аналоговая схемы была очень проста и обеспечивала достаточно плавное управление. Были, однако, и некоторые проблемы: во-первых, требовалась очень аккуратная подстройка датчиков на текущий режим освещенности и контрастность линии. Во-вторых, практически неустранимой проблемой являлось проскакивание роботом линии на крутых поворотах - робот не мог резко затормозить и, тем более, вернуться на потерянную линию. Тем не менее, этот принцип управления достаточно прост для программной реализации. Пусть результатами калибровки датчиков будет следующие величины: FLW - значение сигнала от левого датчика на светлом фоне, FLB - значение сигнала от левого датчика на темном фоне, FRW - значение сигнала от правого датчика на светлом фоне, FRB - значение сигнала от правого датчика на темном фоне. Предположим, что значения управляемой величины - скорости вращения колес находятся в диапазоне от Vmin до Vmax. Скажем, от 0 до 100. Таковой величиной в нашем роботе является коэффициент заполнения управляющего сигнала ШИМ (в процентах). Поскольку для срабатывания двигателя следует приложить некоторое значительное напряжение (кстати, пусковой ток может быть весьма велик), то величина Vmin обычно больше нуля. В нашем роботе Vmin = 10. Тогда основной управляющей функцией будет следующая простая конструкция, позволяющая преобразовывать значение освещенности в скорость: int U2Speed(float u, float FotoMin, float FotoMax) // Напряжение (сигнал от датчика) в скорость { int v; v = (u-FotoMin)*(Vmax-Vmin)/(FotoMax-FotoMin); if(v<Vmin) v = Vmin; if(v>Vmax) v = Vmax; return v; } Основная же программа содержит следующую очевидную последовательность операторов, которую мы приведем без комментариев: 7 fotoL = ReadAdc(0); //Считываем сигнал fotoR = ReadAdc(1); VL = U2Speed(fotoL, FLB, FLW); // Вычисляем скорость VR = U2Speed(fotoR, FRB, FRW); SetPWM(VL, VR); // Устанавливаем скорости вращения колес 2. Дискретная система управления Это - более упрощенный вариант предыдущей схемы. Здесь нам достаточно того, чтобы датчик определил цвет - либо светлый (фон), либо темный (полоса). Для этого в программу мы должны сравнивать значение сигнала с некоторым порогом - все, что ниже этого порога, считается черным, все, что выше - белым. Порог вычисляется так: либо берется среднее значение между темным и светлым, либо берется значение, смещенное от середины, скажем, 3/4 от интервала освещенности: Lim «Порог» (Lim = 3*(W-B)/4+B) Lim «Порог» (Lim=(B+W)/2) B W 0 FB FW 0 «Черный цвет» «Белый цвет» «Черный цвет» «Белый цвет» Рис.8. Варианты определения порога Желательность смещения порога от центра в сторону белого цвета связано с тем, что иногда на темной полосе имеются более светлые пятна. Будучи на взгляд темными (темносерыми), они, однако, могут восприниматься датчиками как вполне светлые участки, что приводит к ложному срабатыванию датчика. Потому желательно подстраховаться и сместить границу: //Вычисление границы - 3/4 от интервала LimLeft = 3*(FLW-FLB)/4+FLB; LimRight = 3*(FRW-FRB)/4+FRB; Тело основного цикла программы тогда будет выглядеть так: fotoL = ReadAdc(0); //Считываем сигнал fotoR = ReadAdc(1); if(fotoR>LimRight) //Сравниваем с порогом VR = Vmax; else VR = Vmin; if(fotoL>LimLeft) VL = Vmax; else VL = Vmin; SetPWM(VL, VR); // Устанавливаем скорости вращения колес 3. Пропорциональное управление А теперь рассмотрим два принципа управления, в которых участвует регулируемая величина. Этой регулируемой величиной будет являться разность сигналов от левого правого фотодатчиков. Тогда нашей целью будет выработка таких сигналов управления, которые будут стараться сводить к нулю это рассогласование. Действительно, когда робот находится точно над темной полосой, оба датчика определяют одинаковые величины 8 освещенности, разность которых близка к нулю. При сходе с линии значение сигнала от одного из датчиков уменьшается, разность сигналов становится ненулевой. В этом случае надо, например, притормаживать один из двигателей или увеличивать скорость другого. Поскольку же мы делаем робота, который должен проходить маршрут с максимальной скоростью, то, видимо, придется все же притормаживать. Пусть VL и VR - требуемые скорости вращения левого и правого колес соответственно. При этом определены их минимальное и максимальное значения Vmin и Vmax. VL,R[Vmin, Vmax] Будем считать, что величина разности сигналов также определена на некотором отрезке [min, max] Итак, повторим, принцип управления заключается в том, что в зависимости от будет происходить притормаживание того или иного колеса. Это притормаживание может осуществляться как линейно (пропорционально ), так и нелинейно. На рис.9 изображены зависимости скорости вращения колеса от для этих двух случаев. V V Vmax Vmax max max а) б) Рис.9. Пропорциональное (а) и косинусное (б) управление Как видно, чем больше отклонение , тем сильнее притормаживается соответствующее колесо. При расположении линии прямо под роботом (=0) притормаживание отсутствует и робот движется прямо с максимальной скоростью. Формулы закона пропорционального управления выглядят следующим образом: )( V V ) ( max max min V V R min max V V L max при α0 )( V V ) ( min max min V V L min max V V R max при α<0 Их программная реализация представлена функцией void RgPropor(float a, int *VL, int *VR) // Пропорциональное управление // a - отклонение регулируемой величины, 9 // VL, VR - скорость левого и правого колеса { float d; *VL = *VR = Vmax; if(a>0) d = (MaxVal-a)*(Vmax-Vmin)/MaxVal+Vmin; else // a<0 d = (MinVal-a)*(Vmax-Vmin)/MinVal+Vmin; if(a>0) *VL = d; else *VR = d; } Тело основного цикла: fotoL = ReadAdc(0); // Считываем сигнал fotoR = ReadAdc(1); d = (fotoR-fotoL); RgPropor(d, &VL, &VR); SetPWM(VL, VR); // Устанавливаем скорости вращения колес 4. Нелинейное управление (косинусный закон) Значительно лучшие результаты дает нелинейное управление, при котором большее значение отклонения вызывает большее управляющее воздействие. Удобно представить величину в виде значения градуса (коли мы будем вычислять косинус). Если максимальной величине отклонения будет соответствовать угол max = 90, а минимальной - угол min = 0, то достаточно хорошие результаты дает следующий закон управления: V ( V V )Cos ( ) V L max min min при α0 V V R max V ( V V )Cos ( ) V R max min min при α<0 V V L max Его программная реализация может выглядеть так: void RgCos(int a, int *VL, int *VR) // “Косинусное” управление // a - отклонение регулируемой величины (от 0 до 90), { float COSA; int d; COSA = cos(a*PI/180.0); *VL = *VR = Vmax; d = (Vmax-Vmin)*COSA+Vmin; if(a>0) *VL = d; else *VR = d; } 10 Тело основного цикла: fotoL = ReadAdc(0); // Считываем сигнал fotoR = ReadAdc(1); a = (fotoR-fotoL); d = (float)(a-MinVal)*(Amax-Amin)/(float)(MaxVal-MinVal)+Amin; RgCos(d, &VL, &VR); SetPWM(VL, VR); // Устанавливаем скорости вращения колес Обратите внимание на то, что величину отклонения приходится преобразовывать к значению на отрезке [-90, 90]. Эксперименты Вид трассы и способы управления Проведенные эксперименты показали, что на простых трассах, с большими радиусами кривизны хорошие результаты показывают все описанные принципы управления за исключением дискретного. При дискретном управлении слишком много времени тратится на «дергания» робота. Однако на сложных трассах, с малыми радиусами поворотов, картина сильно меняется. Лучшие результаты оказываются у косинусного закона. Несколько хуже выглядит пропорциональный закон. Дискретный и линейный регуляторы иногда отказываются работать вовсе - робот не успевает отреагировать на поворот и сходит с трассы. На самом деле, сравнительный анализ работы различных способов управления в зависимости от условий трассы - это очень серьезный вопрос, требующий отдельного изучения. Здесь же мы ограничимся лишь поверхностными результатами, оценивая качество движения по трехбалльной системе («+», «», «-» ). Линейный регулятор с независимым управлением Дискретная система управления Пропорциональное управление Нелинейное управление Табл. 1. Сравнительные характеристики способов управления Прямой Плавный Поворот с Извилистая трасса участок поворот малым с резкими радиусом поворотами или неровными краями + + - - + + + + Замечания и комментарии Далее приведем некоторые замечания и комментарии, относящиеся к реализации не только конкретной описываемой системы. Они могут быть полезны и интересны в силу их общего характера. 1. Реальные законы управления На самом деле реально действующие законы управления выглядят на практике совсем не так, как в нашей поверхностной теории. Во-первых, характеристики датчиков освещенности совсем нелинейны. И уж тем более нелинейна зависимость освещенности от расположения датчика относительно края линии. Во-вторых, объект управления (двигатель) 11 тоже не подчиняется линейным законам. Увеличивая коэффициент заполнения ШИМ в n раз мы вовсе не получим изменение скорости вращения во столько же раз. В-третьих, велика и непредсказуема инерционность двигателей. В-четвертых, никоим образом не учитывался конструктив робота - расположение центра масс, положение ведущих колес, датчиков робота и т.п. Не говоря уж об эффектах проскальзывания колес, моментах инерции и т.п. Неучитывание подобного рода факторов, кстати, приводит к тому, что столь разные законы управления зачастую выдают схожие результаты (тонкие эффекты регулирования сглаживаются, вовсе нивелируются или становятся незначимыми). 2. Проблема торможения Робот, как уже говорилось, является весьма инерционной системой. Прекращение подачи напряжения на двигатель, увы, вовсе не приводит к его мгновенной или хотя бы приемлемо быстрой остановке. Именно в этом кроется причина того, что робот проскакивает поворот. Бороться с этим можно различными способами. Остановимся на некоторых из них: Механический способ. Следует выбирать малоинерционные редукторы, такие, которые очень быстро останавливаются при снятии напряжения. Обычно такие редукторы обладают большим передаточным числом (за сотню). Однако это означает, что двигатель должен иметь очень большие обороты. Такие качественные мотор-редукторы дороги и их сложно отыскать. Сюда же, кстати, относится и выбор колес с очень хорошим сцеплением с трассой. Иногда подобного рода колеса (покрытие для них) приходится даже изготавливать вручную. Компоновка датчиков. Речь идет о такой компоновке датчиков, которая обеспечивала бы приемлемое время реакции системы. Обычно датчики стараются выносить как можно дальше вперед от ведущих колес, чтобы робот успел отреагировать на управляющий сигнал. Вынесение вперед датчиков не только позволяет отследить роботу ситуацию на полосе «заранее», но и позволяет осуществлять более плавное управление. Дело в том, что робот осуществляет поворот в районе опорных колес (у нас - вообще почти вокруг центра масс) и поперечное смещение корпуса оказывается обратно пропорционально величине выноса датчиков, см. рис.10. L R l r Рис.10. Влияние величины выноса датчиков R на смещение корпуса l Здесь, разумеется, надо знать меру. Зачастую чрезмерный вынос приводит к тому, что, скажем, датчики находятся уже на прямом участке, а робот еще не вышел из дуге поворота, что приводит к сходу с трассы. Программный способ. Пожалуй, это наиболее гибкий метод. Именно программным путем можно добиться более или менее приемлемого соответствия между требуемым управлением и тем, что имеется на самом деле. К сожалению, грамотная подстройка параметров регулятора является уделом высококвалифицированных специалистов. На 12 практике же часто довольствуются простыми, «силовыми» приемами. Например, реализуют эффективное программное торможение. Заключается прием в том, что если требуемая скорость вращения колеса становится равной Vmin (двигатель должен остановиться), то совершается реверс вращения на максимальной скорости в течение короткого промежутка времени. Этот кратковременный реверс внешне выглядит как резкая остановка двигателя. В данной системе использовался именно этот прием. Например, для левого колеса имелся следующий код: if(VL==Vmin) { VL = Vmax; LeftMotorBack(); SetPWM(VL, VR); delay_ms(100); goFwd(); } 3. Ограничения контроллера Ресурсы контроллера ATmega48 крайне невелики. Создание сложных, гибких систем затруднено малыми ресурсами, прежде всего - нехваткой памяти. Разумеется, можно вместо ATmega48 выбрать ATmega88 или даже ATmega168, но рано или поздно, если не умеривать свои аппетиты, и их ресурсов будет недостаточно. Кроме того, в такой «спартанской» обстановке есть своя прелесть (особенно для программистов-эстетов). Итак, если мы не скатываемся до программирования на ассемблере, то следует соблюдать следующие достаточно очевидные рекомендации. Во-первых, исключить переменные типа float. Для наших задач переменных типа int или char должно хватить. Во-вторых, следует сократить до минимума отладочную печать. Функция printf, безусловно, незаменимая при отладке вещь, однако потребляет слишком много ресурсов. В-третьих, пишите компактный код. Это относится больше к вопросу культуры программирования. 4. Прочие системы датчиков Рассмотренная выше система из двух датчиков, расположенных по внешним краям линии, как уже говорилось, является лишь одним из возможных вариантов. Этот вариант прост, однако у него имеются свои неустранимые недостатки и ограничения. Дело в том, что все это хорошо работает лишь при малых скоростях, когда робот отклоняется от линии настолько, что система управления может успеть среагировать на это отклонение, когда основной режим работы датчиков - это отслеживание границы линии. Если же требуется максимально скоростное прохождение, то обычно используется линейка из нескольких датчиков. Линейка датчиков. Установка даже четырех датчиков (два - на белом фоне, за линией, и два - на линии) позволяет легко определить величину отклонения робота от линии, т.е. то, что неспособны дать два датчика. Пара датчиков укажет, что мы ушли левее (правее), а вот насколько - неизвестно. Линейка же позволяет определить величину отклонения и, исходя из нее, выдать необходимое управляющее воздействие. При этом сама программа окажется даже проще - в ней можно реализовывать и простой дискретный способ управления, не измеряя значение сигнала (обойдясь лишь показаниями датчиков 0 и 1). Но это уже выходит за рамки нашего рассказа. Два датчика внутри линии. Иногда используют установку датчиков не по внешним, а по внутренним краям полосы. Такое расположение также имеет свои плюсы и минусы. В этом случае крайне опасным становится перерегулирование, приводящее к выходу обоих датчиков за пределы линии. Узкая зона регулирования, конечно, несколько ограничивает 13 размах поперечных колебаний робота во время движения и внешне поведение робота выглядит более плавным. Тем не менее, опасным является отсутствие некоторого зазора между датчиками и отслеживаемым краем. Системы с одним датчиком. Существуют также системы с одним датчиком освещенности. Однако такая схема подразумевает отслеживание границы линии. При этом отслеживание границы осуществляется постоянными колебаниями. Например, дискретная система, предназначенная для отслеживания правого края линии, может использовать следующий алгоритм: 1. Установить робот датчиком на черную полосу. 2. Цикл: Если цвет фона - черный, то повернуть направо, иначе - повернуть налево. 3. Конец цикла В качестве регулируемой величины можно также выбрать среднее значение между цветом фона и линии. Тогда закон управления должен быть таким, чтобы поддерживать сигнал от датчика на этом постоянном уровне. Но и в этом случае возникают проблемы, главная из которых - требуемое большое быстродействие системы. 5. Регулировка скорости Весьма полезным устройством при создании подобного рода систем является регулятор скорости. Зачастую на сложной извилистой трассе следует уменьшать максимальную скорость движения. Проигрывая на прямых и гладких участках, робот может выигрывать в скорости при прохождении резких поворотов. Изменять скорость программным путем, «перешивая» программу - это неудобно, поэтому на роботе был установлен переменный резистор - регулятор скорости. Будучи подключенным к АЦП, он задает скорость движения следующим образом: Vmax = read_adc(4)*100/255; При этом считается, что Vmax - это величина заполнения ШИМ (от 0 до 100%), датчик (резистор) подключен к АЦП 4, а функция read_adc возвращает значение измеренной величины в виде байта (у нас используются восьмиразрядные АЦП). Подключение переменного резистора (особенно по интерфейсу «сигнал» - «+» - «-») очень просто: Сигнал + 10K - Рис.11. Подключение резистора Заключение Итак, получившийся робот является удобным устройством, предназначенным для проведения экспериментов в области базовых алгоритмов движения. Проведенные эксперименты показали, что, как водится, нет универсальных, идеальных способов управления. У каждого способа есть свои достоинства и недостатки, зависящие от того, в каких условиях приходится работать системе. Во многом создание подобного рода систем является выбором между эффективностью решения и требуемыми затратами (стоимостью решения). Все это - неизбежные результаты и особенности инженерного творчества. Мы рассматривали лишь решение задачи движения по полосе. Очевидно, однако, что оснащение робота дополнительными датчиками позволяет ему решать и более сложные, интересные и комплексные задачи, что делает робота действительно универсальной (в известном смысле, конечно) платформой. Хорошая управляемость и умение хорошо решать 14 базовую задачу отслеживания линии лежит в основе многих регламентов соревнований мобильных минироботов. Установка, скажем, ИК дальномера позволяет этому роботу участвовать в соревнованиях типа «Слалом по линии». Установка же дополнительных датчиков цвета - это возможность выхода на соревнования типа «Кегельринг-Квадро», «Теннис», Твинфлэп» и проч. Ссылки [Карпов, 2009] Карпов В.Э. Мобильные минироботы. Ч.1. Знакомство с автоматикой и электроникой: метод. материалы по проведению занятий со школьниками / Политехн.музей. –М., 2009. – 48 с. , http://railab.ru [Карпов, 2010] Карпов В.Э., Волкова Т.А. Управление роботом при движении по вектору // Труды ЛРиИИ, 2010, http://railab.ru 15 Приложения Приложение 1. Руководство по эксплуатации Ниже приводится краткое руководство по эксплуатации робота, оснащенной программой следования по линии. Программа реализует четыре описанных выше метода управления. Выбор метода осуществляется переключателями. Включение робота Для включения робота используется тумблер, см. рис.П1. После включения робот переходит в режим калибровки датчиков освещенности. Стопор Аккумуляторный отсек Кн. 1 Кн. 2 Тумблер питания Кн. «Пуск» Регулятор скорости Рис.П1. Органы управления Калибровка Процедура калибровки заключается в настройке датчиков на освещенность фона и полосы. Для этого робот сначала устанавливается на светлый фон и происходит серия замеров. Далее робот устанавливается так, чтобы датчики располагались на темной полосе. Благодаря этому робот легко настраивается на различные режимы освещенности и контрастности полосы. Шаги калибровки: 1. Включить робот (тумблер «Питание»). После включения раздастся короткий звуковой сигнал (КЗС). 2. Установить робота так, чтобы датчики полосы находились на светлом участке полигона. Нажать клавишу «Пуск». Через некоторое время робот закончит серию замеров и издаст КЗС. 3. Установить робота так, чтобы датчики полосы находились на темной полосе полигона. Нажать клавишу «Пуск» и дождаться КЗС. 4. Робот готов к работе. Установить робота на линию. Робот ждет и нажатия кнопки «Пуск» Управление Для управления роботом используются кнопка «Пуск» и переключатели выбора режима - кнопки К1 и К2. 16 Пуск 1 2 Рис.П2. Кнопки выбора режима Нажатие кнопки «Пуск» переводит робота в состояние «Пауза». Повторное нажатие кнопки «Пуск» выводит робота из состояния ожидания - робот продолжает выполнять программу. Кнопки К1 и К2 служат для выбора закона управления - простого линейного, пропорционального, косинусного и дискретного. Нажатое положение кнопки - сигнал «1», отжатое - «0». Кн.1 0 1 0 1 Кн.2 0 0 1 1 Режим ctlSimple Простой линейный ctlPropor Пропорциональный ctlCos Косинусный ctlDiscr Дискретный Выбор режима управления может осуществляться в любой момент времени - как перед началом работы, так и в ходе ее. Регулировка скорости осуществляется переменным резистором, расположенным вверху в передней части робота. Питание. Питание робота осуществляется 4-мя аккумуляторами формата AA (суммарное напряжение - 4.8-5.6 В). Аккумуляторы располагаются в аккумуляторном отсеке (рис.П1). Для замены аккумуляторов следует извлечь отсек. Отсек фиксируется стопорным болтом (рис.П1). 17 Приложение 3. Программа «Слалом» Второй прилагаемой тестовой программой является программа «Слалом по линии». Суть состязания «Слалом» заключается в прохождении трассы (простой линии), на которой расположены препятствия. Робот должен объезжать препятствия, возвращаясь затем на линию. При этом робот должен чередовать направления объезда - первое препятствие объезжается слева, второе - справа и т.д. Для решения этой задачи робот использует ИК-дальномер (датчик Sharp). Основная программа - почти та же, что и программа движения по линии. Дополнением является реакция робота на препятствие: когда дальномер определяет критическое расстояние до препятствия, робот совершает процедуру объезда, а затем вызывается функция поиска линии (чтобы робот вновь вернулся на маршрут). Мы не будем останавливаться на описании этих процедур. Запуск и калибровка Для запуска робота проводятся те же начальные процедуры калибровки, что и в описанной выше программе езды по линии: после включения робот ставится сначала на белое поле, а затем на черное. При этом используется та же кнопка «Старт». Органы управления Переключатели выбора режима метода) К1 и К2 не задействованы - в программе реализован один алгоритм движения. Кнопка «Старт» по-прежнему выполняет роль кнопки «Пауза» во время движения. 18 Приложение 3. Контроллер робота (ATmega48) Внешний вид контроллера приведен на рис.П2. Разъем питания Драйвер двигателей Свободные выходы (1-2) Разъем двигателей RS232 Внешнее питание двигателей (отключено) Входы датчиков (1-6) Пищалка Разъем подключения фототранзисторов Разъем программирования Рис.П2. Внешний вид контроллера out1 1 PD3 out2 2 PD4 3 Sound PD2 32 TXD 31 GND RXD 30 4 VCC RESET 29 5 GND PC5 (ADC5) 28 in6 6 VCC PC4 (ADC4) 27 in5 7 XTAL1 PC3 (ADC3) 26 8 XTAL2 PC2 (ADC2) 25 M2_2 9 PD5 PC1 (ADC1) 24 M1_2 10 PD6 PC0 (ADC0) 23 in4 in3 in2 in1 M1_1 11 PD7 ADC7 22 эп2 Foto-R M2_1 12 PB0 GND 21 PWM0 13 PB1 (OC1A) AREF 20 PWM1 14 PB2 (OC1B) ADC6 19 эп1 Foto-L 15 PB3 (MOSI) AVCC 18 16 PB4 (MISO) PB5 (SCK) 17 ATMega48 Регулятор скорости Key2 Key1 Start Sharp 19 Приложение 4. Состав диска с дополнительными материалами Система поставляется вместе с исходным программным кодом (программы на языке Си, среда программирования CodeVision), а также с чертежами и схемами. Содержание каталогов Doc - документация. Описание системы. Prog - программный код \lib - библиотека необходимых функций \line - программа движения по линии (2 датчика) \line-4 - программа движения по линии (4 датчика) \slalom - слалом по линии \test - тестовая программа Schematics - схемы и чертежи LDetect5sm.pcb - плата датчиков полосы m48-2.pcb - плата контроллера m48.SCH - схема контроллера электрическая принципиальная robot_base2.cdr - чертеж платформы 20