Как сделать робот нло

Создание своего летающего робота

Примерно год назад было сообщение о конкурсе от КРОК «Летающие роботы». Мне стало интересно поучаствовать и приобрести опыт в конструировании автономного летающего робота. К сожалению, из конкурса пришлось выйти из-за нехватки времени, но интерес к решению проблемы остался. Конкурсное задание, если кратко, заключалось в том, чтобы пролететь от точки A до точки B, пролетев через отверстие в стене, и вернуться.

Что и как получилось на данном этапе под катом.

Решение данной задачи, очевидным образом разбивается на две части. Первая — как «пролететь вдоль стенки не натыкаясь на нее», вторая — посадка. Для ориентации робота в пространстве я решила использовать ультразвуковые дальномеры. Получилось, что нужно как минимум 3 датчика (вниз, вперед и влево, вперед и вправо). Посадку планировалось осуществлять с помощью камеры, но до этого дело еще не дошло.

Мне хотелось построить своего робота полностью автономным, со всей логикой на борту. Собственно, вопрос грузоподъемности летательного аппарата, а так же простота в управлении, устойчивость к падениям и невысокая цена привели меня к выбору игрушечного радио-управляемого вертолета с со-осным расположением винтов, модель Hawkspy LT-711. На одном из сайтов заявлялось, что он может поднять груз до 50-ти грамм. И как показал эксперимент, действительно, не полностью заряженный, он спокойно поднял половину стандартной сто-грамовой шоколадки.

Для того, чтобы летать «вдоль стеночки» нужно, прежде всего, уметь держать высоту. Собственно, решение этой подзадачи я и хочу описать в этом посте.

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


1 — выход радио-приемника (сигнал, который декодировали); 2 — вход декодера (куда подаем сформированный сигнал); 3 — земля; На обратной стороне платы была перерезана дорожка, соединяющая контакты 1 и 2.

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

После наблюдения за сигналом я сумела выделить характерные паттерны. На картинке представлен типичный сигнал с разметкой. В итоге стало понятно, что сигнал кодируется довольно просто — четырьмя байтами. Играя с пультом управления и наблюдая изменения сигнала, удалось восстановить, какая часть сигнала за что отвечает. Получилось следующее:


lt — включить/выключить лампочки на корпусе вертолетика; sm — turbo-режим;

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

На этом этапе большая часть подготовительных действий были выполнены и пора было приступать к написанию своей прошивки для микроконтроллера. У меня давно валялся микроконтроллер stm32f4discovery и я решила для начала попробовать использовать его. Заметную часть времени заняли установка и настройка окружающей среды. У меня MacOS, поэтому на свой лэптоп пришлось ставить армовский тулчейн с linaro и openocd. За основу был взят и модифицирован один из примеров из библиотеки для работы с периферийными устройствами. В него были перенесены подпрограммы по декодированию и кодированию сигнала. Принятый приемником сигнал декодируется программой микроконтроллера. Управляющие воздействия вверх/вниз, поворот влево/вправо, движение вперед/назад (и другие) представляются в виде отдельных чисел. На этом этапе легко их модифицировать. Далее производится кодирование в исходный формат и передача на штатный декодер вертолетика.

Для решения задачи измерения высоты, использовался ультразвуковой датчик измерения расстояния LV-MAXONAR-EZ0. Датчик подключался к микроконтроллеру через интерфейс UART и выдавал расстояние до предмета в конусе его видимости в дюймах.
Таким образом прошивка выполняла следующее: снимала показания с датчика высоты, и управляла скоростью вращения винтов с помощью ПИД-регулятора.

Для отладки работы датчика есть очень удобная тулза для STM-микроконтроллеров, STM Studio, позволяющая следить за значениями переменных не прерывая работу программы. Правда она работает только под Windows, но с прокидыванием USB-устройства (отладочную плату) и установкой драйверов в виртуалку с виндой проблем не возникло (я использовала PD). Сигнал через виртуальную оболочку проходит полностью, без изменений и видимых задержек, таким образом он-лайн наблюдение за поведением датчика сильно облегчило понимание происходящего.

Когда дело дошло до пробных полетов, оказалось, что вся добавленная электроника весит больше 50 грамм, поэтому вертолетик взлетал невысоко и почти сразу медленно и печально стремился к земле. Пришлось думать как уменьшить вес всей этой электроники. Распаивать чип самостоятельно на плате для меня не представляется возможным, поэтому проблема решилась заменой отладочной платы на более маленькую и легкую MINI-m4 с тем же чипом. Перепрограммировать прошивку особо не пришлось: заменить пару параметров и поменять имена некоторых используемых пинов.

Читайте также:  Как снять приворот на сахар

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

Для удобства, сейчас у вертолетика два режима. Если джойстик находится в верхней половине диапазона, то вертолет удерживает высоту один метр, если джойстик в нижней половине, то — это режим посадки.

Простейшая математическая модель

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

Модель совсем примитивная, одномерная. Если у кого-то есть идеи по улучшению, буду рада услышать.

Источник

Создаем робота в домашних условиях


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

Введение

