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

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

baychi
smalltim:

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

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

AlexSneg
Drinker:

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

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

smalltim:

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

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

Drinker
AlexSneg:

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

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

AlexSneg:

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

Щя сделаю.

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