flybrain. передатчик + приемник + автопилот. powered by stm32
При переходе через ±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.
Далее выводы делай сам, что будет с самолетом, если попытаться рулить им в таком недостоверном положении.
Я понимаю, что реально это арктангенс так себя ведет, оно и не может по другому. Кватернион в этот момент показывает, что все ОК, к нему как раз претензий нет, тут все четко. Проблема в извлечении достоверной информации из него в этот момент.
Вот это говорит о том, что проблемы нет никакой.
Главное правильно себя убеждать.
Вот я только что посмотрел код OpenPilot на эту тему. Это единственный код, который по крайней мере эту проблему обозначил. Правда ребята тоже до конца не понимают как без патчей и припарок с этим бороться исключительно средствами математики, поэтому решили оценивать не только абсолютные углы но и тенденцию вращения тела на основании текущих гироскопов в промежутках неопределенности. Надо бы по правильному иметь производную вектора полета за последнюю секунду пропущенную через FIR, но они памятью ограничены и честно об этом пишут. И углы руления они уже пытаются извлечь, вычисляя обратный кватернион вращения, что на самом деле есть очень правильно.
Не похоже ли это на причину неадекватного поведения FY-ххх ?
Не похоже ли это на причину неадекватного поведения FY-ххх ?
У меня нет FY я не очень в теме.
Проверить имеет ли плюшка место быть очень легко.
Берем самоль с фишкой, калибруем в горизонт. Проверяем, что при покачивании влево - вправо элероны отрабатывают крены в противоположную сторону. Если все ОК, то ставим самоль в горизонт. Затем МЕДЛЕННО начинаем поднимать нос самоля вверх и внимательно следим за элеронами. Если при достижении угла близкого к 80 градусам начинаем видеть, что помимо руля высоты начинают двигаться элероны или рудер (хвост), значит проблема имеет место присутствовать. Далее двигаем самоль в 90 градусов. Начинаем раскачивать самолет в окрестности 90 градусов носом вверх, заставляя переходить его туда-сюда через pitch = 90 градусов раскачка должна быть очень медленной, это важно. Во время этой процедуры наблюдаем рули самолета, если начнется дурацкое активное руление, значит мои поздравления всем владельцем FY-ххх девайсов. Если самолет продолжает рулить ТОЛЬКО рулем высоты, значит есть надежда, что авторы по крайней мере поставили припарку. Тогда надо провести еще одну проверку на вшивость.
Ставим самоль на бок под 90 градусов, чем точнее, те лучше. А теперь пробуем вращать его медленно вокруг pitch оси. Внимательно наблюдаем, что самолет делает рулями. Если начнет чем-то рулить акромя элеронов, значит авторы поставили патч на pitch, но забыли патч на roll.
А реально это на 100% достоверно можно проверить, только имея графический уровень горизонта с фишки в момент теста.
А реально это на 100% достоверно можно проверить, только имея графический уровень горизонта с фишки в момент теста.
Фишка ведет себя точно так-же как Ваша платка - начинает кувыркаться. 😃
Не похоже ли это на причину неадекватного поведения FY-ххх ?
Но это не то, что ее ставится в вину в первую очередь. Проблемма неопределенности roll при pitch близком к 90 градусов есть у ВСЕХ систем стабилазации, как у пирометрических, так и инерциальных. Обычно она решается чисто программными затычками, типа if/else…
Но это не то, что ее ставится в вину в первую очередь. Проблемма неопределенности roll при pitch близком к 90 градусов есть у ВСЕХ систем стабилазации, как у пирометрических, так и инерциальных. Обычно она решается чисто программными затычками, типа if/else…
Дойду на работу и проделаю тест с CoterControl уже самому интересно
Это хорошо что Вы, Александр, быстро нашлись 😃 только начал писать на вас ссылку 😃
Проблемма неопределенности roll при pitch близком к 90 градусов есть у ВСЕХ систем стабилазации, как у пирометрических, так и инерциальных.
А вариант поставить второй гироскоп/пиродатчик повернутый градусов на 45 относительно первого не рассматривается по чисто экономическим соображениям?
А вариант поставить второй гироскоп/пиродатчик повернутый градусов на 45 относительно первого не рассматривается по чисто экономическим соображениям?
Проблемма совсем не в датчиках. Показания датчков непрерывны. Разрыв начинается в арктангенсе, когда при неопределенности надо вычислять реальный roll. ИМХО, проще вообще не пытаться вычислять его в такой ситуации, как например делает АП от Smalltim.
Фишка ведет себя точно так-же как Ваша платка - начинает кувыркаться.
Вот спасибо за видео. 100% точняк 1 в 1 поведение, которое я наблюдаю на своей платформе, а результат именно тот, который я и предполагал. Она пыталась рулить… и бум! Александр, вы просто спасли мой сон. Я реально 2 ночи не спал, ворочался, думал у меня проблемы в алгоритме. Теперь я вижу, что у меня все правильно.
Проблемма неопределенности roll при pitch близком к 90 градусов есть у ВСЕХ систем стабилазации, как у пирометрических, так и инерциальных.
Не, не так. Это не проблема инерциальных систем. Дринкер уже поставил точный диагноз. Это банально:
Вот это говорит о том, что проблемы нет никакой.
вот я запостил видео выше, где у парней этой проблемы нет. И я вижу их исходники. Они не работают углами эйлера. Но OpenGL обучен прямой работе с кватернионами при развороте камеры обзора. Осталось разузнать как оно это делает. Блин сколько всего нового приходится узнавать по ходу дела… Ладно, надо в этом вопросе сделать паузу. Понятно, что решение есть, просто оно не на поверхности. Надо дать мозгу отдохнуть. Вот был бы, кто в 3D анимаци понимает, наверно бы объяснил, как они объекты на 360 градусов во все стороны крутят. Нашел старый фотик с убитой ПЗС, который PAL отдает в телек. Спаял разъемы, буду сейчас OSD осиливать. К извлечению roll - pitch - yaw углов из кватерниона вернусь позже, когда мозг от этого отдохнет. И еще хочу компас уже подключить к расчету положения тела. Надо только наладить его калибровку. Тут мозга много не надо. Вот и займусь пока.
Дойду на работу и проделаю тест с CoterControl уже самому интересно
Крчу в данный момент на столе. 😃 При чистой постановке на хвост, ведет себя более грамотно, чем Фишка в том полете, но если чуть покачать - тоже начинается вращение.
Но в CopterControl - алгоритм DCM (в OpenPilot - EKF), а что прошито в Фишке - неизвестно.
если чуть покачать - тоже начинается вращение.
Вот! Понятно, что сделали припарку if/else если внезапно на хвост встали, чтобы в штопор на падать с разу. По идее дальше тупо ждать, когда тело уйдет из зоны неопределенности. А если долго не уходит, то…
Короче, косвенно подтверждается, что я прав. Общие грабли обозначены, осталось понять пути решения и не закрывать на это глаза.
Дринкер уже поставил точный диагноз. Это банально:
А нафига в фпв летать с такими углами?
Да и что вы стабилизировать собрались? Полёт свечкой вверх?
А нафига в фпв летать с такими углами?
Уж если делать, то делать хорошо, либо не делать совсем.
второй гироскоп/пиродатчик повернутый градусов на 45 относительно первого
Для инерциалки это не имеет никакого смысла. проще иметь 8 референсных body frame’ов и переключаться между ними на ходу при переходе арктангенсов из одной четверти в другую во время расчета углов эйлера. А кватерниону положения вообще наплевать, он про арктангенс даже не догадывается. Он везде гладко без сингулярностей вращается. Кстати, похоже в 3D анимации так и делают.
Уж если делать, то делать хорошо, либо не делать совсем.
Сейчас я у себя проверю, хорошо-ли я сделал.
Разрыв начинается в арктангенсе, когда при неопределенности надо вычислять реальный roll.
Тогда также радикально как и со вторым гироскопом:
Считать параллельно второй roll, но сдвинутый градусов на 45. Когда первый приближается к 80 градусам, данные берутся со второго (сдвинутого)+45 градусов на который он сдвинут. Вышли из опасной зоны - переключаемся обратно на образцовый roll.
Только наверно сожранные ресурсы не будут стоить полученного результата…
А нафига в фпв летать с такими углами?
Сказали в FY и сделали, как есть… 😃
Уж если делать, то делать хорошо, либо не делать совсем.
Спасибо, Вам, Алекс, за вашу работу! С таким подходом просто не может получится плохо.
Считать параллельно второй roll
Или даже даже тому единственному roll сдвигать ноль. На выходе же не будет разницы, оно сразу насчитало 90 градусов, или сначала 45, а потом к ним отдельно ещё 45 прибавили.
Так и на обычных, железных, гироскопах (если память не отшибло) рамки двигают чтоб не сложились, а реальный угол определяется с учётом поправки.
ИМХО, проще вообще не пытаться вычислять его в такой ситуации, как например делает АП от Smalltim.
Я вычисляю, но у меня Roll не крутится 😉
Я вычисляю, но у меня Roll не крутится
И у меня не крутицца, а честно ложится “на спину”
через 20 минут обещают можно смотреть.
вычисляю, но у меня Roll не крутится
Насколько я помню, ты ввел дополнительную логику защищающую алгоритм горизонта от неопределенностей.
Или теперь все “гораздо проще”? 😃
И у меня не крутицца, а честно ложится “на спину”
На видео вижу график pitch, про roll ничего не вижу. Можешь одновременно показания pitch + roll + yaw совместить разными цветными линиями?
Я вычисляю, но у меня Roll не крутится
Дельтами по углам работаешь, при этом постоянно изменяя референсное положение? У тебя положение тела кватернионом описывается?
На видео вижу график pitch
Это ролл. Специально только его выводил, чтобы мешанины не было. В примере ролл прыгает от 0 до 180 град при переходе питча через 90 град.
Можешь одновременно показания pitch + roll + yaw совместить разными цветными линиями?
Щя сделаю.
Яв гад, мешает на графике - затирает линии ролла и питча. Оставил тока их. Ролл красный, питч синий. Все отлично видно.