Робот из raspberry pi 3. Мобильный робот с камерой на Raspberry Pi

Наша команда давно хотела использовать недорогие ARM материнские платы с linux, но их доступность и поддержка производителей не позволяла строить наши решения на них. С выходом Raspberry Pi многое изменилось. Теперь с платой поставляется полноценный linux - существует несколько вариантов дистрибутивов на выбор, большое сообщество пользователей. Единственным огорчением является доступность платы: поставки устройства в Россию постоянно затягиваются, и если вы хотите получить желанную плату быстро - вам придется заплатить приличную сумму перекупщикам. Мне досталась плата модификации B с двумя USB и Ethernet. Рекомендую брать именно ее. Также производитель заявил о более дешевой модификации A без Ethernet и с одним USB.

1) Подключение

Плата серии В имеет 3 USB разъема, однако третий имеет форм-фактор micro и предназначен только для питания платы. Потребление платы может достигать 700мА и не факт, что будучи подключенной напрямую в порт вашего компьютера, плата будет работать (напомню, что согласно старому стандарту, потребление устройства USB не должно превышать 500мА, по новому – 900 мА). У нас плата работала, будучи подключенной к ноутбуку, к телевизору и к USB хабу, проблем не было. Остальные два разъема USB хоть и поддерживают стандарт 2.0, но электрически его не соблюдают. По наблюдениям, максимальное потребление на них составляет 140 мА, вы не сможете подключить напрямую жесткий диск и большинство web-камер. И это далеко не всё. Из-за множества косяков подобного рода и кривым драйверам на этой плате можно использовать только ограниченное число железок. Подробно с ними можно ознакомиться по этой ссылке .

Для старта платы иметь на руках необходимо иметь следующее:

  1. кабель micro-USB
  2. SD- карта 6-10 класса (мы использовали карту производства Transcend, также работает Silicon Power, но хуже). Не все карты будут работать в этой плате. И это связано с кривым драйвером SD-карточки и с тем, что производители переходят на более дешевые технологии изготовления. Из-за этого меняются временные параметры сигналов и карты перестают работать. Объем – до 32 Гб.
  3. USB-hub. Подойдет не любой. Работать будет практически с любым, но будет следующая проблема: у платы нет защиты от обратных токов со стороны USB hub, это означает, что если вы не включите плату через micro USB, но часть устройств подключите по USB hub с внешним питанием, то плата может запуститься, при этом на нее будет подано низкое напряжение. В итоге вы можете убить содержимое SD-карты, так как при данном напряжении загрузчик будет исполняться криво и может повредить данные. Плата после этого может не запуститься и вам придется создавать новый образ ОС и зашивать его на карту. Поэтому советую всегда иметь запасную карту. Подходящие хабы с внешним питанием также описаны на Wiki проекта . Без них нормально подключить wi-fi, web-камеры, USB HDD не получится.
  4. USB клавиатуру и мышь. Очень советую, чтобы они были новые и одного стандарта (например USB 2.0 или 1.1). Драйвер для USB на этой плате кривой и часто можно получить случай, когда при втыкании мыши и клавиатуры, работает что-то одно. Отзывы на сайте указывают на проблему драйвера.
  5. источник питания. Если плата не завелась от порта USB вашего компьютера, то можно обойтись и без USB хаба с внешним питанием, для этого вам придется купить блок питания для зарядки или питания usb устройств. Подробнее про это можно узнать на сайте проекта.

2) Установка Linux

Отдельного внимания заслуживает концепт корпуса для Raspberry. К сожалению, для него нет 3д модели STL для печати. Но был найден в инете . Юзеры Solidworks могут попробовать его доработать для 3д печати.

Совет пользователям SolidWorks: не стоит думать, что детали в формате STL нельзя распознать. Для этого в меню открытие после выбора формата STL надо выбрать "Параметры" и выбрать тип детали ("твердое тело" или "поверхности"). Тогда STL будет распознана в виде, пригодном для небольшого редактирования.

