Main page После работы Car 1 2 3 Video Радио Робот Flash МРТУС97 Bowling

 

Обучение роботов




!!! Обучение роботов - новая версия !!!





Эта страница посвящена строительству и обучению роботов

  1. Первый опыт: небольшой робот "Ворчун"

    1. Введение

    2. Задачи

    3. Конструкция

    4. Как все было...

      1. 14.05.00.

      2. 06.02.00.

      3. 29.01.00.

      4. 26.01.00.

    5. Фотографии

      1. Фотографии от 14.05.00. Вторая плата, ИК датчики, контроллер 8535, ЖКИ

      2. Фотографии от 06.02.00. Новые покрышки, голос, индикаторы

      3. Фотографии от 29.01.00. Макетная плата, датчик вращения колес, общий вид

      4. Фотографии от 20.01.00. Шасси, моторы, аккумулятор, starter-kit

    6. Технические характеристики

    7. Software

    8. Эксклюзивный звук

  2. Заметки:

    1. О мышах. Схема контроллера мыши (GIF - 365 kB), (BMP - 55.2 kB)

    2. О моторах

  3. Ссылки:

    1. Каталоги ссылок на ресурсы, связанные с роботами

    2. Исследования в университетах

    3. Попытки делать на роботах бизнес

    4. Ссылки для практиков

Введение

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

Теперь, когда мы все между собой уяснили, можно и продолжить. Какое-то время назад я активно участвовал в очень увлекательных соревнованиях роботов. Но то были роботы программные, а я все еще hardware guy, поэтому после достижения некоторой вершины в соревнованиях (мой nick-name - xitra), стали появляться мысли об экспериментах с "железом".
Опыта изготовления механики нет почти никакого, хотя конечно, напильник и паяльник в руках держатся свободно. Особых ресурсов тоже нет и не очень предвидится. Все это определяет "бытие" робота, особенно механическую часть - чем проще, тем лучше. После анализа различных вариантов механической схемы, принял решение остановится на трехколесной схеме: пара ведущих колес, каждое управляется своим мотором с редуктором и небольшое, свободно вращающееся вокруг вертикальной оси, колесо, просто опорное. Как видно никаких излишеств. Кто знает серьезные недостатки схемы, прошу сообщить, а пока хочу заострить внимание на достоинствах. Контролируя напряжение на обоих моторах, можно выполнять любой маневр: разворот в любую сторону, просто движение назад, ну и вперед конечно. Хотя особой разницы между передом и задом может и не быть.

Задачи

Если оно ездит, значит оно так хочет.

Как говорят наши братья по разуму, это в первую очередь - fun. Т.е. в прямом смысле этого слова, просто нравится и все. Да и вообще, большой разницы между этим и аналогичными проектами, нет. Но... в отличии от подавляющего числа собратьев, перед этим экземпляром еще стоит задача не упасть с лестницы. Как это на первый взгляд и не удивительно, но такая элементарная для человека операция, становится проблемой для робота.
Задача для этапа N1: Привести робот в состояние при котором с ним можно работать на уровне software. Это означает выполнить наиболее крупные механические работы, обеспечить возможность программирования микроконтроллера на макетной плате, а не в starter-kit. Выполнено
Задача для этапа N2: Научится ходить по "плацу". Это значит, что робот должен быть, например, способен совершить такой маневр: пройти 2 метра прямо, повернуть направо на 90 градусов, пройти прямо метр, повернуть направо... И так далее, т.е. он должен вернуться точно в исходную точку. Конечно одной фигурой маневры не ограничиваются и робот должен уметь совершать любую по сложности фигуру, состоящую из поворотов (на любой угол с дискретом не более 5 градусов) и движения вперед и назад (дискрет менее 5 мм). Выполнено
Задача для этапа N3: Снабдить робота сенсорами и датчиками необходимыми для выполнения конечной задачи проекта.
Конечная задача проекта: Робот должен уметь оптимально быстро посетить все точки стола или комнаты и при этом не повредить себя или сломать посторонние предметы.

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

Конструкция, описание работы

Краткие заметки о строительстве робота

Управление осуществляется RISC микроконтроллерами от Atmel. Выбор был прост - дешевый starter-kit, снимал проблемы с программатором и прочие ненужные сложности. Да и поделать на RISC тоже всегда хотелось (хотя серьезной разницы я пока для себя не заметил). В качестве рабочей лошадки используется AT90S8515 и AT90S8535.

