Наконец-то закончил проведение 4й лабораторной работы - "Знакомство с дизайном конечных автоматов на языке HDL Verilog на платах ПЛИС (FPGA) на примере простых роботов". В качестве практической работы студенты сделали трех роботов, работающих под управлением плат ПЛИС (FPGA), с датчиками для получения информации об окружающем мире:
Робот-черепаха - любит магниты - на голове установлен
датчик магнитного поля - при наличии магнитного поля рядом с головой черепаха высовывает голову за едой, если поле действует после высовывания - черепаха ползет за едой. При отсутствии магнитного поля черепаха останавливается и прячет голову обратно.
Робот-таракан - боится газеты - на голове установлен
датчик звука - при улавливании любого звука (хлопка от газеты) такан убегает сначала в одну сторону, потом в другую. Бежит в одну сторону всего одну секунду, поэтому дистанция получилась короткая - при пробежке в 3 секунды результат получается немного эффектнее, но в этом случае он постоянно выдергивает свои управляющие провода из макетной платы, поэтому для надежности оставили одну секунду.
Робот-скорпион - из осторожности отступает, но если его вывести из себя - быстро атакует - на голове установлен
датчик движения - при улавливании движения в радиусе действия датчика воспринимает его как опасность - от первых двух угроз он оснорожно отступает, на 3ю угрозу - атакует.
Формат проведения занятия - группа разделилась на 3 команды (по количеству доступных плат ПЛИС, ну и по количеству ролей совпало тоже) - каждая команда делала своего робота полностью с нуля - от проектирования управляющего конечного автомата (стейт-машины) до финального результата. Роли внутри каждой группы определились следующие:
- Архитектор - проектирование управляющего конечного автомата (нарисовать стейт-машину на бумаге)
- Он же - ответственный за имплементацию этого конечного автомата на языке Verilog и синтез управляющей прошивки для платы ПЛИС (FPGA)
- Распиновка и подключение управляющей макетной платы к ПЛИС - по спекам конкретной платы ПЛИС определить, какие ножки платы будут посылать команды роботу, а какие - получать сигнал с датчика.
- Управляющий проводной интерфейс для механической части - подключение механической части робота к управляющей макетной плате
- Инженер-машиностроитель - создание корпуса робота, установка движущихся частей, подключение проводов к движущимся частям корпуса.
Пожалуй пока что это оказалась самая сложная из всех уже проведенных лабораторных работ - как в плане предварительной подготовки (см ниже), так и процесса проведения занятия. Причем основные сложности были вызваны именно механической частью (хотя и с дизайном выбранного конечного автомата на верилоге тоже пришлось разобраться) - провода были не достаточно гибкими, чтобы робот перемещался свободно, при движении робота провода выскакивали из ячеек макетной платы, моторчикам не хватало мощности, чтобы выполнить задуманное действие и т.п.
В результате лабораторная работа заняла целых 3 занятия (команда Таракана уложилась в полтора) - в среднем на создание каждого робота команды потратили 6 часов плюс-минус от схемы управляющего конечного автомата на бумаге до финальной презентации работающего робота на видео.
Как я ранее обещал, в рамках отчетов
по экспериментальному курсу практических лабораторных работ "Цифровая микроэлектроника для математиков и программистов", который я провожу в группе студентов 2го курса специальности Прикладная Математика и информатика Нижегородского Государственного Технического Университета им Алексеева при плотной поддержке сотрудников MIPS Technologies Юрия Панчула и Сергея Вакуленко (
перепосты отчетов о прошедших лабах с развлекательными острыми социальнополитическими предисловиями в ЖЖ Юрия Панчула), я собираюсь подробно рассказать про внутреннее устройство каждого из роботов - показать схемы управляющих ими конечных автоматов (стейт-машин), исходники их реализации на языке Verilog с синтезом на платах ПЛИС (FPGA). Т.к. подробное описание каждого из роботов должно занять довольно много места, каждому из них будет посвящен отдельный пост - всвязи с чем я решил провести небольшой опрос:
Poll Схему управляющего конечного автомата (стейт-машины) и ее реализацию на языке Verilog для какого из трех цифровых микроэлектронных биороботов Теперь чуть подробнее об основных составляющих
Про управляющие платы, внутри которых работает синтезированный из программы на языке Verilog конечный автомат (стейт-машина) уже неоднократно говорили - это платы ПЛИС Digilent Basys2, Altera DE0 и Altera DE0-Nano
Digilent Basys2
Altera DE0-Nano
Altera DE0
В качестве соединительного провода подойдет восьмижильный телефонный кабель - продается любым метражом например в магазине Obi. Плюс - неплохо втыкается в гнезда макетной платы, минус - не очень хорошо гнется и мешает движению робота.
Моторчики - можно купить любые на
http://chipnn.ru/22.php
Полумостовой драйвер L293D для управления моторчиком с платы ПЛИС (напряжения сигнала +/- или логических 1/0 на ножках платы недостаточно, чтобы заставить моторчик крутиться, поэтому в качестве усилителя сигналов с ножек платы используется этот специальный драйвер). Купить можно традиционно в онлайн-магазине
http://chipnn.ru/26.php или на ближайшем радиорынке.
Макетная плата с проводами - для промежуточного подключения проводов с платы ПЛИС и проводов, управляющих роботом - в частности и в первую очередь для подключения драйвера L293D, который выполнен в DIP-корпусе.
Далее датчики (сенсоры) для общения робота с внешним миром. У меня получилось найти очень хороший онлайн-магазин, который физически расположен в Санкт-Петербурге -
fixled.ru. Весь ассортимент явно подбирался тчательно и с любовью. Очень большой выбор всевозможных компонентов для занятия микроэлекроникой и робототехникой - в частности большая коллекция всевозможных датчиков с возможностью прямого подключения например к микроконтроллерным платам Arduino, ну и соответственно к платам ПЛИС тоже - я выбрал датчик движения, датчик звука и датчик магнитного поля. При этом особенно радуют цены и сами по себе и по сравнению с предложениями в других магазинах, которые я видел, тоже:
датчик движения - 350руб
датчик звука - 250руб
датчик магнитно гополя 125руб
Кроме того, на странице каждого датчика приведен пример кода C++ для работы с ним с плат Arduino.
Главное не забыть вместе с датчиками сразу заказать
специальные провода для их подключения - на странице покупки датчиков на этом нюансе особого акцента не делается и лично я это выяснил это только посли получения 1й посылки - пришлось на первом занятии обойтись хлипкими конструкциями из скруток фольги и канцелярской ленты, но зато вместе со 2й посылкой с проводками владельцы магазина решили мне прислать эксклюзивный подарок - датчик воды - похоже, что его даже похоже нет в основном каталоге сайта - ближайшей осенью мы скорее всего придумаем, как его использовать в каком-нибудь роботе-дождевом червяке или роботе-лягушке.
Последняя и самая важная часть для робота - это корпус. Во время подготовки к этой лабе в процессе обсуждения способов дизайна конечных автоматов для роботов на верилоге Юрий Панчул посоветовал мне посмотреть на робототехнические конструкторы, которые продаются на сайте Digilent - в частности вот такую тележку с микроконтроллером и инфрактасными датчиками - Digilent Robotic Development Kit - Line Sensor:
на что я ответил, что некоторое время назад я уже купил пару вот таких железных конструкторов для уроков труда:
На мой взгляд эти наборы могли бы быть почти идеальным вариантом для создания роботов в учебных целях и для быстрого прототипирования. Во-первых, все любят эти металлические конструкторы. Во-вторых, в этих коробках уже есть сразу куча разных делалей с винтиками и колесиками, из которых можно собрать почти что угодно.
Для сравнения - в набор Digilent Robotic Development Kit - Line Sensor (тележка с колесиками на картинке выше) - судя по pdf-ке с ее описанием, кроме этой тележки, платы с микроконтроллером и нескольких сенсоров (т.е. всего того, что изображено на картинке) больше ничего не входит. Тележка стоит $170 (~2000руб).
Дополнительные запчасти можно купить за отдельную плату - вот например 2 такие железные детальки с винтиками стоят всего 7$ (~200руб):
Еще там есть например коробочный монстр за $40 (~1200руб - контроллер в комплекте) и пара колес за $8 (~250руб - контроллер в комплект не входит):
Вот так выглядит содержимое коробки с
металлическим конструктором №2 (301руб)
Самое дешевое место, где я смог найти "металлический конструктор для уроков труда" - замечательный
интернет-магазин 10kr.ru. Я выбрал 2 набора -
набор №2 (301руб) и
набор №3 (295руб), т.к. в них по моим прикидкам было больше всего колесиков. Вместе с доставкой оба этих набора обошлись мне чуть больше, чем стоит один из них (~600руб) в одном из розничных магазинов игрушек, куда я зашел в Нижнем Новгороде.
Кроме того, когда уже после получения первой посылки с 2мя наборами я решил на всякий случай заказать еще 2 таких же набора там же, вторая посылка пришла опять с незапланированным падарком (точнее на самом деле это был первый подарок, а датчик воды от fixled.ru был уже позднее) - набором для лепки барельефов:
Как применять его в робототехнике я решил не придумывать, а просто подарил его маленькой дочке моего друга.
Однако все оказалось не так радужно, как могло показаться на первый взгляд. При помощи металлического конструктора можно можно легко собрать корпус для множества очень интересных роботов - при этом в распоряжении имеются даже шасси и колеса, при помощи которых этот робот мог бы передвигаться, но как оказалось, приделать к этим шасси моторчик так, чтобы он передавал им крутящий момент и его мощности хватало на перемещение всей конструкции, задача почти невыполнимая. Во-первых, я так и не смог найти ни одного места ни в интернете, ни в оффлайне, где бы продавались типа как на развес любые шестеренки для их использования в произвольных конструкциях. Единственный надежный вариант наверное мог бы быть - купить и разобрать на запчасти какие-нибудь настенные пластмассовые часы. Но все-таки при помощи советов друзей и родственников я смог соорудить пару несуразных механизмов по передачи кручения моторчика на шасси конструктора - один с использованием резиновых водопроводных прокладок, другой - с использованием резинового нипеля (найти который была тоже отдельная история - в конечном итоге оказалось, что они теперь продаются только в магазинах с принадлежностями для рыбалки):
в первой версии конструкция кое-как вертелась за счет трения 2х круглых прокладок друг о друга - попытка нарезать руками из резиновой прокладки шестеренку привела к еще более плачевному результату
С их помощью у меня получилось заставить колеса крутиться под действием вращающегося моторчика пока конструкция находилась на весу - как только я ставил колеса на стол или на пол все останавливалось очевидно из-за слишком большой силы трения шасси о корпус платформы - моторчик даже близко не может справиться с таким сопротивлением. В общем, конечный вердикт - металлический конструктор в текущем виде, как ни жаль, не приспособлен для работы с устройствами, которые могли бы приводить его в движение - в частности с электрическими моторчиками частями, т.е. полноценного набора для робототехника из него не получилось, хотя изначально на это были большие надежды.
Пришлось в срочном порядке искать альтернативу для частей робота, которые могли бы быть приведены в движение электрическим моторчиком, которым в свою очередь бы управлял конечный автомат, загруженный в плату ПЛИС. Каким-то чудом почти за день до назначенной лабы рядом с Московским вокзалом я наткнулся на лоточников, продававших толи китайские, толи корейские пластмассовые машинки с большими колесами на батарейках тоже с моторчиками. Машинок оставалось ровно три штуки (как раз по числу доступных мне плат ПЛИС) - я купил все по 100руб за штуку
Внутри оказалось в точности то, что было нужно - платформа на четырех колесах, набор шестеренок и привод от такого же электромоторчика, как я купил на chipnn.ru.
Теперь лабу можно было проводить - Робот Таракан, Робот Черепаха и Робот Скорпион получили шанс появиться на свет в виде гибридов корейского пластмассового полицейского джипа в качестве движущей части и металлических конструкторов российского производства в качестве остальных декоративных деталей корпуса.
В общем, главный смысл всего этого рассказа я думаю заключается в том, что для начинающего робототехника (не важно что он программирует - ПЛИС или микроконтроллер на Arduino) сейчас основной проблемой является не освоение высоких технологий программирования контроллеров на С/С++ (с этим в основном справляются школьники) или даже не в изучении верилога и построении с его помощь конечных автоматов (с этим пришлось тоже немного разобраться, но никаких больших сложностей этот процесс не вызвал). Основной проблемой начинающего робототеника в моем лице оказалась проблема поиска простых и недорогих инструментов для быстрого прототипирования внешнего корпуса робота - в первую очередь сооружения для него подвижных частей, при помощи которых можно было бы быстро проверить работоспособность алгоритма, запрограммированных в управляющий контроллер.
При этом настоящее и неподдельное счастье в этом смысле кажется крайне близким - вот если бы производители серии наборов железных конструкторов для уроков труда смогли добавить в них несколько новых запчастей - в частности например специальные оси для колес и набор пластмассовых шестеренок таким образом, чтобы из них можно было сооружать подвижные конструкции, которые могли бы управляться обычным электрическим моторчиком, то на мой взгляд "металлический конструктор для уроков труда, рекомендован детям 6-10 лет" мог бы в один момент превратиться в "металлический набор для робототехники и быстрого прототипирования, рекомендован для обучения школьников старших классов на уроках информатики, студентов вузов информационнотехнологических специальностей и молодых ученых". Как минимум на уже упомянутой выше 4й лаборатороной работе про дизайн конечных автоматов на языке верилог на примере простых роботов в рамках упомянутого выше курса "цифровая электроника для программистов" подобный набор мог бы оказаться незаменимым, а также позволил бы сэкономить множество часов как мне в процессе предварительной подготовки к лабораторной работе, так и самим студентам, которые на лабораторной работе вполне значимое количество времени мучались с выпадающими из макетной платы проводками и неплотно прилегающими к поверхности подвижной детали моторчиками вместо того, чтобы мучаться над созданием более сложных версий конечных автоматов на языке верилог.
На мой взгляд на основе уже имеющейся базы и должной поддержки со стороны специалистов и интересующихся робототехников подобное расширение функционала конструктора достаточно легко осуществимо.
Не знаю, приходили ли подобные мысли в голову производителям этого конструктора, но думаю даже если приходили,
было бы неплохо напомнить им про такую возможность еще раз. Для этого я по своей добровольной инициативе решил провести для них небольшой социологический опрос и заодно предварительное исследование потенциального рынка. Думаю, что для того, чтобы результат был достаточно весомым в глазах производителей оригинального металлического конструктора и чтобы они от такой идеи никак не могли отвертеться, количество респондентов, принявших участие в опросе, должно быть достаточно большим, поэтому репосты приветствуются.
Кстати, совершенно внезапно (действительно узнал только сегодня во время создания этой фотки) изготовителем конструктора оказалось нижегородское предприятие: ООО "Региональная фабрика игрушек", 603057, г. Нижний Новгород, ул. Бекетова, 13. Тел: (831) 416-96-88. Поставщик: ООО "Тридевятое царство", 141401, Моск. обл., г. Химки, ул. Рабочая, 2а. Тел. (495) 710-7387 (многокан.),
www.10kor.ru. (C) "ДЕСЯТОЕ КОРОЛЕВСТВО"-2009 Дизайн: О. Вакурова.
Собственно вопросы для соцопроса и исследования рынка:
Poll Исследование рынка для ООО Региональная Фабрика Игрушек
ljpromo, приди!