Этот проект уникален и несмотря на нынешние недоработки, буквально через несколько месяцев бурное сообщество пользователей укажет на основные ошибки и поможет их исправить. Я же советую напоследок внимательно всегда читать документацию на сайте проекта и использовать только проверенное там железо. Согласитесь, за стоимость 2000-3000 руб. можно смириться с недостатками, которые к тому же постоянно исправляются, делая эту плату чуть ли не единственной нормально поддерживаемой ARM Linux платформой.

  • Tutorial

Очень часто на хабре появляются статьи о том как использовать Raspberry Pi как медиацентр, передвижную видеокамеру, удаленную web камеру и… собственно все. Очень странно, что в такой большой IT тусовке - довольно мало информации о том - как его программировать и использовать одноплатный компьютер там, где он действительно довольно полезен - во всяких встраиваемых системах, где есть ограничения по размеру и стоимости, но также есть потребность в производительности. В нескольких статьях постараюсь описать на примере создания мобильного колесного робота с компьютерным зрением - как можно использовать малинку для создания роботов(штук с интеллектом на борту, а не управляемых с андроида машинок с веб камерой).

Введение

Всегда было интересно программировать что то механическое - ощущаешь себя Богом(как и большинство программистов) - вдыхаешь в кучу деталей душу. Наверное все помнят ту детскую радость от первого мигания светодиодом, шевелящегося сервопривода и т.д. - когда сделал что то, что можно потрогать, что живет, двигается, а не сайтик на php .
Во многих своих творениях, а тем более роботах - человек всегда старается повторить самого себя, или часть своих функций. 80% информации об окружающем мире мы получаем через зрение - так что компьютерное зрение, на мой взгляд, одна из основополагающих областей знания в робототехнике.


Изучение ее я начинал с чтения академических трудов по алгоритмам параллельно с освоением библиотеки компьютерного зрения OpenCV на C++(в случае с Raspberry - Python)- знание принципов работы алгоритмов поможет Вам оценить сложность и выполнимость задачи, еще до начала ее выполнения, а также оптимизировать алгоритмы в критичных местах. Даже если Вы будете пользоваться в основном библиотечными функциями - они хорошо оптимизированы, и вряд ли вы с нуля напишете лучше - Вы сможете оптимизировать какие то параметры, которые незначительно влияют в конкретном случае на решение вашей задачи, но значительно влияют на скорость ее решения - в общем возвращаясь к холивару - «нужна ли программисту математика» - В данном случае нужна, так что советую напрячь немного извилины и разбираться хотя бы поверхностно в работе алгоритмов.

Также нелишне будет хотя бы поверхностно изучить Теорию Автоматического Управления - вместо расписывания ее возможностей - предлагаю просто посмотреть следующее видео (BTW - половина его команды - русские)

Составные части робота



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

Механика

Механическая основа робота - двухколесная с дифференциальным приводом - классическая, в общем то, для первых робототехнических экспериментов - у нее 2 независимых колеса и ее движение контролируется исключительно скоростями и направлением их вращения (подобно винтам квадрокоптера). Кроме собственно колес имеется шаровая/колесная опора, в продвинутых системах - энкодеры для обратной связи и контроля текущей скорости двигателей, что позволяет более эффективно управлять двигателями.



Контроллер двигателей

В качестве контроллера двигателей можно использовать любой микроконтроллер, у меня используется Arduino nano - потому что просто попалось под руку.
Возможно возникнет вопрос - почему бы не управлять напрямую с Raspberry? Дело в том, что у оперционной системы квант времени гораздо больше, чем у микроконтроллера, кроме того нет аппаратных ШИМ ов, плюс, если мы захотим улучшить управление двигателями при помощи обратной связи и Теории Управления - это потребует вычислительных затрат и более быстрой реакции - поэтому управляющая двигателями часть и мозг робота разделены - arduino просто получает по UART команду - с какими скоростями и направлениями мозг бы хотел, чтобы крутились двигатели - как это будет достигаться - просто включением ШИМа с нужной скважностью или хитрым управлением, когда вначале мы подаем напряжение больше уставки, раскручивая двигатель, а потом выравниваем - таким образом ускоряя раскрутку двигателя до нужной скорости - все это уже заботы контроллера двигателей, а не Raspberry - поскольку это вообще говоря задача гораздо более жесткого времени - на порядок - два меньшего, чем позволяет Raspberry, да и вообще подобные системы.

