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

SergDoc
oleg70:

(я именно о случае одного источника шума рассуждаю, а не о разных)

шумов много и разных, можно отфильтровать собственный шум датчика, а дальше - вибрации вызванные моторами, пропами, какими-то резонансными составляющими рамы, самой платы контроллера и их гармоник - куча неизвестных причём меняющихся во времени без всякой закономерности, и то что работает на столе или в относительно спокойном состоянии сводя коэффициенты фильтра в одну точку, на практике из белого шума сделает однобокий цветной и не дай бог ещё и в резонанс с чем-то, простой пример (не относящийся к данному примеру) был у меня контроллер на 330-м лсм-е и что, пока взлетает или носится как угорелый - всё нормально, как только в режиме висения примерно на 50% газа - ну ни в какую, а как оказалось при оборотах 4500 - 5000 - жудкий резонанс самого акселя с вибрациями от вмг, так вот сменить вмг на более оборотистые и в ховере эта штука бы уже полетела но зато на малых оборотах были бы проблемы - вот ещё одно условие (неизвестное) как с ним бороться - только собиранием имперических данных и по ним выстраивать алгоритм именно к конкретному датчику! почему я упёрся в мпу - я его знаю я могу с ним “сработаться”…

SergejK
oleg70:

налицо два разных подхода к решению задачи: один для “одиночного” сигнала и второй для смешивания разных…, тут то наверно и непонимание…

Отсюда и был мой вопрос, который чаще всего пытаются обходить либо не затрагивать вообще в инструкциях по фильтру Калмана:

SergejK:

В каком случае в принципе имеет смысл использовать фильтр Калмана?

alexmos
SergDoc:

сейчас в том же ардукоптере, применено довольно интересное решение - например компас может вообще выводиться из алгоритма если его показания сильно разнятся с показаниями ДУС, при этом если датчик возвращается в “норму” - он возвращается в алгоритм…

Эти “трюки” работают только в определенных условиях. Пример: влетели в зону магнтной аномалии, компасс начал врать, его из коррекции ДУС исключили. Потом гирик подрейфовал немного в нужную сторону и сравнялся с компассом в своих показаниях. И вот автопилот уверен, что все отлично, а на самом деле оба датчика врут.
И вот тут принципиальный вопрос который мне непонятен: как в фильтре Калмана определить, насколько датчик врет в текущий момент? Те же вибрации - они могут как сбивать аксель, так и абсолютно не искажать картину, если он их успевает усреднять, когда нет потери данных из-за низкой частоты выборки и нет сатурации. Имхо, кто врет сильнее - аксель или гироскоп, сказать очень сложно, если вообще возможно.

SitulaAqua
oleg70:

Измеритель поставим, не проблема… ))

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

Все верно говорите, имеется ввиду “рассчитываемому”
Если посмотрите график то увидите что при Q и R конст. то P и К остановятся на некотором значении и больше вообще не будут меняться. Если же вы это установившееся значение сразу вобьете в P(0) и К(0) то вообще ничего меняться не будет 😃
А вот если R - это реальное текущее значение дисперсии то тут ужу Р и К будут меняться и подстраиваться под условия, а это уже интереснее.

oleg70
SergDoc:

жудкий резонанс самого акселя с вибрациями

В сотый раз убеждаюсь - все проблемы ИНС от акселя…
на какие только извраты не приходится идти чтоб только скомпенсировать его корявые свойства… на оптику надо переходить… (так, к слову)

rual

