Нет, я имел в виду Си-шные исходники. Открытые и скачиваемые через Git: http://wiki.openpilot.org/display/Do...ing+on+Windows
Тогда - удачи!
![]() |
Специальные цены | новые товары | ![]() |
![]() |
![]() |
Тема раздела Полеты по камере, телеметрия в категории Cамолёты - Общий; Сообщение от AlexSneg вот от сюда что ли? link Нет, я имел в виду Си-шные исходники. Открытые и скачиваемые через ...
Нет, я имел в виду Си-шные исходники. Открытые и скачиваемые через Git: http://wiki.openpilot.org/display/Do...ing+on+Windows
Тогда - удачи!
Ой! Как там все мутно
Реализация на кватернионах с непонятной функцией предсказания. Я пока кватернионы не реализовал, сейчас чисто на углах Эйлера работает, и работает отменно. Может потом этим займусь, сейчас визуализацию сравнения EKF и DCM делаю.
Покажу. Как раз пишу софтину, чтобы два уровня горизонта на экране монитора сравнить. Если сегодня закончу, дома засниму видео ролик, покажу.
вот первое видео моего EKF
работает только гира и только аксель. Время одного цикла EKF занимает примерно 50мкс
Вот для сравнения алгоритм DCM
Последний раз редактировалось AlexSneg; 28.02.2012 в 20:30.
Любопытно. Не ожидал такой разницы от ЕКF, без комплексирования с GPS/компас.
Есть еще алгоритм Мардж: http://www.varesano.net/blog/fabio/i...-and-hmc5843-a
Предлагаю определиться с терминологией. "алгоритм DCM" - что под этим подразумевается? DCM в общем виде, как и кватернионы - описание поворота. Разницы по принципу применения- нет, и тот и другой метод описывает поворот, только вычислительные затраты немного отличаются, и точность при одинаковой разрядности, но в нашем случае точности метода не принципиальна- неидеальность датчиков сильно "перевешивает".
Следует , вероятно говорить о методе коррекции гироскопов.
В случае " EKF" также, вероятно, имеет место какое- либо описание поворота на основе интегрирования угловых скоростей, и какой-то метод коррекции, адаптивный в зависимости от величины угловых скоростей и ускорений и предыдущего состояния системы.
"Алгоритм DCM" также имеет метод описания поворота ( очевидно, DCM) и метод коррекции. Обычно в качестве корректирующего метода применяют ПИ регулятор.
Опишите, что именно вы используете в разных случаях (если представляете, как работают примененные вами алгоритмы). Тогда можно что- либо посоветовать, да и остальным участникам будет , надеюсь, понятнее.
По поведению платформы в случае "алгоритма DCM" общем виде видно, что при околонулевых угловых скоростях имеет место колебательный затухающий процесс. То есть система коррекции имеет колебательный характер (причем декремент затухания слишком мал), а желательно иметь апериодический. Также кажется, что при движении вправо- влево платы происходит "зашкаливание" акселерометров.
Не, там не так все просто. Там есть матрица предсказывающего физического поведения модели на следующем шаге исходя из предыдущей историии, есть матрица предсказания ошибки, которая так же в процессе накопления статистики обучается. Процесс обучения четко заметен в самом конце, когда после нереальных расколбасов по всем осям, я резко ставлю плату в горизонт.
Оно встает с ошибкой градусов на 15, потом медленно ползет к нулю. Это происходит потому, что у алгоритм тупеет в этот момент так как обученная матрица ошибок вываливается за границы предсказаний физической модели, а гироскоп показывает нули по всем осям. Алгоритм ошалело пытается понять что происходит, а информации ноль. Соответственно необходимо время для переобучения, что и видно. А если в этот момент слегка покачать платформу (даже едва заметно), оно тут же приходит в себя, потому что поперла различная инфа с гироскопа.
Вот здесь, все так. Есть просто матрица вращения и алгоритм принятия решения корректироваться по акселю или нет. А если да, то насколько верить.
DCM у меня тупо из мегапирата содран. И вообщем-то, если использовать без фанатизма для спокойного полета блинчиком, вполне себе работает. Видео это подтверждает.
да, я специально отключил. Какой в ней смысл, если компас отключен. Есть там небольшой дрейф, вполне ожидаемый. Как научусь компас калибровать, так включу.
сейчас да, скоро добавлю компас, будет 9 параметов. Хотя, даже сейчас уже практически все шоколадно и с этим уже можно дальше двигаться.
Последний раз редактировалось AlexSneg; 28.02.2012 в 23:11.
Насчет времени итерации я имел ввиду, что судя по посту в тему мегапирата на дцм уходит 19 мкс, а на калмана всего в 2.2 раза больше. Нормальный фильтр калмана гораздо больших вычислительных ресурсов требует чем дцм и точно не в 2 раза.
Для начала можно так: (max-min)/2 - это ноль, так по каждой оси.
И оси выровнять друг с другом - подбираем k_x, так, чтобы d_x=k_x*(max_x-min_x) равны для всех осей (т.е. d_x=d_y=d_z).
Он тут пока очень маленький, 2 оси. С маг-ом время увеличится вдвое (примерно квадрат от кол-ва переменных).
Что не в два раза - это точно... Хотя, например можно пересчитывать ковариционную матрицу ( " обучать"как важно сказал Алекс,) с частой отсчетов по акселерометрам? быстрее-то информация не приходит, угловые ускорения у нас не так велики.
Также , по времени надо помнить что М4 имеет аппаратный арифметический блок для операций с плавающей точкой, и сильно шустрее в этом применении.
Также, есть еще один способ комплексироания данных - комплементарный фильтр (CF) (описан у Махони, кстати)..
На Ютубе есть замечательное видео под бодрую музыку сравнения калмана, расширенного калмана, и CF.
TO: Flash_rahЕсли хотите, чтобы я отвечал на личные сообщения, то разрешите их у себя в профиле. Мне ваши личные настройки не позволяют отвечать вам.
Ну и что? Кальман у меня оптимизирован, а DCM у Олега на темплейтах. Там очень много передачи параметров не по ссылкам а копированием происходит. Не факт, что это не занимает львиную долю времени в тех 18мкс.
Ноль действительно очень далеко от того, где он должен быть. Поэтому чтобы пока не замарачиваться, я просто не использую. Найти середину - это вариант, но я думал выполнить те дейсвия, который а апноутах написаны, хотя может это и лишнее. Наверно сделаю по быстрому так, как ты предлагаешь. Для тестов сойдет, а там посмотрим.
Ну не факт. Думаю его только как корректирующий фактор ввести в дополнение к гире. Тогда только на 1/3 должно увеличится. И я планирую магнитометр на 30Гц пускать. Уж больно эта штука внешним воздействиям подвержена, не было бы хуже.
вот тут все правда. Я пробовал компилять без FPU инструкций. Скорость упала больше чем в 10 раз. Нет, уж нафиг...
Ну, если кто реализацию выложит готовую, я готов добавить и сравнить и доложить о результатах. Но сейчас мне бы хотелось дальше двигаться.
Еще вот думаю частоту акселя поднять до 400Hz и посмотреть что получится.
Ну оно сейчас так и получается. Или, если быть более точным, то дрейф акселя фильтруется FIR фильтром, который подстраивается акселем, но аксель работает на частоте 50Hz, соответственно имеем побочную адаптивную FIR фильтрацию дополнительно, неявно наложенную на гиру. Причем за счет отрицательной обратной связи они на самом деле друг на друга влияют
Сейчас реально считаются 3 оси по полной программе, я только на визуалке вырубил.
Тут да, согласен. Оба варианта вполне себе рабочие. Конечно калман более четкий и существенно меньше подвержен вибрациям и паразитным ускорениям. Но, опять же наша цель 3D пилотаж или полет в плоскости горизонта с минимальными кренами?
Сейчас с кальманом осталось по сути 2 технические проблемы решить.
1. Как задавать начальное референсное значение платформы. Засада в том, что при подаче питания оно не знает где у него верх, где право, лево, вперед, назад. Поэтому, куда гиру при старте повело, туда оно ведет положительный отсчет углов. Даже вот не знаю, наверно принудительно не нули при старте в углы писать, а небольшие смещения в доли градусов, тогда оно сообразит плюс или минус изначально. Ну а для самолета как? Вот подали мы питание, как там пользователь платы разместил? Да хрен его знает. Значит надо как то дать пользователю на старте объяснить где "перед", а где "назад" ну и лево право за одно. То есть вариант plug-and-fly как-то не очень просматривается.
2. Отловить сингулярность, которая возникает скорее всего при переходе от матрицы к углам эйлера. Деление на ноль, или тангенс какой в 90 градусов упирается. Либо я чего-то не учел, либо оно так и должно быть. Но надо куда-то IFов на эту тему воткнуть.
Последний раз редактировалось AlexSneg; 29.02.2012 в 10:22.
Алекс, можно узнать полный формат пакета RFM-ки ( сколько байт преамбула итп.)?
Какую девиацию используете и из каких соображений?
В существующих проектах предпологается неизменяемая установка платы, с возможностью ручного задания углов установки. Точное тримирование акселей делается по команде пользователя: модель должна стоять ровно. Гиры при инициализации (явной или неявной - при подаче питания) калибруют свои нули. Процедура инициализации, как и тримирования, обычно занимает секунд 15-30.
А если у меня плата встает только боком, или только с наклоном градусов 30? Все пропало?
Не ну я понимаю, текущие решения не умеют референс ресетить на старте. Но я то хочу, чтобы было максимально гибкое решение.
Сейчас в голову приходит такой вариант начальной установки:
1. Держим кнопку, подаем питание. Плата спустя пару секунд переходит в режим каллибровки. моргает светодиодами.
2. Ставит руль высоты на максимум вниз, типа просит самолет носом наклонить к земле и держать. дает на установку наклона 5 сек, затем собирает статистику
3. Ставит руль высоты вверх, просит поставить самоль носом вверх
4. Элероны влево, наклоняем самоль влево
5. Элероны вправо, наклоняем вправо.
6. Машет всеми рулями, просит зависнуть точно в горизонте, это будет начальным референсным положением с нулевыми рулями.
7. Еще раз машет всеми рулями, просит наклонить самолет так, чтобы придать правильное триммерное положение рулям. в этот момент рули отслеживают наклоны и повторяют углы. Пользователь смотрит, где достаточно. Затем нажимает кнопку. Плата запоминает положение наклонных триммеров.
8. Выход из режима каллибровки.
В те моменты когда самоль будет наклонятся, можно автоматом калибровать компас и аксель.
Ничего не пропало.
Вот например у мну, можно девайс хоть как поставить. Просто нужно использовать в качестве референсных значений для определения горизонта показания акселя и магнетометра именно в таком положении. Фишку 30-ю аналогично ставить можно как угодно, но обязательно обучив ее при этом горизонту.
А гиры калибруются вне зависимости от положения девайса, главное чтоб он в покое оставался на протяжении всей калибровки.
Рассказываю. Задаем т.н. референсный фрейм. В нормальном положении по акселю x=0g y=0g z=1g. Хотите перевернуть девайс z=-1g.
И крутитесь вокруг этого фрейма.
С магнето тоже самое.
Под неизменяемой установкой, имеется в виду не засовывать каждый раз как угодно.
Но сама установка - может быть любой. Просто программно вводятся коэффициенты поворота в нормаль по каждой из осей.
Плюс тонкая тримирование.. Плюс автокалибровка. Ничего изобретатьь не надо .Просто посмотрите, как это у других сделано.![]()
Т.к расположение акселерометров относительно гироскопов неизменно, можно не наклонять, а попросить один раз повернуть на 1 оборот блинчиком и один раз - сделать "петлю" ( носом от горизонта вверх), потом поставить в покое в горизонте. Этих данных должно быть достаточно для калибровки направлений осей и горизонта.
Хотя, кажется, достаточно попросить сделать один известный по направлению оборот вокруг любой из осей и оставить в горизонте.
хорошо, мы такие. А вы, практики, никак объяснить не можете.
z=1
y=-0.789E-4
x=+0.45215
Как из этого понять где у самолета левый борт, а где правый?
Я вот о чем талдычу? Сама плата конечно знает, где у нее право, а где лево. Но, плата не знает, совпадает ли направление ее осей, с осями самолета (reference body frame). Если мы договариваемся, что плата может быть внутри самоля ориентирована по любому, то нужно учить плату ориентации внутри самолета и только после этого учить самолет горизонту.
неа, не будет этого достаточно.
Я вот сейчас подумал. должно быть так:
1. поставить в горизонт, зсечь вектор тяжести.
2. Наклонить влево, пауза
3. Наклонить вперед, пауза
4. Поставить в горизонт
Вот теперь все. Тогда направление pitch и roll будет известно, а yaw уже векторным прозведением можно расчитать да и GPS будет, если что откорректирует на ходу
Этого в покое быть НЕ МОЖЕТ!
Суммарный вектор = 1, а тут уже только по z единица!
Такое может быть если z вертикально вниз смотрит, а по оси x дёрнули плату.
Ну или сдвинули по всем осям
Да, и еще такое может выть если оси у вас не перпендикулярны. Но это уже совсем сложный случай.![]()
Передумал..
да я чо-то как-то в основную работу погрузился. Платку пока отложил. До субботы буду занят на основной работе. Прежде чем с компасом ковыряться хочу еще сингулярность на pitch угле запатчить. Надо как-то вырубить искусственно установку этого угла точно в 90 градусов. Я все не решу на каком этапе алгоритма это получше сделать.
Я кстати реализовал кватернионы, только чо-то пака не уверен, что ошибок нет. Они субъективно хуже горизонт на перегрузках держат. Может ошибся где, надо еще покопаться получше в этой теме.
А какой толк на сырые данные смотреть? Тебе компас интересен или все в куче? Могу дать лог, только какой с него толк?
Ну я ж условно, для примера. Ясен пень, что не может.
Алекс, это какой-то фейк. Кватернионы не могут держать или не держать горизонт, что это за выдумка такая? Они просто описывают поворот.