flybrain. передатчик + приемник + автопилот. powered by stm32

AlexSneg

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

Также чуть интенсивней заставил сбрасывать высоту. В принципе работает на стадии удержания курса.

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

Комментирую видео.

Ветер был устойчивый 6-7м/с параллельно взлетке.

1:05 - взлет
4:50 - отлет на 700м и автовозврат
6:40 - еще на 700 в сторону и автовозврат. В принципе видно как оно развернулось и держит курс. В принципе, вполне достойно. Периодически снижает высоту. Сейчас коридор высотный возле дома установлен на 50-60м
08:17 - Начал тестировать автоматический полет миссии. Мозголет перебирает КТ автоматически. Я не участвую.
08:46 - КТ0 достигнута, выбрана КТ1
09:15 - КТ1 достигнута, выбрана КТ2
09:30 - КТ2 достигнута, выбран возврат на базу
09:55 - база достигнута. Мозголет оставлен на базе. Летал и колбасился сам пока мы ходили в кусты доставали обломки яка-52 12кг, который мужики только-что раздолбали при посадке. На ролике он в начале иногда в кадр еще целым попадает 😦
12:30 - посадка, чуть в себя любимого не залетел, пришлось отпрыгивать. Ёёёё, ну какой-же кайф на стабе садиться!

Итак. Цели испытаний достигнуты. Делаем правки нед ошибками на этой неделе и снова в небо по готовности.
Крепление камеры не менял, хотя все винты протянул. В результате есть отрезки вообще без тряски. Значит все-таки камера трясется.

AlexSneg

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

01:30 - взлет
06:40 - 700м, возврат
09:05 - еще 700м, возврат
11:20 - старт на КТ0
12:04 - старт на КТ1
12:45 - старт на КТ2
13:00 - RTH
13:37 - окончание миссии, вернулся на базу
17:11 - посадка

msv

OSD- фликует, лечится?
В ИМУ крен после длительных поворотов неточен. Моя реализация DCM так работала при неточном расчете центробежки (вместо реальной линейной скорости на первых порах считал по фиксированной средней).

AlexSneg:

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

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

AlexSneg
msv:

OSD- фликует, лечится?

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

msv:

В ИМУ крен после длительных поворотов неточен

Да, я в этом тесте проверял физическую модель расчета критериев (мне нужно в реале оценить как они работают, прежде чем их применять), оно сейчас чисто на свободном ходе тормозит. Сейчас в логах можно будет посмотреть реальные временные характеристики выхода из виражей. Я проанализирую и сделаю динамические демпферы. Это задача для следующих тестов.

msv:

Может есть графики логов, на которых можно оценить переходные характеристики

Раскрывать свои алгоритмы я сейчас не буду.
Вот лог, там все есть, можно посмотреть и построить графики если хочешь.
Надо же уже 27-ой полет!

flight_27.rar

rual
AlexSneg:

В ИМУ крен после длительных поворотов неточен Да, я в этом тесте проверял физическую модель расчета критериев (мне нужно в реале оценить как они работают, прежде чем их применять), оно сейчас чисто на свободном ходе тормозит.

Т.е. сейчас коррекции центростремительного ускореня нет?

AlexSneg:

Вот лог, там все есть,

А “сырой” аксель можешь выложить в логи?

AlexSneg
rual:

Т.е. сейчас коррекции центростремительного ускореня нет?

Я может неточно выразился. Отвечал на вопрос по рулению, а не по IMU. Сорри.

В IMU крутится Кальман, ему не надо специально ничего компенсировать, если все правильно настроить, оно работает без костылей. Это относится и к центробежке. При длинном развороте - да, возникает временная ошибка, но она ограничена моими настройками и более чем некоторая величина превысить не может, вот хоть ты кругами облетайся. В том числе это плата за виброустойчивость. Матрицы подобраны так, чтобы гарантировано иметь сходимость, пусть даже за счет допущения небольших временных неточностей. Кроме того сейчас компас откалиброван как попало, можно даже сказать совсем никак. На видео может это не сильно заметно, но если платку провернуть вокруг своей оси ролл за счет кривого компаса может показывать 0 на север и +3 на юг, затем по мере поворота опять в 0 приходит. Это четко видно когда я лечу к лесу оно ровно показывает, а когда от леса к взлетке, его слегка уводит. Надо бы конечно заново и гиру и маг перекалибровать, но лень мне этим заниматься, потому как я конфиги время от времени переписываю в дефолт и калибровка сбрасывается. А заниматься этим в поле нет никакого желания, сейчас есть гораздо более важные задачи.

