События


Фоточувствительная линейка TSL1401

Отправлено 25 дек. 2015 г., 3:43 пользователем Олег Евсегнеев   [ обновлено ]

Статья перенесена на сайт нашего нового проекта RobotClass.

GSM модуль SIM900A. Прошивка и использование

Отправлено 11 нояб. 2015 г., 2:35 пользователем Олег Евсегнеев   [ обновлено ]

Статья перенесена на сайт нашего нового проекта RobotClass.


Timelapse на Raspberry Pi (ускоренное видео)

Отправлено 19 окт. 2015 г., 6:41 пользователем Олег Евсегнеев   [ обновлено ]

Статья перенесена на сайт нашего нового проекта RobotClass.

Обновление монитора последовательного порта SFMonitor

Отправлено 7 окт. 2015 г., 14:23 пользователем Олег Евсегнеев   [ обновлено 7 окт. 2015 г., 14:26 ]

Когда-то давно, аж три года тому назад, я сделал небольшое приложение на языке python, которое я назвал Serial Flow Monitor. Название произошло от имени библиотеки SerialFlow, реализующей простой протокол обмена данными по последовательному порту. Подробно про этот протокол я уже писал в одной из статей.


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

И вот, пару недель тому назад, мне снова потребовался мой SFMonitor. Появилась задача визуализации данных с датчика TSL1401. Эти данные представляют собой вектор из 128 байт. То есть это совсем не график функции от времени, это нечто другое. Нужен был новый тип визуализации пакета, который бы каждый момент времени отображал все значения вектора в плоскости V(N), где V - значение байта, N - номер байта.

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


Также, следовало адаптировать код под свежую версию python 3.4, ведь изначально SFMonitor запускался на python 2.6. В свою очередь, обновление интерпретатора привело к необходимости замены компонента визуализации графиков. Пришлось отказаться от QWT, в пользу pyqtgraph. О чем я нисколько не пожалел. pyqtgraph такой же быстрый, как и QWT, а самое главное - проект ещё живой.

Изменения

За две недели вечернего кодинга, удалось реализовать практически все хотелки. В итоге, было сделано следующее:

1) Добавлен новый тип визуализации Вектор. То, что раньше называлось вектором, было переименовано в Позицию. Именно режим Позиция изображен в ролике про акселерометр.

2) Добавлен вид отображения графиков - точечный (scatter).

3) Добавлены настройки:

 Данные/Параметры потоков
  • цвет графика;
  • точечный график - переключение между точечным и сплошным;
  • беззнаковый/знаковый - как интерпретировать данные в пакете, со знаком или без;
  • размер значения в пакете - сколько байт занимает значение в пакете. Может быть 1 байт (0..255), или 2 (0..65535);
  • отображать шлейф - в режиме Позиция, за маркером тянется небольшой шлейф;
  • наличие разделителя значений - вариант пакета, в котором значения не разделяются символом 0x10, удобно для векторов;
 Данные/Шкалы графика
  • размер страницы;
 Файл/Настройки:
  • язык;
 
4) Добавлена локализация с возможностью расширения. Исходники переводов хранятся в файлах .po, которые затем необходимо 

скомпилировать в .mo файлы. Пока есть только Английский и Русский языки.

5) Наконец, собран msi-инсталлятор для установки приложения на windows. Сборочный скрипт добавлен в git-репозиторий проекта (setup.py)

Кстати, есть ещё одно важное изменение. Сама библиотека SerialFlow тоже немного изменилась, так что следует взять свежую версию по ссылке внизу статьи. В частности, изменилась функция setPacketFormat. Теперь у неё три таких аргумента:
  • размер значения в байтах (1 или 2);
  • длина пакета (до 128);
  • разделять значения (true или false).

Что дальше

Исходники проекта теперь общедоступны на Github. Каждый желающий может дописать библиотеку, добавить в неё новые возможности. Достаточно написать мне на почту просьбу о добавлении в участники проекта (нужно выдать права "пушера" на github). Также я готов выслушать разумные предложения по развитию проекта.

В ближайших планах написать урок по использованию приложения на нашем учебном портале robotclass.ru, а также дополнить существующие уроки.

P.S. Данные с датчика TSL1401 так и не удалось посмотреть - пациент умер :( 

Ссылки

Исходные коды SFMonitor: https://github.com/makeitlab/software_tools.git



Bluetooth модули HC-05 и HC-06: настройка

Отправлено 26 апр. 2015 г., 14:59 пользователем Олег Евсегнеев   [ обновлено ]

Статья перенесена на сайт нашего нового проекта RobotClass.

Крушение БПЛА, или где не стоит летать

Отправлено 22 сент. 2014 г., 5:38 пользователем Олег Евсегнеев   [ обновлено 22 сент. 2014 г., 5:40 ]

Больше месяца назад, 3-го августа, наш хакспейс организовал коллективные полеты на БПЛА. Мы решили собраться на стадионе радиоколледжа, что на Крауля 168 в Екатеринбурге. С собой можно было приносить все что летает: вертолеты, самолеты, мультикоптеры и даже орнитоптеры. Основная идея мероприятия была крайне банальна - просто полетать в свое удовольствие, и показать, кто на что горазд :)

