Создание собственной системы стабилизации

oleg70
ИльяПРо:

Все то же, получение наиболее точных данных координат коптера из искаженных

А именно: из GPS и акселерометра, так ?? , ДУС и магнитометр тут не подходят, а больше то и нет никаких, я правильно понимаю ? или “магия” настолько сильна, что можно всё что угодно “припаять”…

ИльяПРо
SergDoc:

вот где самое неудобное место: деление на матрицу (умножение на обратную) - это жестко… и каждый находит эту обратную матрицу как попало…

Так давно уже есть численные методы нахождения обратной матрицы, то же разложение Холецкого или еще лучше QR разложение + транспонирование. Не вижу в этом проблему.

oleg70:

А именно: из GPS и акселерометра, так ?? , ДУС и магнитометр тут не подходят, а больше то и нет никаких, я правильно понимаю ? или “магия” настолько сильна, что можно всё что угодно “припаять”…

Не правильно, можно все что угодно подпаять если правильно их связать.

SergDoc
oleg70:

а больше то и нет никаких, я правильно понимаю ? или “магия” настолько сильна, что можно всё что угодно “припаять”…

а вот магия к припаять тут никакого отношения не имеет - вектор какой угодно размерности задать можно…

oleg70
ИльяПРо:

если правильно их связать.

Пытаюсь уловить самое ценное - физический смысл…
пока вот не понял (извиняюсь), как например, “правильно связать” угловые скорости и линейное положение “тела” в пространстве ?

SergDoc:

вектор какой угодно размерности задать можно…

компоненты вектора должны как то осмысленно с ним быть связаны ? или например в “вектор положения” можно включать всё что угодно ? и будет толк ?

SergDoc
ИльяПРо:

Позицию мы измеряем датчиком - это наблюдаемая переменная, а скорость - ненаблюдаемая, фильтр оценивает ее основываясь на матрицу ковариации.

Тут бы я мог поспорить что мы наблюдаем, а что нет, но не буду… применительно к нашим баранам: нет у нас, допустим, ни GPS пи оптических датчиков - есть гироаксель - наблюдаемые величины - угловая скорость, угол (хоть мы его и берём с акселя но с натяжкой можно сказать, что наблюдаем) ускорение, ненаблюдаемые - скорость, путь.Так вот фильтр с лёгкостью справится только с углом, а скорость и путь будут плыть и мы с этим ничего не поделаем и через некоторое время аппарат уплывёт - не будет он знать об этом. И подводя черту - не проще ли комплиментарник сделать с изменяемыми коэффициентами в зависимости от известных нам условий?

oleg70:

компоненты вектора должны как то осмысленно с ним быть связаны ? или например в “вектор положения” можно включать всё что угодно ? и будет толк ?

Как выше сказал Илья - главное правильно связать - EKF применяемый сейчас уже наверно в любом проекте кроме мультивия “отслеживает” 14-16 состояний…

ИльяПРо
oleg70:

пока вот не понял (извиняюсь), как например, “правильно связать” угловые скорости и линейное положение “тела” в пространстве ?

ну вообще то угловые скорости влияют на ориентацию тела в глобальной СК. ориентация в свою очередь влияет на проекции локальных ускорений акселя на оси в глобальной СК. эти ускорения в глобальной СК дважды интегрируются до позиции - вот вам и связь. Мое предположение, что фильтр даже при таких неявных сложных, запутанных связях определяет коэффициенты ковариации ненулевыми, а значит связь есть. И тут есть самое волшебное - но сразу скажу, что это только предположение: При активных маневрах, можно обойтись вообще без магнитометра vis.asta об этом писал, я это только недавно понял. При активных маневрах разница показаний между ЖПС и естиматором будет корректировать курс! то есть если мы будем стоять, то дрейф будет, если жы мы двигаемся, то можно обойтись без магнитометра! Вот именно из-за того что фильтр может находить самые неочевидные, но полезные связи между переменными, его делают одним большим из 17-22 переменных состояния, а не много маленьких! Вот это самое предположение о исключении магнитометра из оценки во время движения и включения его во время зависания я хочу проверить.

oleg70
ИльяПРо:
  • вот вам и связь.

Да, мысль понял, связь конечно есть… только вот интуитивно кажется, что вычислить то ее конечно можно, а вот “снять” с нее “полезный сигнал” - не логично… тут правда магия какая то… эдак можно и влажность воздуха к позиции привязать…
Если заработает - поверю в математику ))).

ИльяПРо
oleg70:

эдак можно и влажность воздуха к позиции привязать…

