Итак, сегодня свершилось чудо оживления нашего учебного робота с кодовым именем МР1. К этому знаменательному моменту привела цепь событий, о которых я подробно расскажу далее по тексту.
Для начала напомню, что данный мобильный робот МР1 — это учебная платформа, при помощи которой планируется преподавать принципы работы различных компонентов роботов и основы программирования их поведения. Кроме того, эту платформу предполагается использовать и для более серьезных проектов как удобную основу для прототипирования.
Сборку робота МР1 можно разбить на три этапа: сборка шасси, корпуса и монтаж электроники. Начнем с первого этапа.
Сборка шасси
Как уже говорилось, робот МР1 имеет простую колесную базу, которая состоит из сдвоенного редуктора, двух двигателей постоянного тока, пары колес и шаровой опоры. В общем-то, такое шасси очень популярно среди аналогичных учебных машин. Подобный способ передвижения робота позволяет легко поворачивать корпус без применения сложного рулевого управления.
Поскольку редуктор — устройство достаточно непростое для производства своими силами, в нашем роботе мы используем готовые компоненты шасси от Tamiya. Tamiya — это уважаемая японская компания, специализирующаяся на производстве разного рода моделей и комплектующих для них. На данный момент колесные и гусеничные платформы от Tamiya — это пожалуй самый оптимальный вариант для подобных бюджетных проектов. Следует также отметить, что сборка компонентов шасси сама по себе представляет хорошую задачку на развитие мелкой моторики и сообразительности 🙂 Вот так выглядит редуктор до и после сборки:
Можно заметить, что в наборе имеется небольшой голубой тюбик. В этом тюбике находится смазка для узлов механизма. В редукторе имеется много люфтов и нет ни одного подшипника, поэтому смазка действительно не помешает.
Следующий шаг — насадка колес. Кстати, колеса имеют резиновые покрышки! И это не ради аутентичности — без цепких колес роботы имеют свойство буксовать.
Наконец — шаровая опора. Это оригинальное устройство дает роботу третью точку опоры, и позволяет свободно вращать корпус только лишь с помощью двух колес.
Нехитрые манипуляции по сборке шасси были проделаны мной ещё три недели назад, сразу после того как пришла посылка из pololu. На всё про всё ушло около 20 минут вечернего времени. Следующий шаг был сделан в эту субботу, перед днем открытых дверей в УрФУ.
Сборка корпуса
Как уже я уже писал ранее, в качестве материала для корпуса макетного стенда и мобильного робота мы выбрали обычное оргстекло. Но можно нарезать эти детали из любого плотного материала, например, из стеклопластика, углепластика или даже из фанеры.
Кстати, забавная история возникла с этим оргстеклом. Сразу после получения готовых деталей, я развернул упаковочную пленку и с ужасом обнаружил там акрил голубого цвета (привет от мистера Хайзенберга). Как же так? Вроде бы заказывал прозрачный, а тут… Ну да ладно, думаю будет робот голубого цвета, не в этом, в конце концов, суть.
Благо, как оказалось позже, голубой цвет материалу придавала коварная защитная пленка. Сняв её, я увидел кристально прозрачные пластины. Затем я примерно за пол часа собрал корпус и закрепил в нем Raspberry PI.
Далее должен был последовать этап установки бокса с батарейками. Но тут возникла небольшая проблема. Спроектированный мной зажим для этого бокса, никак не хотел выполнять свою функцию. Элементы защелки оказались слишком упругими чтобы можно было легко вставить батарейный отсек, так как это задумывалось. Вместо этого, пришлось его запихивать чуть снизу и под углом. Эта деталь явно требует доработки перед началом серийного выпуска моих деревянных солдат роботов МР1.
Настал черед установки макетной платы на верхнюю панель. Поскольку робот имеет достаточно маленькие габариты, было решено установить на него 400-точеченую макетную плату. Она ровно в два раза короче чем та, которая используется в нашем стационарном стенде. Плата крепится на двухсторонний толстый скотч (1мм). На рисунке ниже представлен проект робота (слева) и его физическая реализация (справа).
Далее к плате подключается cobbler и GPIO шлейф от Raspberry PI. На этом этапе робот уже приобретает практически законченный вид. Надо сказать, что на данном фото видна уже проводка регулятора напряжения, о котором будет рассказано чуть ниже.
Монтаж электроники
После того как тело робота было собрано воедино, пришло время заняться, так сказать, нервной системой. На этом этапе я установил регулятор напряжения и регулятор хода двигателя. Эти устройства являются очень важными для каждого робота.
Регулятор напряжения обеспечивает контроллер робота очень стабильным питанием. Независимо от того, какой заряд остается у батареи из шести элементов, будь то 9 вольт или 6 (это уж совсем дохлые батарейки), регулятор непременно выдаст свои 5 вольт. Не будем забывать, что стабильное питание является очень важным условием правильной работы всех электронных устройств.
Регулятор подключается очень просто. С одной стороны к нему подходит плюс и минус из батарейного отсека, а с другой стороны выходят два провода на питание контроллера. Для этих целей пришлось пожертвовать одним USB -> micro-USB переходником (те что идут от сетевого блока питания к Raspberry PI).
Регулятор хода двигателей (драйвер двигателей) необходим для контроля за тягой моторов шасси. Во-первых, контроллер должен уметь менять направление вращения мотора. Ведь робот должен иметь возможность двигаться и задним ходом. Во-вторых, с помощью регулятора хода можно изменять скорость вращения моторов, и даже резко останавливать их. В основе работы этого устройства лежит принцип широтно-импульсной модуляции, о которой речь пойдет в шестом занятии базового курса.
Этот этап сборки робота не выглядит очень сложным, но по факту занял у меня больше всего времени. Дело в том, что изначальный план подключения и драйвера двигателей и Raspberry PI к одному регулятору хода был обречен на провал. Проблему создавали мощные двигатели постоянного тока. В момент запуска они потребляют очень большой ток, чем вводят в ступор регулятор напряжения (он отключается от перегрева H-моста). Именно из-за этого, мне не удалось показать робота в действии на дне открытых дверей в УрФУ. Он работал очень нестабильно и стартовал один раз из пяти.
Позднее, данная проблема была частично решена прямым подключением драйвера двигателей к батарее. Но робот по-прежнему не хотел ехать. Он мог свободно крутить одним колесом, но как только требовалось запустить два двигателя, следовал аварийный перезапуск всей системы. Теперь уже просто не хватало выхода алкалиновых батареек. Я, признаться, не ожидал что эти небольшие моторчики от Tamiya окажутся такими прожорливыми. Стало очевидно, что без силовых аккумуляторов робот никуда не поедет ;-E~
И вот, сегодня утром я купил восемь никель-металлгидридных аккумуляторов ёмкостью 2700мАч. В отличие от дешевых алкалиновых батареек, NiMh элементы могут выдавать гораздо большие токи. Для них, четыре ампера, которые едят наши двигатели на запуске, не являются особой проблемой.
Уже днем, после часовой зарядки аккумуляторов (а вообще им надо заряжаться целые сутки) я накормил таки нашего робота до сыта. Наш МР1 наконец получил полную мобильность! Робот спокойно стартовал, поворачивал, ехал назад и вообще безнаказанно рассекал по нашему офису в Naumen.
Управляющая программа
Для демонстрации возможностей Raspberry PI, я решил для начала научить робота понимать команды с беспроводной клавиатуры. В отличие от Arduino и других подобных платформ, Raspberry PI позволяет легко подключать практически любую периферию к своим двум USB портам.
Но и здесь не обошлось без дополнительных многочасовых исследований. Проблема в том, что хоть клавиатура и подключается к Raspberry PI без проблем, но перехватить события нажатия клавиш в python-программе еще нужно суметь. Все усугубляет тот факт, что перехват событий должен происходить в рамках какого-то конкретного окна, будь то окно терминала (LXTerminal), или рабочее окно pygame. Кроме того, управляющая программа должна запускаться автоматически в момент загрузки операционной системы, что также накладывает свои ограничения.
В общем было над чем поразмышлять. В конце концов, проблема была решена с помощью библиотеки pygame. Позже я обязательно опубликую код моего решения, а пока, предлагаю к просмотру крошечное видео из жизни диких роботов.