Относительное позиционирование робота осуществляется по измерению пройденного расстояние каждым из колес. Для этой цели на каждую из осей посажены диски с прорезями аналогичными тем, что стоят в "мышах". Фактически и внутренний контроллер мыши используется в роботе по прямому назначению - считывает информацию с дисков и посылает ее в стандарте PS/2 контроллеру. Контроллер ее принимает, расшифровывает и использует в личных целях. Так например если необходимо, чтобы робот ехал строго по прямой, контроллер импульсно меняет напряжение на моторах таким образом, чтобы оба колеса совершали одинаковое количество оборотов в минуту. Поворот слегка сложнее, но принцип тот же.

Кто интересуется, может взглянуть на заметки о мышах вообще и PS/2 протоколе в частности.

Как все было...

14.05.00.

Ничего не умерло :-) Хотя и было двухмесячное безделие, но все потихоньку оживает. Теперь кратко, что же все же сделалось за прошедшее время. Самое главное ожил контроллер AT90S8535. Внутренняя структура контроллера практически идентична 8515, отличие заключается в наличии внутреннего АЦП, дополнительного таймера и еще пары мелочей. Но... разводка выводов другая, вплоть до питания, так что будьте внимательны. Когда я первый раз пытался программировать его в starter-kit у меня ничего не вышло, когда я пытался зашить его еще пяток раз - результат тот же. В конечном счете я сейчас программирую его без проблем на плате и starter-kit не использую совсем.

Решение использовать 8535 было принято ввиду наличие встроенного АЦП, который предполагалось использовать для измерения напряжения на фототранзисторах - ИК датчиках. Но так уж получилось, что сейчас используются только модули TSOP1840, а они имеют логический выход и таким образом ЦАП не используется совсем. Эти модули имеют хорошую помехоустойчивость против внешней засветки и даже постороннего ИК сигнала сходного по структуре. В ранних программах я использовал очень простой вариант задержки -программа циклится на 100000 - 10000000 тактов и я получаю необходимую задержку. Но во-первых это некрасиво, а во-вторых в конце концов я научился использовать таймеры. Трассировать программу обычными software средствами практически невозможно. Наряду с большим количеством программных задержек, программа включает в себя еще взаимодействие с внешними контроллерами: мыши и 8535. Для того, чтобы иметь хоть какое-то представление о состоянии ключевых регистров или любых других интересующих данных к контроллеру 8535 был подключен ЖКИ и написаны соответствующие программы инициализации и посылки комманд/данных. В процессе изучение работы таймеров была написана программа полуавтоматичесого телеграфного ключа (key10.asm,key10.hex). Используется шасси робота и его speaker :-) Спереди робота теперь размещена вторая плата на которой находятся: 8535 контроллер, разъемы соединения с большой платой и ЖКИ, приемники модули TSOP1840 и ИК диоды. В будущем предполагается здесь же размещать часть датчиков касания.

06.02.00.

Предыдущая неделя прошла в активной и мучительной борьбе с роботом. Он очень не хотел поворачиваться. Причем следует заметить, что движение вперед и назад выполнялось уже вполне прилично, а вот повороты - никак. При такой кинематике, как у этого ворчуна, поворот ничем принципиально не отличается от движения вперед. В обоих случаях контроллер, включив моторы, должен сосчитать заданное количество оборотов колеса (или пальцев на диске - датчике вращения), отличие только в том, что при повороте, колеса вращаются в противоположную сторону.
Во время выполнения всех движений программа бегает в цикле, постоянно сравнивая количество сосчитанных пальцев с количеством, которое необходимо проехать. Когда осуществляется движение вперед, внутри этого цикла еще происходит постоянное сравнение скорости вращение обоих колес (находится разница между сосчитанными пальцами правого и левого колеса) и ошибка указывает на то колесо, которое должно быть приостановленно на время, чтобы отстающее колесо догнало убегающее.
В случае с поворотами, необходимости в устранении разницы в скорости вращения, нет (поворот - это очень маленькое расстояние и ошибка будет мала). Поэтому программа крутилась в очень-очень быстром цикле. Каждый посланный мышиным контроллером бит вызывает прерывание, которое затем несколько десятков мкс обрабатывается. На каждый посчитанный палец приходится 33 прерывания (3 байта по 8+3 бит). И получается, что несмотря на все предосторожности, такие частые прерывания, все же каким-то образом портили временные регистры в самый неподходящий момент. Это выражалось в том, что робот поворачивался иногда на 2-5-20-50 пальцев. Каждый раз, пугая тем, что это не software, но hardware проблема (очень похоже на сбои, вызывающие reset, но все же не reset).
В конце концов, я все это безобразие обнаружил, вставил по аналогии небольшие задержки и теперь наслаждаюсь поворотами и движениеми.

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