НУ наконец-то, есть что почитать на форуме 😃 Спасибо, коллеги!
Статьи весьма годные, особо та, что на фин.странице. В коем веке увидел описание сложных сущностей простым человеческим языком.
Насколько я понял, матрицы H и F константны, т.е. по сути они есть системы лин.ур-ний с фиксированными коэффициентами? Вся магия КФ заключена в динамическом управлении коэффициентами коррекции экстраполяции вектора состояния системы x через матрицу F (для простоты B и u упоминать не буду) с учетом привязки к измеренному параметру системы (если H=1, либо связному с ней через через матрицу H).
Я правильно понял? Если да, то вся “особость” системы закладывается разрабом в H и F, а КФ рулит G на основе P. Т.е. “отключает” те датчики, у которых высокая дисперсия в P, ожидание и измерение сильно разорваны.
Посему странно использовать КФ для фильтрации одномерного сигнала, ибо нет никаких “последствий” фильтрации, не с чем больше сравнить результат прогноза и нет закономерности эволюции состояния F, можно только измерить дисперсию сигнала R и сравнить с заданной дисперсией Q и получить коэффициент. Всё…

alexmos:

Эти “трюки” работают только в определенных условиях. Пример: влетели в зону магнтной аномалии, компасс начал врать, его из коррекции ДУС исключили. Потом гирик подрейфовал немного в нужную сторону и сравнялся с компассом в своих показаниях. И вот автопилот уверен, что все отлично, а на самом деле оба датчика врут.

Это не совсем так, если в модели F учитываются все параметры системы. С другой стороны если имеем систему с конечным набором датчиков, котрые врут “в одну сторону” и соответствуют модели F, то значит такая система ТОЛЬКО так и видит мир. По сути недоработка на этапе разработки, либо такого рода проблемы не принимались во внимание.

oleg70:

В сотый раз убеждаюсь - все проблемы ИНС от акселя…

Олег, к чему такие крайности? Очевидно, что все жизненные проблемы от самой жизни ))

Хотя вот есть пример безаксельного коптера

HikeR:

запустишь по горизонту — будет помнить этот горизонт и приводится к нему из любого положения. но да, он читерит маленько если использовать мышиный сенсор (с разрешением 8*8, вроде) и “поправляет” этот горизонт при опущенных стиках и висении. и это без акселей, гпс, барометров, компасов и пр.

12 days later
oleg70
rual:

к чему такие крайности?

До сих пор вопрос устранения линейных ускорений из “гравитационных” остается открытым… (для меня во всяком случае)).
GPS наверно поможет, но как то некрасиво это всё…, а главное ненадёжно…
Мысль пока только такая - тупо отключать этот аксель при кренах аппарата свыше определенных углов и лететь да ДУСе, но тогда придется серьёзно поработать над “уплыванием” из за вибраций в течении максимального периода времени…
Короче, буду лепить “карусельку с вибратором” (нет, не с тем что…😃) для экспериментов и пробовать/смотреть что из этой затеи получится.

18 days later
SergDoc

Поднимем тему!
Завёлся спор о рейсерских прошивках - частотах датчиков и всякой лабуде, так вот я провёл пару экспериментов и, короче надо развеять пару мифов!
32кГц - хрень и чушь

  1. все датчики которые пользуются и не пользуются максимум механически способны выдать аналоговый сигнал на 29кГц!
  2. MPU6000 - максимум что может отдать из регистров - частота 1кГц (проверено на столе)
  3. MPU6500 и иже с ними 9150 9250 9255 - максимум работы с регистрами 8кГц ДУС 4кГц - аксель (проверено и облётано)
  4. ITG-3701 и ICM-20601 - тоже самое только ДУС 4000 гр/сек аксель - внимание! якобы 32g, но тут же написано - 10G шок и похоже звездец как и в выше описаных - как это понимать…
    тестил betaflight на ф4-м если верить данным гуя загрузка проца (без фпу) 1 процент на 8 килогерцах петли, короче ничё он там не делает, смысл картинки мне не понятен, но отладку на F7-м я прикупил - посмотрим)))
AlexSneg

с отключенными фильтрами MPU отдает на 2кГц

SergDoc:
  1. все датчики которые пользуются и не пользуются максимум механически способны выдать аналоговый сигнал на 29кГц!

А вот это про что речь? Я отстал от жизни?

SergDoc

аналоговая механическая часть максимум на что рассчитана - номинал 27кГц разброс от 26 до 29…

Gyroscope Mechanical Frequencies 25 27 29 KHz

AlexSneg:

