События
Фоточувствительная линейка TSL1401
Статья перенесена на сайт нашего нового проекта RobotClass. Новая ссылка: http://robotclass.ru/articles/line-sensor-tsl1401/ |
GSM модуль SIM900A. Прошивка и использование
Статья перенесена на сайт нашего нового проекта RobotClass. |
Timelapse на Raspberry Pi (ускоренное видео)
Статья перенесена на сайт нашего нового проекта RobotClass. Новая ссылка: http://robotclass.ru/articles/raspberry-pi-timelapse/ |
Обновление монитора последовательного порта SFMonitor
Когда-то давно, аж три года тому назад, я сделал небольшое приложение на языке 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) Добавлены настройки: Данные/Параметры потоков
Данные/Шкалы графика
Файл/Настройки:
4) Добавлена локализация с возможностью расширения. Исходники переводов хранятся в файлах .po, которые затем необходимо скомпилировать в .mo файлы. Пока есть только Английский и Русский языки. 5) Наконец, собран msi-инсталлятор для установки приложения на windows. Сборочный скрипт добавлен в git-репозиторий проекта (setup.py) Кстати, есть ещё одно важное изменение. Сама библиотека SerialFlow тоже немного изменилась, так что следует взять свежую версию по ссылке внизу статьи. В частности, изменилась функция setPacketFormat. Теперь у неё три таких аргумента:
Что дальшеИсходники проекта теперь общедоступны на Github. Каждый желающий может дописать библиотеку, добавить в неё новые возможности. Достаточно написать мне на почту просьбу о добавлении в участники проекта (нужно выдать права "пушера" на github). Также я готов выслушать разумные предложения по развитию проекта. В ближайших планах написать урок по использованию приложения на нашем учебном портале robotclass.ru, а также дополнить существующие уроки. P.S. Данные с датчика TSL1401 так и не удалось посмотреть - пациент умер :( СсылкиИсходные коды SFMonitor: https://github.com/makeitlab/software_tools.git SerialFlow библиотека: https://github.com/oevsegneev/arduino-dev/tree/master/libs/SerialFlow |
Bluetooth модули HC-05 и HC-06: настройка
Статья перенесена на сайт нашего нового проекта RobotClass. Новая ссылка: http://robotclass.ru/articles/bluetooth-hc-05-06/ |
Крушение БПЛА, или где не стоит летать
Больше месяца назад, 3-го августа, наш хакспейс организовал коллективные полеты на БПЛА. Мы решили собраться на стадионе радиоколледжа, что на Крауля 168 в Екатеринбурге. С собой можно было приносить все что летает: вертолеты, самолеты, мультикоптеры и даже орнитоптеры. Основная идея мероприятия была крайне банальна - просто полетать в свое удовольствие, и показать, кто на что горазд :) Не буду подробно останавливаться на мероприятии, скажу лишь, что присутствовало 5 пилотов (или операторов), которые принесли в общей сложности: шесть квадрокоптеров, три вертолета и два орнитоптера. Один вертолет сжег свой контроллер, один квадрокоптер разбился в хлам, а другой сломал одну балку. По итогам полетов были смонтированы три фильма: Кроме видео, разумеется, мы делали фото. Самые лучшие снимки можно посмотреть в моем гугл-альбоме Красный ОктябрьИтак, собственно, о моем квадрокоптере. Те кто следил за проектом, знают, что квадрокоптер находится на этапе настройки системы стабилизации. На самом деле, того что уже есть вполне хватает для дистанционного управления машиной. Однако, чтобы аппарат получился автономным, он должен уверенно зависать в одной точке, что пока не очень получается. Кроме того, пока не реализован алгоритм возвращения на базу в случае потери сигнала. Именно эта фича помогла бы избежать того, что произошло во время наших полетов. А произошло следующее. После пары удачных полетов на высоту около 100 метров (на глазок), куда я раньше никогда не поднимался, мы решили прикрутить к машине GoPro камеру. Прикрутить на изоленту :) В результате такой модификации, центр масс квадрокоптера сместился вбок, что немного усложнило управление. Я поднял дестабилизированный квадрокоптер в небо, и стал пытаться заснять присутствующих людей на камеру. Поначалу все шло отлично, что можно наблюдать на следующем видео. Спустя какое-то время, я неосторожно направил машину в сторону зданий колледжа, совсем забыв что это РАДИО-колледж! На крыше учебного корпуса размещались вышки сотовой связи. И именно туда держал путь мой квадрокоптер. Когда пришло осознание происходящего, все попытки вернуть машину домой проваливались одна за другой :( Когда аппарат подлетел совсем близко к вышке, он и вовсе потерял управление. Всю эту грустную историю можно посмотреть в третьем фильме. О причинах падения судить сложно. Очевидно, что на трагедию повлияло сразу несколько факторов. Во-первых, небольшой опыт управления квадрокоптером. Во-вторых, дисбаланс из-за примотанной сбоку GoPro камеры. В-третьих, отключенная Z-стабилизация, что в сумме с первыми двумя факторами значительно снизило управляемость машины. В-четвертых, вышка сотовой связи. Как бы я криво не управлял, то что произошло рядом с вышкой трудно объяснить моим неумением. Наконец, в-пятых, отсутствие системы возврата на базу. Возможно, при потере устойчивой связи с землей квадрокоптер смог бы вернуться на базу сам. АнатомированиеСобрав все части квадрокоптера мы принялись изучать повреждения.
Немного фотографий уничтоженных компонентов. РеинкарнацияКак хорошо, что этот квадркоптер делал я сам. Зная машину до болтика, можно легко восстановить её за короткое время. Но простого восстановление мне мало, я решил переосмыслить конструкцию с целью увеличения стабильности. Первое что хочется сделать - это сместить батарею с верхней палубы, внутрь корпуса. Для этого придется переделать алюминиевые рамные пластины. Сейчас внутри корпуса проложены шины питания, так что придется их перенести на дополнительную нижнюю палубу. Следует укрепить батарейный отсек. Возможно сделаю его не из пластика, а из алюминия. Заранее предусмотрю крепление для FPV камеры и радиопередатчика. Остальные компоненты пока останутся прежними. Лучи оставлю, несмотря на небольшой изгиб. Запасной двигатель уже нашел. Новую батарею заказал в Китае. В общем, как только найду финансирование, соберу Красный Октябрь 2.0 :) Очень хочется провести испытания до первого снега. |
Пульт управления для квадрокоптера. Версия 2.0
Два года назад, когда я только начал заниматься мультикоптерами, мне пришлось сделать небольшой самодельный пульт управления. Поскольку квадрокоптер задумывался сугубо автономным, все что требовалось от этого пульта - это управлять беспилотником во время испытаний и настройки. В принципе, пульт со всеми возложенными на него задачами справлялся вполне успешно. Но были и серьезные недостатки.
Чтобы устранить все эти недостатки, я решил кардинально переделать пульт. И железную часть, и софт. Вот что мне захотелось сделать:
Новый корпусУж очень мне полюбилась концепция слоистых корпусов для радиоэлектроники. Такую концепцию мы использовали в хакспейсе для создания учебных наборов по робототехнике. На картинке как раз изображен стенд для базового курса. Идея чрезвычайно проста и эффективна. Вырезаем из оргстекла или другого тонкого материала две пластины и соединяем их стойками. Все содержимое корпуса крепится либо к верхней, либо к нижней пластине. Элементы управления и менюЧтобы управлять кучей параметров, нужно либо разместить на пульте кучу потенциометров и добавить АЦП, либо делать все настройки через меню. Как я уже говорил, настройка потенциометрами не всегда хорошая идея, но и отказываться от нее не стоит. Так что, решено было оставить в пульте четыре потенциометра, и добавить полноценное меню. Чтобы перемешаться по меню, и менять параметры обычно используют кнопки. Влево, вправо, вверх, вниз. Но мне захотелось использовать вместо кнопок энкодер. Эту идею я подсмотрел у контроллера 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 матрицу. Также хочется добавить несколько полезных функций и доработок:
Надеюсь завершить эпопею с пультом и испытать квадрокоптер в новом кузове до наступления зимы! |
Установка квадратного профиля на мультикоптер
AHRS алгоритм Себастиана Мажвика (Sebastian Madgwick)
Выжав все соки из виброразвязки, я таки решился заменить примитивный комплементарный фильтр (КФ) инклинометра на что-то более подходящее. Ведь значения углов по-прежнему сильно скакали при максимальной тяге двигателей. На что можно заменить КФ? Да на тот же фильтр Калмана. Хорошо всем известный фильтр имеет множество реализаций на разных языках, и воплощен в виде библиотек для разных платформ. Так, например, библиотеку с фильтром Калмана легко найти для 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]) Здесь
В общем то функции отличаются только тем, что первая умеет учитывать показания магнитометра, а вторая нет. РезультатыКак говорится, лучше один раз увидеть: Можно легко заметить, что фильтр тов. Маджвика чертовски хорошо убирает так ненавистные мне шумы. Я подозреваю, с этим фильтром можно и с виброразвязкой особо не мучаться. Небольшое видео испытаний нового фильтра. Признаться, не очень показательное, но коптер ведет себя куда более адекватно. Теперь его странный полет контролируется строго моими неумелыми движениями. Ну и пульт конечно надо усовершенствовать - джойстик совсем не для полетов. |
Виброразвязка квадрокоптера подвесного типа
Уже не раз я переделывал виброразвязку подсистемы стабилизации квадрокоптера. То батарею решу поменять, то эффект оказывается недостаточным. На этот раз я решил сделать виброразвязку способом, который подглядел в системах подвеса камер и в контроллерах Naza. Задача состояла в том, чтобы подвесить жесткосцепленные батарею и контроллеры на силиконовые амортизаторы, которые жестко крепятся к кузову. Вот такое решение было использовано до модернизации: Контроллер с батареей соединялись с кузовом либо через вспененный полиэтилен, либо через схожий эластичный материал. Для нового решения в Китае были закуплены такие вот силиконовые (судя по ощущениям) амортизаторы. На сайте продавца они были в двух размерах - я взял немного и тех, и тех. Кстати, изначально я хотел изготовить детальки из обычного текстолита толщиной 3мм. Даже купил большой лист 1x2метра. Но текстолит оказался чрезмерно гибким :( Пришлось резать из того что было: фольгированного стеклотекстолита 1.6мм. В будущем, конечно, сделаю все из углепластика или алюминия. Достаточно простая конструкция, использующая шесть амортизаторов. Предусмотрел даже дырки под две разные батареи: на 5000 мАч и на 3000 мАч. Для фиксации батареи использовал пластиковую детали от предыдущего варианта конструкции. Так обновленный квадрокоптер выглядит в сборе: |
1-10 of 46