rual:

А “сырой” аксель можешь выложить в логи?

С полета никак, у меня флешка 2мега, а аксель фигачит с частотой под 100 герц(если память не изменяет)
его можно спихнуть только в USB, но usb в полете нет, сам понимаешь.

rual
AlexSneg:

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

мда… Я с калманом не дружу, для меня это волшебство… Не понимаю я, от куда берётся достоверная информация о векторе G, если он длительное время смещён за счёт центростремительного ускорения, и как внести поправки, если нет данных для вычисления базиса? Где можно по русски и доходчиво про калмана почитать?
А вообще, впечатлён результатами, за столь короткое время. Поздравляю!

alex-ber

А по-моему все супер!!!
Респект разрабу!
давно читаю тему (с самого основания…) - скептикам ПРИВЕТ!!!
сам не прогер, поэтому судить не могу…
Но Алекс - просто молодец…
Чуствую сейчас кто-то подтянется критиковать…

smalltim
alex-ber:

Чуствую сейчас кто-то подтянется критиковать…

С чего? Всё путем, разве что центробежку надо таки учитывать. Если дать модели кругами полетать над базой, то за минуту без коррекции любого калмана сшибет.
Ну и ПИДЫ. Чем не угодили? Весь мир их уже лет 50 как их использует везде, и пока альтернатив особых нету. Или я ошибаюсь?

AlexSneg

С Кальманом на самом деле все очень просто, если реально вникнуть. Никаких шаманств там нет. А с кватернионами, как оказалось, еще проще чем с эйлером. Я вчера глянул в свой код, чтобы освежить в памяти, что я там делал. Так вот на вопрос об учете ЦСУ, ответ простой.
У меня стоит некоторый зазор достоверности вектора G. Если он по модулю вылезает за заданные рамки, достоверность его снижается при корректировке кватерниона, а достоверность мага нарастает. Соответственно, отсюда все результаты. Компас не калиброван + есть лаг по корректировке акселем в недостоверной зоне. Но расти ошибка будет только до пределов пока аксель совсем не исключается из цепочки корректировки. Ну собственно это мы и видим. До определенной ошибки оно растет, а дальше хоть уповорачивайся. Но в этот момент на передний план выходит компас и он должен показывать правильно. Ну короче, все эти эффекты, это вопрос испытаний и более качественных подборов границ вариативности, шумов и достоверности. Можно, наверное, и точнее будет подобрать. Но сейчас я не хочу в это дело влезать. Практика показывает, что кривизна геометрии самой модели + небольшие порывы ветра сносят и качают горизонт сильнее, чем любые развороты с ЦСУ.

smalltim:

Если дать модели кругами полетать над базой, то за минуту без коррекции любого калмана сшибет.

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

smalltim:

Ну и ПИДЫ. Чем не угодили?

Просто я хочу попробовать что-то другое. Пиды всегда можно прикрутить, этот вариант я держу на про запас. В больших самолетах и веса больше, и крены там маленькие. Медленное нарастание I особо не достает. А на модели, от нее либо толка нет, либо за реакцией модели не успевает. Сегодня ветер такой, завтра сякой. принятие решения должно быть быстрее. Получится у меня или нет что-то хорошее, я пока не знаю. Но в конце концов, это мой проект и у меня есть возможность потратить немного усилий для выяснения своих заблуждений. Никто не может мне запретить это дело. Ты кстати тогда был прав, у меня алгоритм if() else уже за сотню кейсов переваливает. Но ведь маневрирует! 😃

alex-ber
smalltim:

Сообщение от alex-ber Чуствую сейчас кто-то подтянется критиковать… С чего?

