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

baychi
AlexSneg:

А реально это на 100% достоверно можно проверить, только имея графический уровень горизонта с фишки в момент теста.

Фишка ведет себя точно так-же как Ваша платка - начинает кувыркаться. 😃

vldvv:

Не похоже ли это на причину неадекватного поведения FY-ххх ?

Но это не то, что ее ставится в вину в первую очередь. Проблемма неопределенности roll при pitch близком к 90 градусов есть у ВСЕХ систем стабилазации, как у пирометрических, так и инерциальных. Обычно она решается чисто программными затычками, типа if/else…

vldvv
baychi:

Но это не то, что ее ставится в вину в первую очередь. Проблемма неопределенности roll при pitch близком к 90 градусов есть у ВСЕХ систем стабилазации, как у пирометрических, так и инерциальных. Обычно она решается чисто программными затычками, типа if/else…

Дойду на работу и проделаю тест с CoterControl уже самому интересно

Это хорошо что Вы, Александр, быстро нашлись 😃 только начал писать на вас ссылку 😃

kimu
baychi:

Проблемма неопределенности roll при pitch близком к 90 градусов есть у ВСЕХ систем стабилазации, как у пирометрических, так и инерциальных.

А вариант поставить второй гироскоп/пиродатчик повернутый градусов на 45 относительно первого не рассматривается по чисто экономическим соображениям?

baychi
kimu:

А вариант поставить второй гироскоп/пиродатчик повернутый градусов на 45 относительно первого не рассматривается по чисто экономическим соображениям?

Проблемма совсем не в датчиках. Показания датчков непрерывны. Разрыв начинается в арктангенсе, когда при неопределенности надо вычислять реальный roll. ИМХО, проще вообще не пытаться вычислять его в такой ситуации, как например делает АП от Smalltim.

AlexSneg
baychi:

Фишка ведет себя точно так-же как Ваша платка - начинает кувыркаться.

Вот спасибо за видео. 100% точняк 1 в 1 поведение, которое я наблюдаю на своей платформе, а результат именно тот, который я и предполагал. Она пыталась рулить… и бум! Александр, вы просто спасли мой сон. Я реально 2 ночи не спал, ворочался, думал у меня проблемы в алгоритме. Теперь я вижу, что у меня все правильно.

baychi:

Проблемма неопределенности roll при pitch близком к 90 градусов есть у ВСЕХ систем стабилазации, как у пирометрических, так и инерциальных.

Не, не так. Это не проблема инерциальных систем. Дринкер уже поставил точный диагноз. Это банально:

Drinker:

Вот это говорит о том, что проблемы нет никакой.

вот я запостил видео выше, где у парней этой проблемы нет. И я вижу их исходники. Они не работают углами эйлера. Но OpenGL обучен прямой работе с кватернионами при развороте камеры обзора. Осталось разузнать как оно это делает. Блин сколько всего нового приходится узнавать по ходу дела… Ладно, надо в этом вопросе сделать паузу. Понятно, что решение есть, просто оно не на поверхности. Надо дать мозгу отдохнуть. Вот был бы, кто в 3D анимаци понимает, наверно бы объяснил, как они объекты на 360 градусов во все стороны крутят. Нашел старый фотик с убитой ПЗС, который PAL отдает в телек. Спаял разъемы, буду сейчас OSD осиливать. К извлечению roll - pitch - yaw углов из кватерниона вернусь позже, когда мозг от этого отдохнет. И еще хочу компас уже подключить к расчету положения тела. Надо только наладить его калибровку. Тут мозга много не надо. Вот и займусь пока.

baychi
vldvv:

Дойду на работу и проделаю тест с CoterControl уже самому интересно

Крчу в данный момент на столе. 😃 При чистой постановке на хвост, ведет себя более грамотно, чем Фишка в том полете, но если чуть покачать - тоже начинается вращение.
Но в CopterControl - алгоритм DCM (в OpenPilot - EKF), а что прошито в Фишке - неизвестно.

AlexSneg
baychi:

если чуть покачать - тоже начинается вращение.

Вот! Понятно, что сделали припарку if/else если внезапно на хвост встали, чтобы в штопор на падать с разу. По идее дальше тупо ждать, когда тело уйдет из зоны неопределенности. А если долго не уходит, то…
Короче, косвенно подтверждается, что я прав. Общие грабли обозначены, осталось понять пути решения и не закрывать на это глаза.

Drinker
AlexSneg:

Дринкер уже поставил точный диагноз. Это банально:

А нафига в фпв летать с такими углами?

Да и что вы стабилизировать собрались? Полёт свечкой вверх?

AlexSneg
Drinker:

А нафига в фпв летать с такими углами?

Уж если делать, то делать хорошо, либо не делать совсем.

kimu:

второй гироскоп/пиродатчик повернутый градусов на 45 относительно первого