Появились покрышки на колесах. Они мне очень нравится, особенно если учесть, что это кусочки от резины с моей ракетки для настольного тенниса. Проходимость теперь просто пугающая, но приходится за этим не очень сообразительным орлом следить постоянно. Моторы стоят с большим моментом (из-за редуктора) и если робот находит достаточно тяжелое препятсвие и трение с полом хорошее - он рвет эту резину, отрывает клеевое соединение, в общем и целом - бушует. Если обратиться к разделу Задачи, то можно заметить, что две первые уже выполненны. Программировать робот теперь одно удовольствие - это можно делать прямо в плате, не вынимая контроллера. Наиболее крупные механические работы выполненны. Следующим этапом будет работа с сенсорами, датчиками и прочими приятными вещами из этого ряда. Робот теперь может проехать по настоящему квадрату, "лесенке" или любому другому пути, состоящему из поворотов и движения вперед-назад. Проехав, по прямоугольному пути (2x1 м) он возвращается в исходную точку с погрешностью примерно 5-7 см и угловой ошибкой около 20 градусов. В ряду причин вызывающих ошибки:

  1. Длина окружности поворота робота, измеренная в пальцах - не целое число. Потому при повороте на 90 градусов, робот всегда совершает или 85-88, или 92-95 градусов.

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

  3. Неодинаковый диаметр колес.

  4. И т.д.

28.01.00.

Вспомнил, что робот должен все же шевелить лапками, надо подключать моторы. Колеса должны вращаться в обе стороны, поэтому есть необходимость в full-bridge. Никаких МОП транзисторов я поблизости не нашел. Покупать дорого, да и не нужно мне для управления моторами (35 мА на холостом ходу, 200-300 мА при старте и очень мощной нагрузке), транзисторы, способные переключаться за наносекунды (мне подойдут мс) и управляющие большими амперами. Немного поискал и решил остановится на чудных (я имею в виду дешевых) операционных усилителях, которые могут работать с к током до 1 А - L272M.

Что такое мотор? Правильно, это большая или не очень головная боль, если не сделать все правильно. Почему? Потому, что это индуктивная нагрузка, которая еще и искрит (если мотор щеточный). Я это знал. Но, что б на столько!!! Когда я первый раз включил, обнаружил, что мой контроллер сбрасывается в определенные моменты (происходит reset) я подумал: "Вот чудесно, сейчас поиграемся". Я конечно до этого уже поставил в схему диоды для закорачивания возникающего в обмотках мотора обратного напряжения, я же не хочу смерти компонентов! И вот я радостный мерю осциллографом напряжение на одном из моторов. В импульсе под 50В! Мама! А где ж диоды? Одна надежда, лишь бы все не "повылетало". Будешь тут reset делать! Мерю между удаленными "землями". Где 5, где 8 В. Тоже неплохо. Делать одну общую точку соединения земель - поздно. Все уже соединено. Пытаюсь делать все виды питания без петель и "землю" покороче, попрямее, потолще - не помогает. Делать нечего, делаю входной фильтр НЧ перед операционным усилителем со временем нарастания порядка 0.2 с. Нет резких включений-выключений - нет проблемы. Конечно на это уходит несколько часов, потому что на компоненты фильтра место не предусматривалось. Включаю - не помогает. Все равно сбрасывается, но не всегда. Один мотор сбрасывает, другой - нет. Когда в одну сторону крутится - плохо, когда в другую - работает без сбоя. На выводе "reset", уже и конденсаторов понавешанно и земля там правильная, но что-то все равно помогает сбросится. Предположил, что сильное импульсное поле от мотора наводится как-нибудь на провода питания, ну и... На контактах питания на макетной плате все вроде бы хорошо, но может быть это самобман. Запитываю от внешнего источника - все хорошо работает. Ага, запитываю от аккумулятора, но через провод, идущий далеко от моторов и подключающийся к точке, куда я подключал внешний источник питания. Работает почти также хорошо, но reset все же иногда случается. После очередных инспекций выясняется, что провода питания и сигналы для моторов шли поверх или вблизи контакта reset микроконтроллера. Все как всегда просто и очевидно! И в случае, когда уже стояли фильтры reset вызывался постоянным искрением щеток. А в начале без фильтров, там, конечно была просто невыносимая обстановка и reset мог случаться в результате тысячи причин.