Тимофей, эта фраза никоим случаем к тебе не относилась… К кому она была обращена и так знает…
Алекс, а на видео какой из вариантов твоего АП: с подключением в обычному РС каналу или с твоим приемником-передатчиком!
Спасибо!

rual
AlexSneg:

У меня стоит некоторый зазор достоверности вектора G. Если он по модулю вылезает за заданные рамки, достоверность его снижается при корректировке кватерниона, а достоверность мага нарастает. Соответственно, отсюда все результаты. Компас не калиброван + есть лаг по корректировке акселем в недостоверной зоне. Но расти ошибка будет только до пределов пока аксель совсем не исключается из цепочки корректировки. Ну собственно это мы и видим. До определенной ошибки оно растет, а дальше хоть уповорачивайся. Но в этот момент на передний план выходит компас и он должен показывать правильно.

У меня похожий алгоритм, только полной отсечки коррекции нет:

 /* определяем  длину дуги между G и ИНС */
 qAcc.normalize();
 float delta = inner_product(qIMU, qAcc);
 if  (abs(1 - AccMag) < 0.05f) {
  q = (qIMU * (1.0f-omega))+(qAcc*delta*omega);
  /* устраняем вырождение кватерниона */
  if ((q.w!=0)||(q.x!=0)||(q.y!=0)||(q.z!=0)) qIMU = q;
 }

точнее она будет при длине дуги равной Пи.

AlexSneg
alex-ber:

Алекс, а на видео какой из вариантов твоего АП: с подключением в обычному РС каналу или с твоим приемником-передатчиком!

Пока только мой передатчик и мой приемник. Сопрягалка сейчас как раз в процессе написания программы зависла. Изучаю PPM сигналы с приемника. Делаю так сказать даунгрейд.

Manamet

Молодец, AlexSneg!
Значит так … я решил освоить МК STM32 и начал с STM32F103C6T6A. Планирую пока что собрать платку, помигать светодиодами, сделать свой энкодер, научиться читать данные с мемс гироскопа L3G4200D по SPI и I2C, сделать таймер (нужны часы реального времени), записывать получаемые данные с датчиков на SD карту, а далее квадролет и самолет … .
Пока что налепил такую схемку:
s48.radikal.ru/i119/1209/b0/7b404af4d88c.jpg
Питать буду от двух аккумуляторов типа АА (1.2 В каждый). Есть вопросы по поводу схемы:

  1. Правильно ли гироскопы подключил?
  2. Кусок схемы AlexSneg-а:
    s57.radikal.ru/i157/1209/f8/d2e3e68e7646.jpg
    1* - почему 4 выход гироскопа к земле подключен?
    2* - конденсаторы С16 и С22 для чего?
  3. Подскажите, пожалуйста, схемку для прошивки МК, чтобы через USB ПК можно было прошить.
BAU
Manamet:

Значит так … я решил освоить МК STM32 и начал

Молодой человек, вы случайно не ошиблись веткой? Сдесь тема по автопилоту flybrain, а не ликбез по основам цифровой электроники.
Или хоть бы в личку свои вопрсы задавали.

AlexSneg
Manamet:

Значит так … я решил освоить МК STM32 и начал с STM32F103C6T6A.

А что так торкнуло на подвиги ратные? Может съел чего не того? 😲

  1. двух акков по 1,2В не хватит.
  2. я не понял зачем тебе 2 гироскопа? Думаешь два будет лучше чем один? Или у тебя двойное резервирование на случай выхода одного из строя?
  3. 4 выход насколько я помню то ли адрес I2C фиксирует, то ли в сам режим I2C переключает выходной интерфейс. Я точно не помню, посмотри в ДШ
  4. Можешь обойтись и без С16 и С22. Работать оно будет гарантированно, только криво. А ты вообще в курсе зачем блокировочные кондеры ставят?
  5. STM32F103C6T6A по usb прошить без танцев с бубнами не получится. Хочешь заниматься девелопингом под stm32, покупай jtag отладчик.

Судя по вопросам мне кажется пока рановато за паяльник, может еще хотя бы недельку ДШ разные поизучать? Мне кажется основы можно можно на специализированных форумах поизучать. И необязательно доставлять удовольствие всей аудитории моделистов. На худой конец можно в личку спросить.