Итак. Что же такое робот? В большинстве случаев это автоматическое устройство, которое реагирует на какие-либо действия окружающей среды. Роботы могут управляться человеком или выполнять заранее запрограммированные действия. Обычно на роботе располагают разнообразные датчики (расстояния, угла поворота, ускорения), видеокамеры, манипуляторы. Электронная часть робота состоит из микроконтроллера (МК) – микросхема, в которую заключён процессор, тактовый генератор, различная периферия, оперативная и постоянная память. В мире существует огромное количество разнообразных микроконтроллеров для разных областей применения и на их основе можно собирать мощных роботов. Для любительских построек широкое применение нашли микроконтроллеры AVR. Они, на сегодняшний день, самые доступные и в интернете можно найти много примеров на основе этих МК. Чтобы работать с микроконтроллерами тебе нужно уметь программировать на ассемблере или на Cи и иметь начальные знания в цифровой и аналоговой электронике. В нашем проекте мы будем использовать Cи. Программирование для МК мало чем отличается от программирования на компьютере, синтаксис языка такой же, большинство функций практически ничем не отличаются, а новые довольно легко освоить и ими удобно пользоваться.

Что нам нужно

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

Читайте также:  1976 чей год по гороскопу какого животного

Делаем плату с МК


Схема робота

В нашем случае микроконтроллер будет выполнять функции мозга, но начнём мы не с него, а с питания мозга робота. Правильное питание – залог здоровья, поэтому мы начнём с того, как правильно кормить нашего робота, потому что на этом обычно ошибаются начинающие роботостроители. А для того, чтобы наш робот работал нормально нужно использовать стабилизатор напряжения. Я предпочитаю микросхему L7805 – она предназначена, чтобы на выходе выдавать стабильное напряжение 5В, которое и нужно нашему микроконтроллеру. Но из-за того, что падение напряжения на этой микросхеме составляет порядка 2,5В к нему нужно подавать минимум 7,5В. Вместе с этим стабилизатором используются электролитические конденсаторы, чтобы сгладить пульсации напряжения и в цепь обязательно включают диод, для защиты от переполюсовки.
Теперь мы можем заняться нашим микроконтроллером. Корпус у МК — DIP (так удобнее паять) и имеет сорок выводов. На борту имеется АЦП, ШИМ, USART и много другого, что мы пока использовать не будем. Рассмотрим несколько важных узлов. Вывод RESET (9-ая нога МК) подтянут резистором R1 к «плюсу» источника питания – это нужно делать обязательно! Иначе твой МК может непреднамеренно сбрасываться или, проще говоря – глючить. Так же желательной мерой, но не обязательной является подключение RESET’а через керамический конденсатор C1 к «земле». На схеме ты так же можешь увидеть электролит на 1000 мкФ, он спасает от провалов напряжения при работе двигателей, что тоже благоприятно скажется на работе микроконтроллера. Кварцевый резонатор X1 и конденсаторы C2, C3 нужно располагать как можно ближе к выводам XTAL1 и XTAL2.
О том, как прошивать МК, я рассказывать не буду, так как об этом можно прочитать в интернете. Писать программу мы будем на Cи, в качестве среды программирования я выбрал CodeVisionAVR. Это довольно удобная среда и полезна новичкам, потому что имеет встроенный мастер создания кода.


Плата моего робота

Управление двигателями

Не менее важным компонентом в нашем роботе является драйвер двигателей, который облегчает нам задачу в управлении им. Никогда и ни в коем случае нельзя подключать двигатели напрямую к МК! Вообще мощными нагрузками нельзя управлять с микроконтроллера напрямую, иначе он сгорит. Пользуйтесь ключевыми транзисторами. Для нашего случая есть специальная микросхема – L293D. В подобных несложных проектах всегда старайтесь использовать именно эту микросхему с индексом «D», так как она имеет встроенные диоды для защиты от перегрузок. Этой микросхемой очень легко управлять и её просто достать в радиотехнических магазинах. Она выпускается в двух корпусах DIP и SOIC. Мы будем использовать в корпусе DIP из-за удобства монтажа на плате. L293D имеет раздельное питание двигателей и логики. Поэтому саму микросхему мы будем питать от стабилизатора (вход VSS), а двигатели напрямую от аккумуляторов (вход VS). L293D выдерживает нагрузку 600 мА на каждый канал, а этих каналов у неё два, то есть к одной микросхеме можно подключить два двигателя. Но, чтобы перестраховаться, мы объединим каналы, и тогда потребуется по одной микре на каждый двигатель. Отсюда следует, что L293D сможет выдержать 1.2 А. Чтобы этого добиться нужно объединить ноги микры, как показано на схеме. Микросхема работает следующим образом: когда на IN1 и IN2 подаётся логический «0», а на IN3 и IN4 логическая единица, то двигатель вращается в одну сторону, а если инвертировать сигналы – подать логический ноль, тогда двигатель начнёт вращаться в другую сторону. Выводы EN1 и EN2 отвечают за включение каждого канала. Их мы соединяем и подключаем к «плюсу» питания от стабилизатора. Так как микросхема греется во время работы, а установка радиаторов проблематична на этот тип корпуса, то отвод тепла обеспечивается ногами GND — их лучше распаивать на широкой контактной площадке. Вот и всё, что на первое время тебе нужно знать о драйверах двигателей.

