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

Drinker
AlexSneg:

Эффект кульбита по roll при достижении pitch 90 градусов тот же

А что по вашему мнению должно происходить в этом случае?

AlexSneg:

Если pitch устанавливается в 90 градусов, тело совершает пару вращений через roll прежде чем перевернуться вверх ногами

Всё гладко шло. Плата протравлена, проц припаен, но блин чета какито гимбал локи… Как с луны свалились вы ей богу.

AlexSneg
Drinker:

А что по вашему мнению должно происходить в этом случае?

НИчего, должно перевернуться без лишнего осевого вращения по roll.

Drinker:

Как с луны свалились вы ей богу.

Ну я же не 3D аниматор. Мне по большому счету разбираться в 3D вращениях и не предполагалось, но похоже придется. А то, что я эту проблему на свет божий вытащил, это о чем свидетельствует? Не более того, что я хочу в мелочах разобраться. Вот я вижу, что в ардупилоте, в мегапирате, и вообще во всех алгоритмах, которые я попробовал на это дружно забили болт, типа проблемы нет и фиг с ним, никому не скажем, что она есть, летайте так, а если самолет с ума сойдет, если свечой вверх под 90 градусов лететь, так это ваши риски.

msv:

Есть ли для этого рекомендации для выбора оптимального индекса модуляции?

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

Drinker
AlexSneg:

НИчего, должно перевернуться без лишнего осевого вращения по roll.

Ну как без вращения по крену?
При переходе через ±90 град по тангажу крен “инвертируется” потому что самик на спину ложится. Чего тут ненормального?

Кстати никакого вращения тут нет, есть смена знака не более.

AlexSneg:

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

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

AlexSneg
Drinker:

При переходе через ±90 град по тангажу крен “инвертируется” потому что самик на спину ложится. Чего тут ненормального?

не, ты либо не понял, либо не в теме.
вот ставим горизонт, условно пусть pitch = 0, roll = 0
Теперь удерживая roll=0, поднимаем pitch вверх.
примерно при достижении pitch = 86 начинается зависимость roll = F(pitch), но заметь, платформу мы при этом не вращаем.
далее roll нарастает и к моменту pitch = 90,roll показывает уже около 180 градусов.
двигаем pitch дальше, roll продолжает вращаться до достижения pitch =105 примерно, там оно ложится уже на спину, типа как надо.
То есть в промежутке 86 < pitch < 105 roll есть полная недостоверная лажа, как в прочем и yaw.
Далее выводы делай сам, что будет с самолетом, если попытаться рулить им в таком недостоверном положении.
Я понимаю, что реально это арктангенс так себя ведет, оно и не может по другому. Кватернион в этот момент показывает, что все ОК, к нему как раз претензий нет, тут все четко. Проблема в извлечении достоверной информации из него в этот момент.

Drinker:

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

Главное правильно себя убеждать.
Вот я только что посмотрел код OpenPilot на эту тему. Это единственный код, который по крайней мере эту проблему обозначил. Правда ребята тоже до конца не понимают как без патчей и припарок с этим бороться исключительно средствами математики, поэтому решили оценивать не только абсолютные углы но и тенденцию вращения тела на основании текущих гироскопов в промежутках неопределенности. Надо бы по правильному иметь производную вектора полета за последнюю секунду пропущенную через FIR, но они памятью ограничены и честно об этом пишут. И углы руления они уже пытаются извлечь, вычисляя обратный кватернион вращения, что на самом деле есть очень правильно.

vldvv

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

AlexSneg
vldvv:

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

У меня нет FY я не очень в теме.
Проверить имеет ли плюшка место быть очень легко.
Берем самоль с фишкой, калибруем в горизонт. Проверяем, что при покачивании влево - вправо элероны отрабатывают крены в противоположную сторону. Если все ОК, то ставим самоль в горизонт. Затем МЕДЛЕННО начинаем поднимать нос самоля вверх и внимательно следим за элеронами. Если при достижении угла близкого к 80 градусам начинаем видеть, что помимо руля высоты начинают двигаться элероны или рудер (хвост), значит проблема имеет место присутствовать. Далее двигаем самоль в 90 градусов. Начинаем раскачивать самолет в окрестности 90 градусов носом вверх, заставляя переходить его туда-сюда через pitch = 90 градусов раскачка должна быть очень медленной, это важно. Во время этой процедуры наблюдаем рули самолета, если начнется дурацкое активное руление, значит мои поздравления всем владельцем FY-ххх девайсов. Если самолет продолжает рулить ТОЛЬКО рулем высоты, значит есть надежда, что авторы по крайней мере поставили припарку. Тогда надо провести еще одну проверку на вшивость.

Ставим самоль на бок под 90 градусов, чем точнее, те лучше. А теперь пробуем вращать его медленно вокруг pitch оси. Внимательно наблюдаем, что самолет делает рулями. Если начнет чем-то рулить акромя элеронов, значит авторы поставили патч на pitch, но забыли патч на roll.

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

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 минут обещают можно смотреть.