Не буду подробно останавливаться на мероприятии, скажу лишь, что присутствовало 5 пилотов (или операторов), которые принесли в общей сложности: шесть квадрокоптеров, три вертолета и два орнитоптера. Один вертолет сжег свой контроллер, один квадрокоптер разбился  в хлам, а другой сломал одну балку.




По итогам полетов были смонтированы три фильма:

Коллективные полеты. Часть 1


Коллективные полеты. Часть 2



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

Красный Октябрь

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

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

После пары удачных полетов на высоту около 100 метров (на глазок), куда я раньше никогда не поднимался, мы решили прикрутить к машине GoPro камеру. Прикрутить на изоленту :) В результате такой модификации, центр масс квадрокоптера сместился вбок, что немного усложнило управление.


Я поднял дестабилизированный квадрокоптер в небо, и стал пытаться заснять присутствующих людей на камеру. Поначалу все шло отлично, что можно наблюдать на следующем видео. Спустя какое-то время, я неосторожно направил машину в сторону зданий колледжа, совсем забыв что это РАДИО-колледж! 

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

Коллективные полеты. Часть 3 - Крушение


О причинах падения судить сложно. Очевидно, что на трагедию повлияло сразу несколько факторов. Во-первых, небольшой опыт управления квадрокоптером. Во-вторых, дисбаланс из-за примотанной сбоку GoPro камеры. В-третьих, отключенная Z-стабилизация, что в сумме с первыми двумя факторами значительно снизило управляемость машины. В-четвертых, вышка сотовой связи. Как бы я криво не управлял, то что произошло рядом с вышкой трудно объяснить моим неумением. Наконец, в-пятых, отсутствие системы возврата на базу. Возможно, при потере устойчивой связи с землей квадрокоптер смог бы вернуться на базу сам.

Анатомирование

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

  • дорогущая камера GoPro - целая (фуууффф...);
  • все четыре балки целые, даже царапин нет; 15см-кончик одной балки загнулся на пару градусов;
  • контроллер, в составе двух mbed, IMU и радиопередатчика - целые; причем APC220 валялся рядом с местом крушения;
  • остались невредимыми три из четырех двигателей;
  • практически все пластиковые крепления, напечатанные на 3D-принтере - уничтожены;
  • алюминиевые пластины кузова - погнуты;
  • один двигатель заклинен - погнуло колокол;
  • LiPo батарея разрушена.
Немного фотографий уничтоженных компонентов.

Разрушенная LiPo батарея

   

Крепление аккумулятора   Рамные элементы кузова

Другие фото опять в гугл-альбоме

Реинкарнация

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

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

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

В общем, как только найду финансирование, соберу Красный Октябрь 2.0 :) Очень хочется провести испытания до первого снега.


Пульт управления для квадрокоптера. Версия 2.0

Отправлено 25 июл. 2014 г., 14:55 пользователем Олег Евсегнеев   [ обновлено 25 июл. 2014 г., 14:59 ]

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

В принципе, пульт со всеми возложенными на него задачами справлялся вполне успешно. Но были и серьезные недостатки.
  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 матрицу.

Также хочется добавить несколько полезных функций и доработок:
  • калибровка джойстиков;
  • возможность ассоциировать потенциометры с любыми параметрами из общего списка (пока они вовсе отключены);
  • вывод GPS телеметрии.
Надеюсь завершить эпопею с пультом и испытать квадрокоптер в новом кузове до наступления зимы!


Установка квадратного профиля на мультикоптер

Отправлено 15 июн. 2014 г., 11:17 пользователем Олег Евсегнеев   [ обновлено 15 июн. 2014 г., 11:21 ]

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

Проблема 1На фотографии видно, что крепление мотора представляет собой T-образную алюминиевую штуковину. Снизу крепления есть винт, который позволяет зажимать в нем трубку луча. Точно такое же крепление соединяет кузов квадрокоптера и все его лучи.


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

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

Квадратный профиль

Чтобы победить эти две проблемы, я решил заменить трубчатые лучи на квадратный алюминиевый профиль. Был вариант взять профиль местного производства, со стенками 1мм. Но совершенно случайно, у коллеги валялся правильный "летающий" профиль со стенками 0.5мм и длиной сторон - 13мм. Длина профиля осталась прежней - 250мм.

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


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


Попутно, решено было пустить проводку от ESC к моторам через лучи. Сами же ESC захотелось разместить на брюхе машины.


Поскольку пришлось перепаивать и удлинять проводку между ESC и моторами, громоздкие 3.5мм коннекторы-бананы я заменил на миниатюрные 2.5мм. Эти разъемы хорошо видны на первом фото. Совсем отказываться от таких соединений я не стал, ибо муторно распаивать и спаивать проводку при каждой модернизации.

