flybrain. передатчик + приемник + автопилот. powered by stm32
Дойду на работу и проделаю тест с 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 совместить разными цветными линиями?
Щя сделаю.
Яв гад, мешает на графике - затирает линии ролла и питча. Оставил тока их. Ролл красный, питч синий. Все отлично видно.
Ролл красный, питч синий
Ну, ролл то почему у тебя поплыл? Он не должен плыть. Ты же ось ролл не вращаешь. С какого бодуна он вдруг на 180 развернулся?
Еще раз. Если ты берешь плату, ставишь ее горизонтально и начинаешь вращать pitch, то изменяться по кругу должен только один угол - pitch.
У тебя же мы наблюдаем как раз обсуждаемый эффект. Поначалу roll = 0, а pitch растет. Начиная с какого-то момента pitch ~80 градусов, roll резко начинает расти. И растет до тех пор, пока pitch не выйдет с другой стороны. Сделай масштаб мельче по временной оси для первого подъема графиков, ты увидишь сразу.
С какого бодуна он вдруг на 180 развернулся?
Да потому что тело НА СПИНУ ложится и после 90 градусов питча летит в противоположную сторону.
Самолет переворачивается, понимаешь? Хотя вращения вдоль оси Х нет. Но нас интересует ролл и питч относительно ЗЕМЛИ.
pitch ~80 градусов, roll резко начинает расти.
Ничего подобного.
Я понял, мы о разных вещах говорим. Ты очевидно говоришь об углах поворота платы как таковых. А я говорю о положении платы относительно земли. В твоей нотации, да ролл не должен прыгать. Но это несколько другая задача.
Вот в фишке 30-й например, есть режим удержания горизонта - положение платы по отношению к земле. И есть режим удержания углов по трем осям - это отслеживаются повороты платы по её собственным осям.
Но если опираться только на собственное вращение платы, то через некоторое время мы окажемся несколько в ином положении относительно земли, чем думает алгоритм. Погрешности, дрейфы никто не отменял.
Всё, я тебя понял.
Ничего подобного
Смотри внимательно на свои графики. Есть точка пересечения pitch = roll = 90
И это не абстрактные углы, а вполне конкретные, вычисленные твоим алгоритмом в момент времени t
Но нас интересует ролл и питч относительно ЗЕМЛИ.
В этой точке имеем самолет развернутый на 90 градусов по roll относительно земли по твоим графикам.
И на самом деле по барабану, кто как хочет это назвать. Главное факт в цифрах и графиках. Попробуй визуализировать свой график и ты увидишь в точке pitch=90 не просто линию, как ты видишь на графике, а увидишь винтообразное вращение тела. Особенно если еще yaw подключишь.
то через некоторое время мы окажемся несколько в ином положении относительно земли, чем думает алгоритм
Нет, не окажемся, так как есть начальное референсное положение и есть коррекции по акселю и компасу, а это абсолютные измерения. Да с дрейфом вокруг нуля, но абсолютные.
Смотри внимательно на свои графики. Есть точка пересечения pitch = roll = 90
Да не, такие графики из-за того, что цыфры в ком порт идут с большим интервалом, по-этому четкие вертикали не получаются. Это проверено однозначно. Я в коде вставку делал, которая запоминает ролл и питч в районе 90 град. с частотой работы фильтра, затем выводил эти циферки. Все чотко - ролл встает или на примерно 180 или на -180 в момент перехода питча через 90 град.
Почему примерно 180 или -180? Потому что невозможно ручками перемещать ось Х строго в вертикальной плоскости, а ролл при задранном питче больше зависит от наклона платки уже по оси Z.
Короче надо делать стенд лабораторный и по уровням - отвесам выставлять.
А оно надо?
Кстати и яв перекладывается на противоположное направление. Всё правильно.
Да не, такие графики из-за того, что цыфры в ком порт идут с большим интервалом, по-этому четкие вертикали не получаются. Это проверено однозначно.
Ну не может такого быть чисто математически. Не может функция арктангенса внезапно перепрыгнуть 0 -> 180. К тому же я вижу четкие закругления roll, когда оно от нуля вверх ползти начинает, значит есть промежуточные положения, иначе была бы прямая линия без закругления. А в середине, когда ты pitch раскачиваешь, вообще четко дуги видно и в ноль не перекидывается. Покажи формулы для расчета roll-pitch-yaw из кватерниона. Или у тебя не кватернион состояния?
Или у тебя не кватернион состояния?
ЕКФ, кватернион.
К тому же я вижу четкие закругления roll,
Я же говорил, трудно мне держа пальцами чотко двигать платку. В том опыте паразитные вращения присутствуют.
Покажи формулы для расчета roll-pitch-yaw из кватерниона.
Стандартные формулы:
Roll = atan2(2*(q0*q1+q2*q3), q3*q3-q2*q2-q1*q1+q0*q0); //рад
Pitch = -asin(2*(q1*q3-q0*q2));
Yaw = atan2(2*(q0*q3+q1*q2), q1*q1+q0*q0-q3*q3-q2*q2);
Да, и линии, проходящие через пики питча как раз прямые.
Держи цифири:
первая - питч, вторая - ролл, третья яв
Дрожжание около 88-89 градусов питча - дрожжание рук.
0.83,71.17,18.78,-0.58 0.88,71.45,18.98,-0.58
0.65,71.68,18.77,-0.58
0.91,71.92,18.75,-0.59
0.08,72.11,18.03,-0.59
0.06,72.48,18.03,-0.59
0.04,72.95,18.01,-0.60
0.24,73.16,17.88,-0.60
-0.15,73.48,17.74,-0.60
-0.26,73.60,17.91,-0.59
0.07,73.74,17.68,-0.59
-0.15,73.97,17.78,-0.59
-0.06,74.22,18.19,-0.58
0.32,74.58,18.02,-0.58
0.24,74.85,18.28,-0.58
0.30,74.88,18.09,-0.57
0.43,75.08,18.24,-0.57
0.41,75.39,18.05,-0.57
0.63,75.55,18.50,-0.56
0.54,75.76,18.27,-0.56
0.50,75.92,18.22,-0.56
0.61,76.03,18.37,-0.56
0.79,76.41,18.45,-0.56
0.70,76.71,18.52,-0.56
0.87,76.75,18.40,-0.56
0.51,77.01,18.10,-0.56
0.53,77.25,18.08,-0.56
0.65,77.22,18.45,-0.57
0.56,77.36,18.10,-0.57
0.36,77.56,17.91,-0.57
0.58,77.70,18.40,-0.57
0.80,77.74,18.27,-0.58
0.56,78.10,18.13,-0.58
0.57,78.32,18.11,-0.58
0.56,78.60,18.43,-0.57
1.00,78.70,18.56,-0.57
0.91,78.98,18.39,-0.57
0.56,79.14,18.24,-0.57
0.67,79.34,17.91,-0.57
0.23,79.55,17.89,-0.57
0.42,79.80,18.03,-0.57
0.38,79.86,17.90,-0.57
0.44,79.97,17.77,-0.56
-0.09,80.10,17.07,-0.56
-0.83,80.19,16.53,-0.56
-0.78,80.13,17.31,-0.56
-0.46,80.18,16.88,-0.56
-0.73,80.39,16.84,-0.56
-0.83,80.48,16.73,-0.56
-0.80,80.48,16.82,-0.56
-0.62,80.60,16.83,-0.56
-0.90,80.79,16.74,-0.56
-0.53,80.84,17.14,-0.56
-0.22,80.90,17.26,-0.56
-0.41,80.99,17.14,-0.56
-0.48,81.23,16.53,-0.56
-0.99,81.36,17.16,-0.56
0.20,81.52,17.64,-0.56
0.22,81.69,17.70,-0.56
0.09,81.84,17.47,-0.56
-0.14,81.89,17.30,-0.56
-0.08,81.87,17.40,-0.56
0.14,82.08,17.74,-0.57
0.23,82.17,17.38,-0.57
-0.21,82.22,17.31,-0.57
-0.10,82.23,17.31,-0.57
-0.06,82.35,17.39,-0.57
-0.02,82.43,17.29,-0.58
-0.16,82.62,17.38,-0.58
0.25,82.65,17.52,-0.58
-0.26,82.74,17.03,-0.58
0.12,82.97,17.65,-0.59
0.01,83.28,17.10,-0.59
0.37,83.39,18.10,-0.59
1.16,83.40,18.18,-0.59
0.39,83.56,17.70,-0.58
0.08,83.64,17.02,-0.58
-0.38,83.61,17.15,-0.58
-0.29,83.59,16.83,-0.58
-0.77,83.79,16.33,-0.58
-1.02,83.86,16.28,-0.58
-1.24,83.85,16.04,-0.58
-1.02,83.86,16.33,-0.58
-1.62,84.01,15.66,-0.58
-1.29,84.04,15.73,-0.59
-1.99,84.05,15.40,-0.59
-1.92,84.06,15.30,-0.59
-1.69,84.14,15.96,-0.59
-0.89,84.19,16.86,-0.61
-0.09,84.21,16.82,-0.61
-0.77,84.24,16.87,-0.61
0.55,84.35,17.49,-0.61
-0.57,84.29,15.98,-0.62
-1.61,84.28,15.62,-0.62
-1.17,84.34,16.31,-0.62
-1.20,84.48,15.72,-0.62
-1.85,84.47,15.47,-0.63
-2.18,84.40,14.54,-0.63
-3.39,84.35,14.13,-0.63
-2.40,84.47,14.93,-0.63
-2.89,84.55,14.21,-0.66
-3.22,84.55,14.01,-0.66
-3.32,84.82,13.63,-0.66
-3.08,85.12,15.47,-0.66
0.04,85.47,17.44,-0.66
0.13,85.56,17.17,-0.66
-0.07,85.76,17.22,-0.66
-0.24,85.87,17.08,-0.66
0.28,85.87,17.19,-0.66
-0.31,85.90,16.67,-0.68
-1.25,86.02,15.56,-0.68
-1.23,86.03,16.87,-0.68
0.61,86.06,17.40,-0.68
-0.75,86.11,16.24,-0.68
0.39,86.15,18.80,-0.68
1.69,86.28,18.43,-0.68
1.00,86.34,18.56,-0.68
2.08,86.51,19.42,-0.71
3.34,86.82,21.45,-0.71
4.48,87.15,21.89,-0.71
5.98,87.32,24.25,-0.71
8.99,87.37,26.93,-0.71
9.73,87.51,26.79,-0.71
9.12,87.46,26.31,-0.71
10.02,87.52,27.53,-0.71
10.86,87.57,28.56,-0.71
11.34,87.64,27.98,-0.73
10.52,87.66,27.33,-0.73
9.36,87.67,25.79,-0.73
8.38,87.67,25.90,-0.73
9.24,87.84,25.88,-0.75
6.32,88.01,22.37,-0.75
4.79,88.06,21.26,-0.75
2.12,88.07,18.17,-0.75
-0.45,88.16,14.04,-0.75
-5.60,88.20,11.74,-0.75
-2.58,88.20,15.57,-0.75
-0.73,88.18,16.69,-0.75
-0.13,88.21,16.11,-0.75
-1.58,88.33,16.08,-0.75
1.43,88.51,18.98,-0.75
2.90,88.56,21.39,-0.75
5.14,88.60,20.26,-0.75
1.42,88.52,18.62,-0.75
1.56,88.60,18.21,-0.75
-0.61,88.70,14.65,-0.75
-2.87,88.84,14.06,-0.75
-6.45,88.91,8.01,-0.75
-8.87,88.91,11.46,-0.76
-8.36,88.91,6.14,-0.76
-12.50,88.95,3.00,-0.76
-15.75,89.11,-0.23,-0.76
-18.38,89.14,-0.23,-0.77
-17.10,89.17,-2.18,-0.77
-25.29,89.30,-14.01,-0.77
-35.72,89.51,-14.56,-0.77
-30.35,89.58,-16.71,-0.78
-35.37,89.68,-16.60,-0.78
-50.48,89.93,-128.19,-0.78
-158.21,89.64,-146.95,-0.78
Кстати, четвертая цыфра - высота по bmp085
У тебя в этом логе только приближение к pitch 90
вот у тебя конец лога. Ты почти приблизился и пошел эфект плавного переворота.
-0.61,88.70,14.65,-0.75 -2.87,88.84,14.06,-0.75 -6.45,88.91,8.01,-0.75 -8.87,88.91,11.46,-0.76 -8.36,88.91,6.14,-0.76 -12.50,88.95,3.00,-0.76 -15.75,89.11,-0.23,-0.76 -18.38,89.14,-0.23,-0.77 -17.10,89.17,-2.18,-0.77 -25.29,89.30,-14.01,-0.77 -35.72,89.51,-14.56,-0.77 -30.35,89.58,-16.71,-0.78 -35.37,89.68,-16.60,-0.78 -50.48,89.93,-128.19,-0.78 -158.21,89.64,-146.95,-0.78
Давай так. Сделай файл подлиннее, только двигайся по pitch медленно и несколько раз, стараясь держать плату горизонтально пройдешь питч несколько раз от 45 <-> -45 с переходом через 90. Давай мне свой текстовый файл, я его тебе визуализирую на экране и дам видео посмотреть. вот тогда ты сам убедишься. А можешь еще чего накрутить, чтобы мы красивую картинку посмотрели. Потряси там платку всяко разно.
Формулами ты пользуешься теми же, что и я 😃 Значит эффект есть, не может не быть. Давай длинный лог мне в личку зашли или тут ссылку дай на закачку.
эфект плавного переворота.
-0.61,88.70,14.65,-0.75
-2.87,88.84,14.06,-0.75
-6.45,88.91,8.01,-0.75
-8.87,88.91,11.46,-0.76
-8.36,88.91,6.14,-0.76
-12.50,88.95,3.00,-0.76
-15.75,89.11,-0.23,-0.76
-18.38,89.14,-0.23,-0.77
-17.10,89.17,-2.18,-0.77
-25.29,89.30,-14.01,-0.77
-35.72,89.51,-14.56,-0.77
-30.35,89.58,-16.71,-0.78
-35.37,89.68,-16.60,-0.78
-50.48,89.93,-128.19,-0.78
-158.21,89.64,-146.95,-0.78
Ага, щяс. Афигенно плавно, учитывая частоту 250герц. Целых 0.056 секунды длился процесс.
Ты что, хотел чтобы мгновенно?
Формулами ты пользуешься теми же
Вообще-то других и быть не может.
Ставим самоль на бок под 90 градусов, чем точнее, те лучше. А теперь пробуем вращать его медленно вокруг pitch оси.
А этот опыт зачем? Если так делать, то только яв будет меняться.