Драйвер двигателей

Одной лишь ардуинки недостаточно, чтобы двигатели закрутились - ток, отдаваемый ножкой слишком мал - если мы на маленький выходной транзистор ножки контроллера посадим обмотку двигателя, требующего ток порядка ампер - то просто устроим КЗ - замкнем ключ сам на себя и он скорей всего просто выйдет из строя - поэтому нужен более мощный ключ, позволяющий пропускать через себя большой ток - если нам требуется крутить двигатель в одном направлении - в общем то нам достаточно одного транзистора, но если мы хотим крутить в разных - нам их уже потребуется 4 - такая схема называется H - мост - замыкая диагональные ключи при закрытых других диагональных - мы можем менять направление тока в двигателе.
И такая схема необходима для каждого колеса. К счастью в наше время нет нужды ее собирать - она реализована в виде интегральных микросхем, коих великое множество - так что, подойдет любая, способная управлять током, нужным вашему двигателю. У меня используется вот такой двухканальный от pololu:


Также имеется великое множество всевозможных шилдов для ардуин - при помощи гугла вы их легко найдете по запросу «arduino motor driver». Схему подключения также обычно предоставляет производитель или пользователи всевозможных форумов - ищущий да обрящет. У микросхем 2 питания - одно - которое подается на двигатели от мощного источника тока - например Li-Pol батарейки 7.2В, другое - питание входного каскада логики - ардуиновские 5В, также имеется входы, контролирующие направление вращения каждого канала и вход Enable - подавая на который ШИМ сигнал мы можем регулировать скорость вращения двигателя. Могут быть различные конфигурации в зависимости от шилда, но основные выводы - такие.

В общем то соединив таким образом Arduino, драйвер двигателей, двигатели и батарейку(или просто какой нибудь источник тока на длинном проводе) можете уже начинать играться с управлением моторами. Для получения команд от Raspberry потребуется реализовать прием строчки по UART и ее парсинг - протокол можете тут придумать какой вашей душе угодно. вышеперечисленное - основные части практически любого колесного робота - далее уже начинаются варианты - можете вообще забить на компьютерное зрение и сделать робота чисто на Arduino, который, например, ездит по линии, объезжает препятствия при помощи датчиков расстояния и т.п.

Главный контроллер



Моя же задача - сделать несколько более интеллектуальную платформу для ислледования компьютерного зрения и теории управления - так что следующим элементом системы будет являться одноплатный компьютер Raspberry Pi B+ в виду его невысокой цены, распространенности и доступности информации. В сборку Raspbian включен Python интерпретатор - так что писал программу для робота я на нем

Камера



В качестве камеры можно в общем то использовать любую вебку(что я первое время и делал) - у меня используется Raspicam - она небольшая, легкая, есть отдельный порт для ее подключения, широкий угол обзора хороший драйвер и 90 фпс в VGA разрешении.

Средство отладки



Для отладки я использую USB Wifi свисток, подключаясь к Raspberry через удаленный рабочий стол по SSH. Тоже в общем то можно использовать любой, для первоначальной настройки вообще можно использовать Ethernet кабель и SSH

Система питания

Аккумулятор - литий полимерный от 2Ач на 7.2В номинального напряжения + зарядка.


Понижающий DC-DC преобразователь - батарея наша выдает от 8.4 до 6В - это напряжение мы можем напрямую подавать на двигатели через микросхему драйвера, но для питания Raspberry и Arduino требуется 5В источник питания - по документации Raspberry Pi требуется источник 5В, способный отдавать не менее 800мА - можно конечно понизить напряжение с батарейного до 5В при помощи линейного стабилизатора, но при таких токах он будет греться и неэффективно использовать заряд батареи, так что я рекомендую использовать импульсный понижающий DC-DC преобразователь - от него у меня питается и Raspberry и Arduino