Я, кстати, знаю одного продвинутого перца. Он в МК знает ну ващщще усе! Не хочу вслух называть его имени. Но в личку я тебе скажу к кому обратиться.😒😒😒

EHOT

Manamet, лучше прикупите недорогую evaluation board (хотя бы STM32F4Discovery) Избавитесь от фантомных проблем связанных с пайкой и прошивкой.
Заодно прошивальщик других плат будет. ну и ессно прошивать этого “бобика” сможете через USB.

Подключать дополнительные внешние микрухи или модули можно через штырьковый разъем.
ответы на простые вопросы можно найти на http://easyelectronics.ru

18 days later
AlexSneg

Так, мне нужна помощь зала для прояснения 3-х вопросов.

  1. Расскажите мне или ткните где найти и прочитать про то, как на стандартных аппаратурах FS событие обнаружить на приемнике. А так же, как это будет обнаруживаться для варианта sumppm
  2. Сколько каналов ждать в sumppm сигнале? Сколько их там вообще может быть? Тайминги такие же, как для дискретных ppm, то есть 1-2мс или бывают клинические случаи несоблюдения стандартов?
  3. Полярность фронтов в сумппм отрицательная всегда или отдельные производители считают, что они ровнее других и работают по положительным фронтам?

Собственно, все это нужно для завершения деталей прошивки по модулю сопрягалке. Я тестирую со своим пультом e-sky 4ch. У него sumppm отдает 8 каналов отрицательными фронтами на тренерском разъеме. Но как бы хочется понять общую обстановку по этому делу.

--------------
В субботу довелось проверить полезность АП в реале. Хотел протестить до куда рфм22 пробивает. Залетел на 2км и тут сдох акк ноутбука. Изображение пропало. Врубил возврат домой и перекрестившись стал ждать. Через пару минут скай прилетел у хозяину. Я доволен. 😁

Неудачной получилась проверка аварийной посадки. Поднял самолет на 500 метров вверх и вырубил пульт. Оно сказало FS, прилетело и начало кружиться и спускаться. нарезало порядка 6 кругов (горизонт кстати не перекосило без компенсации центробежки, как некоторые предполагали). Затем я понял, что надо прекращать снижение, оказалось, что центр кружения находится над автодорогой оживленной. Ну косяк понятен, буду вводить процедуру корректирующую центр кружения ближе к точке дома, а не где попало возле дома. В чистом поле в принципе по-фиг, дальше 100 метров оно не улетит, но в моем случае 100м уже попало в нехорошую зону.

Нарыл еще косяк с алгоритмом передачи тангажа от процедуры “удержания курса” к процедуре “вираж”. После этого останется заняться компасом и сделать его таки tilt compensated. На этом можно будет сказать, что в первом приближении борьба с навигатором окончена. Останется только один косяк - отсутствие воздушной скорости. Как только дифф. датчик ко мне приедет, займемся и этим. Ну, а пока останется риск провала при неблагоприятном попутном ветре.

SkyWorker

ФС- выход сигнала за границы откалиброванного диапазона. Обычно так.
Сумм ппм я встречал как негативный, так и позитивный. Эксперт помоему как то сделал так, чтш понимает оба варианта, определяет сам автоматически. Лучше делать так конечно.
Количество канал чем больше, тем лучше 😃.
Я сейчас вытащил 12 каналов по сумм ппм. Наверно оптимально. Но вдруг кто на копиях полетит по фпв! 😃 им маловато будет.

AlexSneg
SkyWorker:

ФС- выход сигнала за границы откалиброванного диапазона

В каких пределах? 10мкс может поставить? На каком канале? заранее заданном?
А как тогда оно FS положение серв устанавливает, если выходит за границы допустимого диапазона? Кстати выходит в большую или меньшую сторону?

SkyWorker:

Я сейчас вытащил 12 каналов по сумм ппм.

Как так, 12 каналов не поместится в 20мс период. Или у меня опять пробел в знаниях?

BAU
AlexSneg:

На каком канале? заранее заданном?

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