с отключенными фильтрами MPU отдает на 2кГц

на своих (старый датчик, возможно устаревшая ревизия f4by ещё лохматой 2.0.0 версии с MPU6000 - дай бог памяти купленной года 3-4 назад) получаю полную хрень, т.е. выше килогерца уже бред с датчика сыплется с переполнением, при чём пока в покое всё нормально, как только повернёщь - всё переполнение и не останавливается - за что купил, за то продал )))
да кстати почитал про эту картинку - бред какой-то, ну понятно что очень похоже на kiss, хотя автор якобы roberto navoni (virtual robotix), так же в описании встречается подпись к процу stm32f7 dual core - такого в природе нет…

AlexSneg
SergDoc:

аналоговая механическая часть максимум на что рассчитана - номинал 27кГц разброс от 26 до 29…

это если просто трясти его что-ли?

SergDoc:

выше килогерца уже бред с датчика сыплется с переполнением

у меня MPU5060 отдавало нормально. Только мне не нужно столько было, лишний гемор.

oleg70
SergDoc:

аналоговая механическая часть максимум на что рассчитана - номинал 27кГц разброс от 26 до 29…

Не знаю на что она там рассчитана, но максимальная частота обновления данных (у цифровой гиры) в регистрах - 2 Кгц… ,
нет, считывать можно конечно и чаще, особенно по SPI, только смысла в этом нет никакого…
У акселя, кстати, всё ещё печальней - 1 Кгц…
Я ошибаюсь ? (про аналоговые датчики речь не идёт…)

SergDoc

у цифрового датчика есть аналоговая (механическая) часть, ацп и т.д… хотел вчера ещё поизголяться над 6000 -й но не судьба…

oleg70
SergDoc:

у цифрового датчика есть аналоговая (механическая)

Эт понятно…
Я думаю цель только одна - убрать из данных гиры ее собственный шум, чтоб углы не уплывали со временем…
Как вариант - взять “супер чувствительную гиру” с микрошумом (которых нет) и удушить этот шум до нуля выставив шкалу в районе привычных 1000 град.сек… Только к сожалению ключевая фраза - которых нет

Gapey
oleg70:

убрать из данных гиры ее собственный шум

а если читать из гиры максимально возможное количество показаний и усреднять их ? если удастся вытащить из какогото датчика хотябы реальных 8000 отсчетов то для расчетов вполне можно использовать среднее между последними несколькими отсчетами. для гонок ессно такое неприемлемо.

alexmos
Gapey:

а если читать из гиры максимально возможное количество показаний и усреднять их ? если удастся вытащить из какогото датчика хотябы реальных 8000 отсчетов то для расчетов вполне можно использовать среднее между последними несколькими отсчетами. для гонок ессно такое неприемлемо.

Мы сравнивали опрос на высокой скорости (32кГц) и самостоятельную фильтрацию в дальнейшем (усреднение, LPF-фильтры с разными настройками) - заметной выгоды по сравнению с внутренней фильтрацией нет. Видимо, там стоит достаточно адекватные филтры, максимальная частота среза по документации 250 Гц выбрана оптимально, и если ее повышать - то данные слишком шумные. Ну и решили, что опрашивать гирик чаще чем 8кГц смысла никакого нет. PID-цикл на 1250Гц.

SergejK
alexmos:

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

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

rual

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

oleg70
rual:

Для гонщиков, в данном случае, лучше аналоговые ДУСы

Да, и в идеале, сам ПИД регулятор тоже должен быть аналоговый, никакой цифры от датчика до ШИМ мотора…,
только наверно такой “концепт” никому не нужен…

rual
oleg70:

Да, и в идеале, сам ПИД регулятор тоже должен быть аналоговый, никакой цифры от датчика до ШИМ мотора

Тут как раз не обязательно, главное чтоб потерь инфы в цепочке физ.датчик-АЦП не было, а далее всё сквозное вычисление с максимальной частотой.

SergDoc

беру свои слова обратно - запустил я mpu6000 на 2-х килогерцах - был драйвер кривой…