Собственно фото моего нанотехнологичного робота и пара видео его езды по различным соревновательным трекам в качестве демонстрации:


Линия профи(прерывистая)

Тонкая линия с резкими поворотами(Евро)

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

Роботизированные устройства по-прежнему остаются диковинкой даже для тех современных семей, члены которых повсеместно пользуются продвинутыми гаджетами, цифровыми системами и плодами передовых разработок ведущих мировых компаний. Одной из причин такого положения вещей является слишком высокая цена на сложные автоматизированные механизмы, а также сомнительная целесообразность применения дорогостоящих «машин» для выполнения простых операций. Команда словацких инженеров решила в рамках стартапа «PiKit — Robotic & Control kit based on Raspberry Pi» убедить всех, что концепция модульных роботов, когда покупатель сам вправе выбрать и собрать устройство с необходимой ему функциональностью, способна не просто популяризировать подобные механизмы, но и сделать их более доступными.

Главной особенностью PiKit стала конструкция из отдельного набора «блоков», оснащённых теми или иными датчиками. Представьте, что в предлагаемой сторонними производителями модели часть возможностей вам просто не пригодится, но переплачивать за ненужные опции — затея явно нерациональная. Компромиссом в этом случае выглядит модель компании Anima Technika — робот PiKit, за обработку поступающих команд которого отвечает одноплатный компьютер Raspberry Pi или Banana Pi.

Стартап начал поиски финансирования при помощи краудфандинговой площадки Indiegogo, чтобы собрать $41,8 тыс. для воплощения идеи в жизнь. Участники проекта при соответствующей материальной поддержке могут оформить предзаказ как на уже готовое изделие, так и на отдельные части модульного конструктора. Главной составляющей является небольших размеров корпус, в котором расположился сам PiController на базе одноплатного микрокомпьютера. Благодаря встроенному в него модулю беспроводной связи Wi-Fi владелец устройства сможет управлять PiKit дистанционно, используя для этого настольный ПК, ноутбук, смартфон или планшет.

Набор дополнительных модулей включает в себя два вида приводов для передвижения робота — один ориентирован на манёвренность, другой — на скорость. Первый привод делает робота похожим на паука , а второй превращает PiKit в роботизированный аналог самобалансирующегося двухколёсного самоката наподобие сегвея (Segway) .

Чтобы следить за всем происходящим от первого лица разработчики предлагают установить модуль визуализации со встроенной HD-камерой, микрофоном и ультразвуковым дальномером. С помощью микрофона устройство сможет обрабатывать голосовые команды, а встроенный динамик обеспечит имитацию живого общения PiKit с его владельцем. А чтобы превратить робота в максимально самостоятельный механизм, специалисты Anima Technika подготовили модуль автоматизации, отвечающий за переход «машины» в автономный режим для выполнения ряда несложных задач.

PiController обеспечивает взаимодействие всех модулей со встроенным в него трёхосным акселерометром и гироскопом, трёхосным магнитометром, ШИМ-контроллером, динамиками, зумером, выводя при этом системную информацию на собственный LCD-дисплей.

Элементы PiController, для создания которого использовался Raspberry Pi

Покупатель может заказать PiController за $249 без одноплатного компьютера в комплекте, чтобы усовершенствовать систему по своему усмотрению. Цены на отдельные составляющие указаны ниже:

  • модуль визуализации — $189;
  • модуль автоматизации — $119;
  • колёсный Segway-привод — $99;
  • Spider-привод — $899;
  • PiController с Raspberry Pi — $289;
  • PiController с Banana Pi — $299.

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

Модификация под названием Balancing robot, которая представлена на изображении выше, включает в себя модуль визуализации, PiController и колёсный привод. Её розничная стоимость составит $587. А вот для сборки робота-паука понадобится уже куда более дорогой Spider-модуль за $899 — две пары механизированных лап, синхронизирующиеся с центральным контроллером.