Теперь, наконец-то, этот Ворчун (sound file скоро появится, специально для любителей Hi-Fi -:) имеет практическую возможность передвигаться, хотя он еще полностью глух, слеп, ну и так далее.

26.01.00.

Идея писать в процессе развития подопечного пришла недавно, поэтому история не сначала.

К этому моменту уже существует рабочая версия программы, считающей количество оборотов колес, естественно программа инициализации мыши. Было все это испытанно в таком виде: контроллер находится в starter-kit, моторы включаются-выключаются просто тумблером и при этом питание берется от аккумулятора, контроллер мыши еще на плате мыши, но датчики вращения уже закреплены на шасси, мышь подключается к starter-kit помощью PS/2 разъема. Т.е. три отдельные части соединены большим количеством проводов.

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

Теперь дело за переносом контроллера мыши на макетную плату. Мышь конечно подвергается в этом случая довольно значительному риску быть разрушенной навсегда, но кто их этих мышей спрашивает?! Несколько часов - и контроллер мыши на макетной плате. При вращении датчиков счетчик не работает - проблема. Сразу мысль - умертвил таки. Но нет, программа инициализации проходит нормально и мышь шлет ответ, что с ней все хорошо, готова работать. Но когда диск вращается, мышь на это никак не реагирует. В результате осмотра оказалось, что все соединения в порядке и коротких замыканий тоже нет. Проверил напряжение питание ИК светодиодов - выглядит вполне нормальным. Питание светодиодов, я думаю в целях снижения энергопотребления и увеличение помехозащищенности от внешней засветки, осуществляется от внутреннего источника, который вырабатывает импульсы длительностью несколько десятков мкс и скважностью около 2. Светодиоды соединены последовательно. Проверил прохождение тока по обоим - идет. Так, значит фототранзисторы "ушли". Выпаял, проверил изменение сопротивления, работают вроде бы, заразы. Не поверил, выпаял такой же из другой мыши - один к одному. Помучался еще какое-то время. Проверил ток текущий сквозь светодиоды. Оказалось какае-то жалкая сотня мкА. Может конечно и очень хорошие светодиоды, но что-то сомнительно. Подключил всю цепочку из двух светодиодов и резистора к +5 В. Все чудесным образом заработало. Что там было с генератором тока и почему так странно себя вели светодиоды я не знаю.

Фотографии

Фотографии от 14.05.00. Вторая плата, ИК датчики, контроллер 8535, ЖКИ:

Фотографии от 06.02.00. Новые покрышки, голос, индикаторы:

Голос

Индикаторы

Новые покрышки

Фотографии от 29.01.00. Макетная плата, датчик вращения колес, общий вид:

Макетная плата

Макетная плата

Датчик вращения колеса, видны пальцы на диске

Датчик вращения колеса

Низ шасси и аккумулятор

Общий вид

Фотографии от 20.01.00. Шасси, моторы, аккумулятор, starter-kit:

Общий вид шасси

Вид на шасси спереди

Вид на шасси снизу

Вид на шасси спереди

Низ шасси и аккумулятор

STK200 starter kit; Atmel

Технические характеристики

Размеры

Высота:

80 мм

Длина:

200 мм

Ширина:

200 мм

Масса:

около 500 грамм

Электрические характеристики

Напряжение аккумулятора:

6 В

Емкость аккумулятора:

3 Ач

Марка аккумулятора:

Sonnenschein A 206/3,0 S

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

около 100 мА

Управление

Тип центрального микроконтроллера:

AT90S8515

Тактовая частота:

10 МГц

Контроллер мыши:

SPMC01A-19B

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

Скорость при движении вперед-назад:

7 см/с !

Software

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

  1. 8535x09.asm - программа для 8535: инициализация ЖКИ, работа с ЖКИ, подпрограммы работы с таймерами и SPI. Управление ИК диодами и обработка сигналов с ИК приемников.

  2. mouse21.asm - программа для 8515. Последняя версия программы управления моторами. Работа с контроллером мыши пока отключена, дабы избежать лишних сложностей с прерываниями.

  3. mouse20!.asm - программа для 8515. Это первая полнофункциональная программа под управлением которой робот может совершать "хождение по плацу".

  4. 8535def.inc - подключаемый код - инициализация имен регистров и портов для AT90S8535.

  5. 8515def.inc - подключаемый код - инициализация имен регистров и портов для AT90S8515.

  6. key10.asm - программа полуавтоматического телеграфного ключа с использованием шасси робота.