Датчики препятствий

Чтобы наш робот мог ориентироваться и не врезался во всё, мы установим на него два инфракрасных датчика. Самый простейший датчик состоит из ик-диода, который излучает в инфракрасном спектре и фототранзистор, который будет принимать сигнал с ик-диода. Принцип такой: когда перед датчиком нет преграды, то ик-лучи не попадают на фототранзистор и он не открывается. Если перед датчиком препятствие, тогда лучи от него отражаются и попадают на транзистор – он открывается и начинает течь ток. Недостаток таких датчиков в том, что они могут по-разному реагировать на различные поверхности и не защищены от помех — от посторонних сигналов других устройств датчик, случайно, может сработать. От помех может защитить модулирование сигнала, но пока мы этим заморачиватся не будем. Для начала, и этого хватит.

Читайте также:  Гороскоп июль август все знаки


Первый вариант датчиков моего робота

Прошивка робота

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

Следующие строки условные, потому что значения PORTC зависят от того, как ты подключил драйвер двигателей к своему микроконтроллеру:

PORTC.0 = 1;
PORTC.1 = 0;
PORTC.2 = 1;
PORTC.3 = 0;

Значение 0xFF означает, что на выходе будет лог. «1», а 0x00 – лог. «0».

Следующей конструкцией мы проверяем, есть ли перед роботом препятствие и с какой оно стороны:

Если на фототранзистор попадает свет от ик-диода, то на ноге микроконтроллера устанавливается лог. «0» и робот начинает движение назад, чтобы отъехать от препятствия, потом разворачивается, чтобы снова не столкнуться с преградой и затем опять едет вперёд. Так как у нас два датчика, то мы проверяем наличие преграды два раза – справа и слева и потому можем узнать с какой стороны препятствие. Команда «delay_ms(1000)» указывает на то, что пройдёт одна секунда, прежде чем начнёт выполняться следующая команда.

Заключение

Я рассмотрел большинство аспектов, которые помогут тебе собрать твоего первого робота. Но на этом робототехника не заканчивается. Если ты соберёшь этого робота, то у тебя появится куча возможностей для его расширения. Можно усовершенствовать алгоритм робота, как например, что делать, если препятствие не с какой-то стороны, а прямо перед роботом. Так же не помешает установить энкодер – простое устройство, которое поможет точно располагать и знать расположение твоего робота в пространстве. Для наглядности возможна установка цветного или монохромного дисплея, который может показывать полезную информацию – уровень заряда аккумулятора, расстояние до препятствия, различную отладочную информацию. Не помешает и усовершенствование датчиков – установка TSOP (это ик-приёмники, которые воспринимают сигнал только определённой частоты) вместо обычных фототранзисторов. Помимо инфракрасных датчиков существуют ультразвуковые, стоят подороже, и тоже не лишены недостатков, но в последнее время набирают популярность у роботостроителей. Для того, чтобы робот мог реагировать на звук, было бы неплохо установить микрофоны с усилителем. Но по-настоящему интересным, я считаю, установка камеры и программирование на её основе машинного зрения. Есть набор специальных библиотек OpenCV, с помощью которых можно запрограммировать распознавание лиц, движения по цветным маякам и много всего интересного. Всё зависит только от твоей фантазии и умений.

Список компонентов:
Код прошивки:

Тип МК : ATmega16
Тактовая частота : 16,000000 MHz
Если у тебя частота кварца другая, то это нужно указать в настройках среды:
Project -> Configure -> Закладка «C Compiler»
*****************************************************/

void main(void)
<
//Настраиваем порты на вход
//Через эти порты мы получаем сигналы от датчиков
DDRB=0x00;
//Включаем подтягивающие резисторы
PORTB=0xFF;

//Настраиваем порты на выход
//Через эти порты мы управляем двигателями
DDRC=0xFF;

//Главный цикл программы. Здесь мы считываем значения с датчиков
//и управляем двигателями
while (1)
<
//Едем вперёд
PORTC.0 = 1;
PORTC.1 = 0;
PORTC.2 = 1;
PORTC.3 = 0;
if (!(PINB & (1

О моём роботе

В данный момент мой робот практически завершён.

На нём установлена беспроводная камера, датчик расстояния (и камера и этот датчик установлены на поворотной башне), датчик препятствия, энкодер, приёмник сигналов с пульта и интерфейс RS-232 для соединения с компьютером. Работает в двух режимах: автономном и ручном (принимает сигналы управления с пульта ДУ), камера также может включаться/выключаться дистанционно или самим роботом для экономии заряда батарей. Пишу прошивку для охраны квартиры (передача изображения на компьютер, обнаружение движений, объезд помещения).

По пожеланиям выкладываю видео:

UPD. Перезалил фотографии и сделал небольшие поправки в тексте.

Статья была опубликована мною в журнале «Хакер» за август 2009 года.

Источник