Что там говорилось про сомнительную целесообразность дорогих механизмов? Неудивительно, что на данном этапе стартап собрал лишь $628. Однако до окончания краудфандинга осталось ещё 43 дня.

  • Tutorial

Очень часто на хабре появляются статьи о том как использовать Raspberry Pi как медиацентр, передвижную видеокамеру, удаленную web камеру и… собственно все. Очень странно, что в такой большой IT тусовке - довольно мало информации о том - как его программировать и использовать одноплатный компьютер там, где он действительно довольно полезен - во всяких встраиваемых системах, где есть ограничения по размеру и стоимости, но также есть потребность в производительности. В нескольких статьях постараюсь описать на примере создания мобильного колесного робота с компьютерным зрением - как можно использовать малинку для создания роботов(штук с интеллектом на борту, а не управляемых с андроида машинок с веб камерой).

Введение

Всегда было интересно программировать что то механическое - ощущаешь себя Богом(как и большинство программистов) - вдыхаешь в кучу деталей душу. Наверное все помнят ту детскую радость от первого мигания светодиодом, шевелящегося сервопривода и т.д. - когда сделал что то, что можно потрогать, что живет, двигается, а не сайтик на php .
Во многих своих творениях, а тем более роботах - человек всегда старается повторить самого себя, или часть своих функций. 80% информации об окружающем мире мы получаем через зрение - так что компьютерное зрение, на мой взгляд, одна из основополагающих областей знания в робототехнике.


Изучение ее я начинал с чтения академических трудов по алгоритмам параллельно с освоением библиотеки компьютерного зрения OpenCV на C++(в случае с Raspberry - Python)- знание принципов работы алгоритмов поможет Вам оценить сложность и выполнимость задачи, еще до начала ее выполнения, а также оптимизировать алгоритмы в критичных местах. Даже если Вы будете пользоваться в основном библиотечными функциями - они хорошо оптимизированы, и вряд ли вы с нуля напишете лучше - Вы сможете оптимизировать какие то параметры, которые незначительно влияют в конкретном случае на решение вашей задачи, но значительно влияют на скорость ее решения - в общем возвращаясь к холивару - «нужна ли программисту математика» - В данном случае нужна, так что советую напрячь немного извилины и разбираться хотя бы поверхностно в работе алгоритмов.

Также нелишне будет хотя бы поверхностно изучить Теорию Автоматического Управления - вместо расписывания ее возможностей - предлагаю просто посмотреть следующее видео (BTW - половина его команды - русские)

Составные части робота



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

Механика

Механическая основа робота - двухколесная с дифференциальным приводом - классическая, в общем то, для первых робототехнических экспериментов - у нее 2 независимых колеса и ее движение контролируется исключительно скоростями и направлением их вращения (подобно винтам квадрокоптера). Кроме собственно колес имеется шаровая/колесная опора, в продвинутых системах - энкодеры для обратной связи и контроля текущей скорости двигателей, что позволяет более эффективно управлять двигателями.



Контроллер двигателей

В качестве контроллера двигателей можно использовать любой микроконтроллер, у меня используется Arduino nano - потому что просто попалось под руку.
Возможно возникнет вопрос - почему бы не управлять напрямую с Raspberry? Дело в том, что у оперционной системы квант времени гораздо больше, чем у микроконтроллера, кроме того нет аппаратных ШИМ ов, плюс, если мы захотим улучшить управление двигателями при помощи обратной связи и Теории Управления - это потребует вычислительных затрат и более быстрой реакции - поэтому управляющая двигателями часть и мозг робота разделены - arduino просто получает по UART команду - с какими скоростями и направлениями мозг бы хотел, чтобы крутились двигатели - как это будет достигаться - просто включением ШИМа с нужной скважностью или хитрым управлением, когда вначале мы подаем напряжение больше уставки, раскручивая двигатель, а потом выравниваем - таким образом ускоряя раскрутку двигателя до нужной скорости - все это уже заботы контроллера двигателей, а не Raspberry - поскольку это вообще говоря задача гораздо более жесткого времени - на порядок - два меньшего, чем позволяет Raspberry, да и вообще подобные системы.