Наконец, соединив силовую проводку и собрав кузов, получилось вот такое чудо:


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

Также в планах прокачать пульт дистанционного управления. Хочется добавить новые параметры телеметрии и настройки, увеличить дисплей, а самое главное - поставить джойстики от правильных пультов.

Выкладываю все чертежи. Печатал PLA пластиком с высотой слоя 0.3мм.


AHRS алгоритм Себастиана Мажвика (Sebastian Madgwick)

Отправлено 27 мая 2014 г., 12:25 пользователем Олег Евсегнеев   [ обновлено 27 мая 2014 г., 12:30 ]

Выжав все соки из виброразвязки, я таки решился заменить примитивный комплементарный фильтр (КФ) инклинометра на что-то более подходящее. Ведь значения углов по-прежнему сильно скакали при максимальной тяге двигателей. На что можно заменить КФ? Да на тот же фильтр Калмана. Хорошо всем известный фильтр имеет множество реализаций на разных языках, и воплощен в виде библиотек для разных платформ. Так, например, библиотеку с фильтром Калмана легко найти для Arduino и для моей любимой mbed.

Но это не мой путь:) Еще давненько я заприметил другой фильтр, который, судя по описанию, давал результаты еще более лучшие чем фильтр Калмана. Разработал этот математический аппарат хороший человек по имени Sebastian Madgwick, в рамках работы над своей докторской (Ph.D.) диссертацией.

У меня не входило в планы углубляться в принципы работы фильтра, благо все это можно найти в его статье. Я лишь взял исходники, адаптировал их под mbed и грязно использовал в своей подсистеме стабилизации. Благо, на официальном (?) сайте проекта есть исходники для разных платформ, включая: c#, c++, и даже для MathLab.

Использование

По сути, автор предлагает использовать одну из двух функций: MadgwickAHRSupdate или MadgwickAHRSupdateIMU, которые возвращают кватернион положения инклинометра в пространстве. Функции имеют вид:  

MadgwickAHRSupdate( tdelta, gyr[X], gyr[Y], gyr[Z], acc[X], acc[Y], acc[Z], mag[X], mag[Y], mag[Z])

MadgwickAHRSupdateIMU( tdelta, gyr[X], gyr[Y], gyr[Z], acc[X], acc[Y], acc[Z])

Здесь 
  • tdelta - добавленный мной аргумент - пройденное между итерациями время;
  • gyr[X] - показания гиротахометра (пусть гироскопа) в рад/сек;
  • acc[X] - показания акселерометра в исходных единицах;
  • mag[X] - показания магнитометра в исходных единицах;
В общем то функции отличаются только тем, что первая умеет учитывать показания магнитометра, а вторая нет.

Результаты

Как говорится, лучше один раз увидеть:


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

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



Виброразвязка квадрокоптера подвесного типа

Отправлено 3 февр. 2014 г., 13:23 пользователем Олег Евсегнеев   [ обновлено 3 февр. 2014 г., 13:26 ]

Уже не раз я переделывал виброразвязку подсистемы стабилизации квадрокоптера. То батарею решу поменять, то эффект оказывается недостаточным. На этот раз я решил сделать виброразвязку способом, который подглядел в системах подвеса камер и в контроллерах Naza. Задача состояла в том, чтобы подвесить жесткосцепленные батарею и контроллеры на силиконовые амортизаторы, которые жестко крепятся к кузову.

Вот такое решение было использовано до модернизации:

http://farm3.staticflickr.com/2870/10462995214_bd4a4866d5.jpg

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

Для нового решения в Китае были закуплены такие вот силиконовые (судя по ощущениям) амортизаторы. На сайте продавца они были в двух размерах - я взял немного и тех, и тех.

http://farm6.staticflickr.com/5525/11912009833_f346b49a5e.jpg

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

Кстати, изначально я хотел изготовить детальки из обычного текстолита толщиной 3мм. Даже купил большой лист 1x2метра. Но текстолит оказался чрезмерно гибким :( Пришлось резать из того что было: фольгированного стеклотекстолита 1.6мм. В будущем, конечно, сделаю все из углепластика или алюминия.

http://farm8.staticflickr.com/7324/12293584476_889dc1e024.jpg   http://farm8.staticflickr.com/7402/12293583836_76765f21cf.jpg   http://farm6.staticflickr.com/5481/12293015575_a9340737fc.jpg

Достаточно простая конструкция, использующая шесть амортизаторов. Предусмотрел даже дырки под две разные батареи: на 5000 мАч и на 3000 мАч. Для фиксации батареи использовал пластиковую детали от предыдущего варианта конструкции.

Так обновленный квадрокоптер выглядит в сборе:

http://farm8.staticflickr.com/7450/12293017175_9f318806be.jpg

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


1-10 of 46