Можно, если будет коррелляция, например поставить увлажнитель воздуха в угол комнаты, поставить на робота датчик влажности, то теоретически влажность будет коррелировать с позицией

kasmirov:

Самое простое объяснение Калмана
www.bzarg.com/p/how-a-kalman-...s-in-pictures/

Отличный пример, тут как раз показано как определяется скорость из позиции в фазовой плоскости.

jShadow
ИльяПРо:

Что за проект? На какой стадии? Какие цели проекта? Над чем в данный момент работаете?

Проект - допиливание прошивки Cleanflight до более-менее адекватных навигационных возможностей. Стадия - непрерывное тестирование и доработка 😁
rcopen.com/forum/f123/topic443443
www.rcgroups.com/forums/showthread.php?t=2495732
github.com/iNavFlight/inav

ИльяПРо
SergDoc:

нет у нас, допустим, ни GPS пи оптических датчиков - есть гироаксель - наблюдаемые величины - угловая скорость, угол (хоть мы его и берём с акселя но с натяжкой можно сказать, что наблюдаем) ускорение, ненаблюдаемые - скорость, путь.Так вот фильтр с лёгкостью справится только с углом, а скорость и путь будут плыть и мы с этим ничего не поделаем и через некоторое время аппарат уплывёт - не будет он знать об этом. И подводя черту - не проще ли комплиментарник сделать с изменяемыми коэффициентами в зависимости от известных нам условий?

тогда конечно проще комплиментарник. Фильтр Калмана силен тогда, когда есть много датчиков, много параметров, они все неявно связаны. В вашем примере позиция естественно уплывет и никакой супер пупер алгоритм не справится, в любом случае нужна референсная система. Просто методы заложенные в фильтр Калмана для обработки и фильтрации куда более правильные и эффективные, чем ПИ регуляторы в фильтре Махони, градиентные спуски и прочие.

jShadow:

Проект - допиливание прошивки Cleanflight до более-менее адекватных навигационных возможностей. Стадия - непрерывное тестирование и доработка 😁
rcopen.com/forum/f123/topic443443
www.rcgroups.com/forums/showthread.php?t=2495732
github.com/iNavFlight/inav

А что в итоге хотите получить? какие цели проекта?

jShadow
ИльяПРо:

А что в итоге хотите получить? какие цели проекта?

В итоге - прошивку, пригодную как для гоночных мелколетов, так и для более крупных коптеров/самолетов, работающую на широком спектре плат от супер-дешевых CC3D до PixHawk и OpenPilot Revolution.

alexmos
ИльяПРо:

Просто методы заложенные в фильтр Калмана для обработки и фильтрации куда более правильные и эффективные, чем ПИ регуляторы в фильтре Махони, градиентные спуски и прочие.

Если все зависимости известны - скорость, ускорение, угловые скорости, все калибровки датчиков - связываются простыми формулами - то зачем тогда калман и его фишка в поиске неизвестных зависимостей? Ещё один минус я вижу в том, что он подстраивается итеративно, т.е. требуется время, чтобы система настроилась и подорала коэффициенты… А в реальности нужно начать правильную работу сразу после включения питания.

ИльяПРо
alexmos:

Если все зависимости известны - скорость, ускорение, угловые скорости, все калибровки датчиков - связываются простыми формулами - то зачем тогда калман и его фишка в поиске неизвестных зависимостей?

Дело то в том, что зависимости неизвестны. В какие то моменты времени зависимости могут уменьшаться и вообще переменные не будут коррелировать, фильтр калмана это вычислит и перестанет связывать переменные.(Лаги ЖПС, наводки на компас). В какие то моменты времени зависимости могут появляться в неожиданных местах, что будет учитывать калман и результат улучшиться. Просто зависимости выявляются статистически, а не аналитически - в это его сила. Даже самые завуалированные зависимости калман сможет определить.
А если самому попробывать определять все зависимости будет гигантский конечный автомат, который еще надо будет настроить.

alexmos:

Ещё один минус я вижу в том, что он подстраивается итеративно, т.е. требуется время, чтобы система настроилась и подорала коэффициенты… А в реальности нужно начать правильную работу сразу после включения питания.

Мне это тоже не очень понравилось, но выход простой - после подстройки каламна - просто скачать все матрицы коэффициентов, ковариаций в память и после каждого включения считывать их, тогда долгой подстройки не будет.

jShadow:

В итоге - прошивку, пригодную как для гоночных мелколетов, так и для более крупных коптеров/самолетов, работающую на широком спектре плат от супер-дешевых CC3D до PixHawk и OpenPilot Revolution.

А в конечном итоге какова цель? Заработать денег? Или просто хобби? Чем не устраивают опенсорсные прошивки?