Драйвер двигателей

Одной лишь ардуинки недостаточно, чтобы двигатели закрутились - ток, отдаваемый ножкой слишком мал - если мы на маленький выходной транзистор ножки контроллера посадим обмотку двигателя, требующего ток порядка ампер - то просто устроим КЗ - замкнем ключ сам на себя и он скорей всего просто выйдет из строя - поэтому нужен более мощный ключ, позволяющий пропускать через себя большой ток - если нам требуется крутить двигатель в одном направлении - в общем то нам достаточно одного транзистора, но если мы хотим крутить в разных - нам их уже потребуется 4 - такая схема называется H - мост - замыкая диагональные ключи при закрытых других диагональных - мы можем менять направление тока в двигателе.
И такая схема необходима для каждого колеса. К счастью в наше время нет нужды ее собирать - она реализована в виде интегральных микросхем, коих великое множество - так что, подойдет любая, способная управлять током, нужным вашему двигателю. У меня используется вот такой двухканальный от pololu:


Также имеется великое множество всевозможных шилдов для ардуин - при помощи гугла вы их легко найдете по запросу «arduino motor driver». Схему подключения также обычно предоставляет производитель или пользователи всевозможных форумов - ищущий да обрящет. У микросхем 2 питания - одно - которое подается на двигатели от мощного источника тока - например Li-Pol батарейки 7.2В, другое - питание входного каскада логики - ардуиновские 5В, также имеется входы, контролирующие направление вращения каждого канала и вход Enable - подавая на который ШИМ сигнал мы можем регулировать скорость вращения двигателя. Могут быть различные конфигурации в зависимости от шилда, но основные выводы - такие.

В общем то соединив таким образом Arduino, драйвер двигателей, двигатели и батарейку(или просто какой нибудь источник тока на длинном проводе) можете уже начинать играться с управлением моторами. Для получения команд от Raspberry потребуется реализовать прием строчки по UART и ее парсинг - протокол можете тут придумать какой вашей душе угодно. вышеперечисленное - основные части практически любого колесного робота - далее уже начинаются варианты - можете вообще забить на компьютерное зрение и сделать робота чисто на Arduino, который, например, ездит по линии, объезжает препятствия при помощи датчиков расстояния и т.п.

Главный контроллер



Моя же задача - сделать несколько более интеллектуальную платформу для ислледования компьютерного зрения и теории управления - так что следующим элементом системы будет являться одноплатный компьютер Raspberry Pi B+ в виду его невысокой цены, распространенности и доступности информации. В сборку Raspbian включен Python интерпретатор - так что писал программу для робота я на нем

Камера



В качестве камеры можно в общем то использовать любую вебку(что я первое время и делал) - у меня используется Raspicam - она небольшая, легкая, есть отдельный порт для ее подключения, широкий угол обзора хороший драйвер и 90 фпс в VGA разрешении.

Средство отладки



Для отладки я использую USB Wifi свисток, подключаясь к Raspberry через удаленный рабочий стол по SSH. Тоже в общем то можно использовать любой, для первоначальной настройки вообще можно использовать Ethernet кабель и SSH

Система питания

Аккумулятор - литий полимерный от 2Ач на 7.2В номинального напряжения + зарядка.


Понижающий DC-DC преобразователь - батарея наша выдает от 8.4 до 6В - это напряжение мы можем напрямую подавать на двигатели через микросхему драйвера, но для питания Raspberry и Arduino требуется 5В источник питания - по документации Raspberry Pi требуется источник 5В, способный отдавать не менее 800мА - можно конечно понизить напряжение с батарейного до 5В при помощи линейного стабилизатора, но при таких токах он будет греться и неэффективно использовать заряд батареи, так что я рекомендую использовать импульсный понижающий DC-DC преобразователь - от него у меня питается и Raspberry и Arduino

Собственно фото моего нанотехнологичного робота и пара видео его езды по различным соревновательным трекам в качестве демонстрации:


Линия профи(прерывистая)

Тонкая линия с резкими поворотами(Евро)

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

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

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

  1. Батарейки в корпус никак не влазили, поэтому приходилось их приматывать к корпусу изолентой:)
  2. Настройка параметров была вынесена на четыре потенциометра, которые оказались очень чувствительными к температуре. В помещении настраиваешь одни значения, выходишь на улицу - а они уже другие, уплыли.
  3. У Arduino Nano, которую я использовал в пульте, есть всего 8 аналоговых входов. Четыре были заняты настроечными потенциометрами. Один потенциометр служил газом. Два входа были подключены к джойстику. Оставался свободен только один выход, а параметров для настройки гораздо больше.
  4. Единственный джойстик был вовсе не пилотным. Управление газом с помощью потенциометра тоже весьма угнетало.
  5. А еще пульт не издавал никаких звуков, что иногда бывает крайне полезно.

Чтобы устранить все эти недостатки, я решил кардинально переделать пульт. И железную часть, и софт. Вот что мне захотелось сделать:

  • Сделать большой корпус, чтобы в него можно было запихнуть все что хочется сейчас (включая батарейки), и что захочется позже.
  • Как-то решить проблему с настройками, не за счет увеличения числа потенциометров. Плюс, добавить возможность сохранения параметров в пульте.
  • Сделать два джойстика, как на нормальных пилотных пультах. Ну и сами джойстики поставить православные.

Новый корпус

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

Элементы управления и меню

Чтобы управлять кучей параметров, нужно либо разместить на пульте кучу потенциометров и добавить АЦП, либо делать все настройки через меню. Как я уже говорил, настройка потенциометрами не всегда хорошая идея, но и отказываться от нее не стоит. Так что, решено было оставить в пульте четыре потенциометра, и добавить полноценное меню.

Чтобы перемешаться по меню, и менять параметры обычно используют кнопки. Влево, вправо, вверх, вниз. Но мне захотелось использовать вместо кнопок энкодер. Эту идею я подсмотрел у контроллера 3D-принтера.


Разумеется, за счет добавления меню, код пульта распух в несколько раз. Для начала я добавил всего три пункта меню: "Telemetry", "Parameters" и "Store params". В первом окне отображается до восьми разных показателей. Пока я использую только три: заряд батареи, компас и высота.

Во втором окне доступны шесть параметров: коэффициенты PID регулятора для осей X/Y,Z и корректировочные углы акселерометра.

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

Джойстики

Над выбором пилотных джойстиков я долго не размышлял. Так получилось, что первый джойстик Turnigy 9XR я добыл у коллеги по квадрокоптерному делу - Александра Васильева, хозяина небезызвестного сайта alex-exe.ru . Второй такой же заказал напрямую на Hobbyking.


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

Питание

В старом пульте я использовал простой регулятор напряжения LM7805, который кормил связкой из 8 батареек AA. Жутко неэффективный вариант, при котором 7 вольт уходили на нагрев регулятора. 8 батареек - потому что под рукой был только такой отсек, а LM7805 - потому что в то время этот вариант мне представлялся самым простым, и главное быстрым.

Теперь же я решил поступить мудрее, и поставил достаточной эффективный регулятор на LM2596S. А вместо 8-ми AA батареек, установил отсек на два LiIon аккумулятора 18650.


Результат

Собрав все воедино, получился вот такой аппарат. Вид изнутри.


А вот с закрытой крышкой.


Не хватает колпачка на одном потенциометре и колпачков на джойстиках.

Наконец, видеоролик о том, как происходит настройка параметров через меню.


Итог

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

По ходу настройки пульта, были выявлены недостатки. Во-первых, нижние углы пульта упираются в руки:(Наверное я немного перепроектирую пластины, сглажу углы. Во-вторых, даже дисплея 16х4 не хватает для красивого вывода телеметрии - приходится названия параметров сокращать до двух букв. В следующей версии девайса установлю точечный дисплей, либо сразу TFT матрицу.