Для инерциалки это не имеет никакого смысла. проще иметь 8 референсных body frame’ов и переключаться между ними на ходу при переходе арктангенсов из одной четверти в другую во время расчета углов эйлера. А кватерниону положения вообще наплевать, он про арктангенс даже не догадывается. Он везде гладко без сингулярностей вращается. Кстати, похоже в 3D анимации так и делают.

Drinker
AlexSneg:

Уж если делать, то делать хорошо, либо не делать совсем.

Сейчас я у себя проверю, хорошо-ли я сделал.

kimu
baychi:

Разрыв начинается в арктангенсе, когда при неопределенности надо вычислять реальный roll.

Тогда также радикально как и со вторым гироскопом:
Считать параллельно второй roll, но сдвинутый градусов на 45. Когда первый приближается к 80 градусам, данные берутся со второго (сдвинутого)+45 градусов на который он сдвинут. Вышли из опасной зоны - переключаемся обратно на образцовый roll.

Только наверно сожранные ресурсы не будут стоить полученного результата…

SkyWorker
Drinker:

А нафига в фпв летать с такими углами?

Сказали в FY и сделали, как есть… 😃

AlexSneg:

Уж если делать, то делать хорошо, либо не делать совсем.

Спасибо, Вам, Алекс, за вашу работу! С таким подходом просто не может получится плохо.

kimu
kimu:

Считать параллельно второй roll

Или даже даже тому единственному roll сдвигать ноль. На выходе же не будет разницы, оно сразу насчитало 90 градусов, или сначала 45, а потом к ним отдельно ещё 45 прибавили.
Так и на обычных, железных, гироскопах (если память не отшибло) рамки двигают чтоб не сложились, а реальный угол определяется с учётом поправки.

smalltim
baychi:

ИМХО, проще вообще не пытаться вычислять его в такой ситуации, как например делает АП от Smalltim.

Я вычисляю, но у меня Roll не крутится 😉

Drinker
smalltim:

Я вычисляю, но у меня Roll не крутится

И у меня не крутицца, а честно ложится “на спину”

через 20 минут обещают можно смотреть.

baychi
smalltim:

вычисляю, но у меня Roll не крутится

Насколько я помню, ты ввел дополнительную логику защищающую алгоритм горизонта от неопределенностей.
Или теперь все “гораздо проще”? 😃

AlexSneg
Drinker:

И у меня не крутицца, а честно ложится “на спину”

На видео вижу график pitch, про roll ничего не вижу. Можешь одновременно показания pitch + roll + yaw совместить разными цветными линиями?

smalltim:

Я вычисляю, но у меня Roll не крутится

Дельтами по углам работаешь, при этом постоянно изменяя референсное положение? У тебя положение тела кватернионом описывается?

Drinker
AlexSneg:

На видео вижу график pitch

Это ролл. Специально только его выводил, чтобы мешанины не было. В примере ролл прыгает от 0 до 180 град при переходе питча через 90 град.

AlexSneg:

Можешь одновременно показания pitch + roll + yaw совместить разными цветными линиями?

Щя сделаю.

Яв гад, мешает на графике - затирает линии ролла и питча. Оставил тока их. Ролл красный, питч синий. Все отлично видно.

AlexSneg
Drinker:

Ролл красный, питч синий

Ну, ролл то почему у тебя поплыл? Он не должен плыть. Ты же ось ролл не вращаешь. С какого бодуна он вдруг на 180 развернулся?

Еще раз. Если ты берешь плату, ставишь ее горизонтально и начинаешь вращать pitch, то изменяться по кругу должен только один угол - pitch.
У тебя же мы наблюдаем как раз обсуждаемый эффект. Поначалу roll = 0, а pitch растет. Начиная с какого-то момента pitch ~80 градусов, roll резко начинает расти. И растет до тех пор, пока pitch не выйдет с другой стороны. Сделай масштаб мельче по временной оси для первого подъема графиков, ты увидишь сразу.

Drinker
AlexSneg:

С какого бодуна он вдруг на 180 развернулся?

Да потому что тело НА СПИНУ ложится и после 90 градусов питча летит в противоположную сторону.

Самолет переворачивается, понимаешь? Хотя вращения вдоль оси Х нет. Но нас интересует ролл и питч относительно ЗЕМЛИ.

AlexSneg:

pitch ~80 градусов, roll резко начинает расти.

Ничего подобного.

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

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

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

AlexSneg
Drinker:

Ничего подобного

Смотри внимательно на свои графики. Есть точка пересечения pitch = roll = 90
И это не абстрактные углы, а вполне конкретные, вычисленные твоим алгоритмом в момент времени t

Drinker:

Но нас интересует ролл и питч относительно ЗЕМЛИ.

В этой точке имеем самолет развернутый на 90 градусов по roll относительно земли по твоим графикам.

И на самом деле по барабану, кто как хочет это назвать. Главное факт в цифрах и графиках. Попробуй визуализировать свой график и ты увидишь в точке pitch=90 не просто линию, как ты видишь на графике, а увидишь винтообразное вращение тела. Особенно если еще yaw подключишь.

Drinker:

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

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