Заметки

Заметки о мышах

Как говорят на Nokia: "я не эксперт в этом вопросе", но... Прежде всего есть два сильно отличающихся типа мыши: одни общаются по PS/2 протоколу (интерфейсу) с контроллером, а другие по RS-232. Для меня решающим в выборе было то, что мне не придется иметь дело со всякими -12..+12 В если я использую PS/2 (нормальное однополярное +5В). А так, если мышь разбирается до уровня микросхем, то мне кажется особой разницы, с чем играться, нет

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

Самым большим откровением для меня было то, что мыши надо разрешить работать , т.е. послать команду "Enable". Другая важная информация, что интерфейс двунаправленный, т.е. и "Data" и "Clock" могут передаваться в двух направлениях. Обе линии подпитываются от +5В через 10 кОм. Таким образом если никто не шлет ноль, то на линии единица. В противном случае естественно ноль, но как видно, никто никого сломать при таком подключении не может, хотя прерывать - легко. Что host и делает, если не хочет ждать пока мышь наговорится.

Процедура инициализации мыши выглядит примерно так:

Мышь делает себе reset (через 300..500 мс после включения) и посылает два байта (АА и 00). Это говорит машине, что мышь в порядке. Я просто пропускаю это все, потому что информация эта бесполезная.

Затем надо выставить на "Clock" ноль, подержать так 100-200 мкс и отпустить. "Clock" при этом опять станет "1".

Выставить на "Data" ноль - с него начинается любой байт посылки. Ждать так не более 10 мс. В течении этого времени мышь начнет выдавать на линию "Clock" импульсы. Как только импульс заканчивается и линия "Clock" возвращается к единице, можно менять сигнал на линии "Data". Таким образом надо послать число F4h.

После этого надо послать бит контроля четности и затем вернуть "Data" в состояние "1".

Мышь проверяет после одиннадцатого импульса (1ый бит "0", 8 бит информации, контроль четности, стоповая "1") линию "Data" и на пару сотен мкс переводит ее в состояние "0". Затем все линии становятся "1"

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

Заметки о моторах

В самом начале, у меня были большие проблемы с моторами. Первая ошибка была в том, что я пытался управлять импульсами со слишком крутыми фронтами и это приводило к ужасным выбросам обратного напряжения в 50 вольт. Некоторое подобие ФНЧ исправило ситуацию. Но осталась другая проблема. Моторы щеточные и постоянное искрение дает пульсацию более 5-6 вольт, т.е. больше напряжения питания. Помимо того, что это опасно для контроллеров и прочих компонентов, это вызывает следующий эффект. Датчик TSOP1840 очень чувствительный, но он также и чувствителен к пульсациям напряжения питания, особенно когда частота пульсаций в районе 40 кГц (частота наполнения пачек). Искрение щеток видно на осциллографе как импульсы длительностью 1-20 мкс. Это означает, что спектр будет довольно широк - до 1-2 МГц. Напряжение как уже было сказано - несколько вольт. Хотя для TSOP1840 достаточно и милливольт, чтобы чувствительность снизилась. Естественно, применяется фильтрация по питанию, хотя и простая... :-)

Рассмотрим проблему подробнее . Когда моторы включены робот может обнаружить препятствие на расстоянии 10 см, например. После этого он останавливается. Импульсы пропадают и в этом случае робот уже может "видеть" в несколько раз дальше. Появляется гистерезис и очень неприятный. Как его бороть пока не ясно. Замечено, что при использовании ИК диодов в очень маломощном режиме гистерезис практически незаметен, но и расстояние обнаружения для крупных предметов составляет всего 5-10 см.

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

Ссылки

Index of Robotics resources

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


Лаборатория автономных систем University of the West of England

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

WAMOEBA Project

Японцы развлекаются. Неплохой пример того, что получается когда в проекте есть деньги.

Artificial Intelligence Laboratory site

Сайт лаборатории искусственного интеллекта при Брюссельском университете. Хороший научный подход, есть, что почитать



Chip data

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

Arrick Robotics

Сайт производителя компонентов для роботов (моторы, захваты, роботы для познавательных целей)

Polaroid Series 7000 Sonar Ranging Package

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