jShadow
ИльяПРо:

А в конечном итоге какова цель? Заработать денег? Или просто хобби?

В конечном итоге цель такая же как и у всех участников этой темы - изучение технологии, развитие R/C хобби. Заработать денег - цель побочная.

ИльяПРо:

Чем не устраивают опенсорсные прошивки?

Отвечу вопросом на вопрос - что из имеющегося в природе умеет полет по точкам на контроллере за $10? INAV умеет и INAV открытый.

ИльяПРо

Проект интересный, спасибо. Советую приглядеться к Autoquad - можно просто взять оттуда фильтр Калмана. Разработчиком INAV я к сожалению не могу стать, времени надо больше и цели у меня немножечко другие - научиться матану. Если дорасту до вашего уровня - то может быть свяжусь. В дальнейшем я бы хотел поработать с камерой, и сделать его основным датчиком положения и ориентации, я вижу в этом перспективу коптеростроения.

jShadow
ИльяПРо:

цели у меня немножечко другие - научиться матану

По-моему реализация фильтра Калмана вместо Альфа-Бета-Гамма фильтра вполне тянет на “научиться матану” 😁

ИльяПРо:

В дальнейшем я бы хотел поработать с камерой, и сделать его основным датчиком положения и ориентации, я вижу в этом перспективу коптеростроения.

Я тоже. Велкам, как говорится. В INAV очень нужна поддержка Optical Flow и других методов навигации в локальных координатах.

alexmos
ИльяПРо:

В какие то моменты времени зависимости могут появляться в неожиданных местах, что будет учитывать калман и результат улучшиться. Просто зависимости выявляются статистически, а не аналитически - в это его сила

Понял, спасибо. Крутая штука конечно, но у меня очень большие сомнения, что фильтр сможет найти любую форму зависимости, кроме линейной. Интуиция подсказывает, что не хватит линейной алгебры (операции с матрицами) на выражение любой зависимости. А закон скорости как дифференциал расстояния, который как вы говорите, он нашел - вы сами скорее всего ввели в фильтр как одно из полей вектора состояния.

jShadow
alexmos:

Крутая штука конечно, но у меня очень большие сомнения, что фильтр сможет найти любую форму зависимости, кроме линейной. Интуиция подсказывает, что не хватит линейной алгебры (операции с матрицами) на выражение любой зависимости.

Я тоже так считаю. Кальман на самом деле штука линейная, если в векторе состояния нет нелинейных составляющих, Кальман их не найдет.

ИльяПРо
ИльяПРо:

Первая считает ковариацию( меру похожести или линейной зависимости между двумя величинами) между переменными вектора состояния

Я так и написал. Поэтому вот и интересно как он будет реагировать, если зависимости нелинейные. У меня есть некоторые подозрения, что он справится даже с нелинейными зависимостями, потому что, ковариацию UKF вычисляет исходя не из самих переменных, а прогоняя через нелинейные уравнения сигма точки и только после этого вычисляет ковариацию, то есть сводит нелинейность к линейности (EKF вообще тупо каждый раз линеаризует). Но это только мое предположение и его надо проверить, но есть основания полагать, что оно правильно.

alexmos:

А закон скорости как дифференциал расстояния, который как вы говорите, он нашел - вы сами скорее всего ввели в фильтр как одно из полей вектора состояния.

я ввел только то что скорость равна скорости в предыдущий момент, а позиция равна позиция в предыдущий момент плюс скорость, нигде дифференциала я не вводил. Если внимательно посмотреть уравнения Калмана, то единственный способ фильтру менять скорость - это через инновации (Update), то есть непосредственно измеряя позицию, как по вашему он может оценить скорость, измеряя только позицию? Посмотрите внимательно на пример

Самое простое объяснение Калмана
www.bzarg.com/p/how-a-kalman-...s-in-pictures/

Там наглядно показано как определяется ковариация между переменными и как наблюдаемая переменная влияет на ненаблюдаемую.
Опять же повторю, что в примере рассмотрен простой случай с линейным фильтром калмана.
Используя же UKF или EKF можно определять даже нелинейные зависимости (мне так кажется).

kasmirov

Сам фильтр ничего не определяет.
Он подбирает коэф. матрицы для минимизации ошибки оценивания.
Если не указана напрямую модель наблюдаемого об’екта, то он вырождается в комплиментарный.
Обсуждать пользу ФК не указывая прямые зависимости между управляющим вектором и реакцией ОУ довольно странно.
А тут идет обсуждение сферического ФК в вакууме. Без мат. модели он не будет иметь преимуществ перед комплиментарным.
А матмодель у каждого аппарата своя