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

WETErok
oleg70:

Мне вот что понравилось:
По моему “узел” стабилизации выполнен на “отлично”, неужели для достижения этого результата необходимы РТОСы, “Калманы” и прочая экзотика ??

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

Как я вижу идеальный контролер “мозжечок”.
Беру две палки на них креплю моторы какие попались и 4 винта, при чем винты у меня почему то оказались разных размеров и шага. Ставлю мозжечок, без всяких настроек пидов и прочих коэффициентов. Включаю подбрасываю вверх, даю газу и … чудо висит коптер в воздухе 😃
Пункт второй подключаю к компу читаю логи, программа на компьютере мне дает рекомендации, изменить центр тяжести, диаметр винтов, шаг и тд…
Конечно мне еще кое что нужно, но об этом не пишу.

rual
Sir_Alex:

Сообщение от oleg70
По моему “узел” стабилизации выполнен на “отлично”, неужели для достижения этого результата необходимы РТОСы, “Калманы” и прочая экзотика ??
А вы попробуйте сделать то же самое без всяких Калманов и прочей экзотики, и нам покажите

Калман не панацея, по простому его задача “подсекать” влияние акселя на горизонт при большом разбросе его показаний, тем не менее он всё равно придерживается матожидания (среднего значения в разбросе показаний) акселя. Так что при плохом датчике или хорошей вибрации он не поможет. Доказано практикой (не моей).
А РТОС это просто средство организации многопоточного выполнения программы, удобство для программиста (знакомого с данной РТОС). У меня пока всё чисто на прерываниях, пока параллельных потоков не много РТОС не нужна.

HikeR

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

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

SergDoc

Ага, ща начнём плодить популяции нейронов-шаманов 😃 а я та думаю, чем проц нагрузить 😃

Sir_Alex
WETErok:

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

Кстати, мне кажется такое вполне можно сделать, правда немного не так. Ставим все как вы написали, все разное, моторы, пропы… Ставим коптер на землю и даем ему команду “Пристрел”, он потихоньку дает газ на каждый мотор по очереди и ждет момента отрыва от земли, как оторвался, записываем параметры мотора и так проверяем все моторы. Дальше эту информацию можно использовать для правильного управления. )))
Ну и к компу подключаем, а нам, мотор 1 - низкая скорость реакциии. Мотор 2 - недостаточная тяга… и т.п.

rual
HikeR:

калман может компенсировать что угодно при наличии адекватной модели “ошибок”.

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

посему послал калмана лесом, пока сам всё это не изобрету 😃

oleg70

Во первых спасибо всем, что так активно отреагировали на мою реплику (провокационную) 😃 .
Функции “мозгов” коптера все ж условно разбиваются на две основные части : это самостабилизация и “все остальное…”, причем без нормальной первой части, вторая теряет всякий смысл…
Я то и имел в виду первое… , а дальше понятно, поле для деятельности безгранично (ограничивается только мощью “камня” и уровнем математики)…

WETErok:

4 винта, при чем винты у меня почему то оказались разных размеров и шага.

Как раз “Калман” то и не позволит Вам менять никакие физические характеристики аппарата, один раз подобранная (с большим трудом) “мат. модель” будет действительна только для одной конфигурации…

Sir_Alex:

а RTOS - это просто облегчение себе работы

Вещь конечно “вкусная” но насчет упрощения работы - вопрос очень даже спорный…
(Я б не сел в самолет, управляемый “Windows” 😃 )

SergDoc
oleg70:

Я б не сел в самолет, управляемый “Windows”

У них фамилии разные 😃

oleg70:

Как раз “Калман” то и не позволит Вам менять никакие физические характеристики аппарата, один раз подобранная (с большим трудом) “мат. модель” будет действительна только для одной конфигурации…

Есть ещё слово такое загадочное - Адаптивный?

WETErok

Я написал что нельзя висеть стабильно

WETErok:

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

скажите я ошибаюсь или уже всё таки можно ?

oleg70
SergDoc:

Есть ещё слово такое загадочное - Адаптивный?

Я про него (“калмана”) почитал и все что понял мой мозг: это то что, называть сей метод “фильтром” можно с большой натяжкой…
Т.е. он позволяет получить искомую величину при ограниченном (не точном) или недостаточном количестве косвенных измерений с датчиков, ОН как бы “восстанавливает” правильное значение при “кривых” измерениях используя некую мат.модель (которую придется делать ручками и скорее всего экспериментально)…
Про адаптивный ничего не нашел (возможно недочитал…), вещь сложная для понимания для моего среднего мозга…
Сразу скажу - могу сильно ошибаться (даже очень)…

WETErok:

скажите я ошибаюсь или уже всё таки можно

То что можно - очевидно, вопрос: “как” и “с помощью чего” ???

SergDoc

Имеется возможность самоадаптации какими-то магическими способами - изменение матрицы ковариаций в реальном времени, но блин надо чтобы кто-нибудь это расказал “нормальным” языком, а то блин куча букав, а потом бац формула готова, а откуда куда и чё вообще - х.з. , у нас физик в технаре такой был, чё-то сам себе бубнит, чё-то рисует на доске - короче приходилось приходить с занятий и блин по учебникам выяснять, чтоже мы сегодня изучали, слава богу хоть на экзаменах адекватный был 😃

Одной из основных проблем, с которой сталкиваются при работе с фильтром Калмана, является то, что как модель самой системы, так и модель измерений неидеальны. Статистические свойства шумов, а именно, их ковариационные матрицы являются теми параметрами, от которых зависит точность оценивания вектора состояния системы, то есть точность работы фильтра.
Обычно начальные значения ковариационных матриц шума измерений и шума процесса выбираются путём анализа некоторых эмпирических данных или путём моделирования различных ситуаций и далее считается постоянной. Если в процессе использования этих данных выясняется, что работа фильтра неудовлетворительна, то требуется новая настройка ковариационных матриц шумов. Появляется задача адаптивной фильтрации – параллельно с оценкой вектора состояния системы оценивать статистические свойства шумов процесса и измерений (ковариационные матрицы) с целью повышения точности работы фильтра. Один из методов такой оценки – метод “Уточнение ковариации”.

oleg70
SergDoc:

а то блин куча букав, а потом бац формула готова,

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

SergDoc

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

rual
SergDoc:

А вот PID привязан уже жестко к типу аппарата (и далеко не всегда правильно)

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

450 12е пропы ДТ700

диаганаль моторов 300 9е пропы 930KV, нестандартный аппрат, с очень большими мометами энерции по всем осям при указаных пропах

ну и совсем другие мозги, рама 450 9е пропы 930 КВ

Падение на первом вызвано отсечкой неправильно настроенного регуля, болтанка на 2,3м вызвана исключительно пилотом, ибо хотелось проверить качество управления.
ПИды везде одинаковые!
Более тонкую настройку ПИДов стоит выполнять только в части улучшения экономичности и то при наличии качественных регулей.

rual

Вот ещё добавлю про датчики. Сегодня опять вернул Ф3Дискавери на 450ю раму для проверки отключения 4го мотора.
При одинаковых алгоритмах на МПУ всё прилично, на ЛСМ горизонт кривит не по детски…

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

Что собсна говорит о том, что такая особенность имеется у всех ЛСМ и её проявление не зависит от качества фильтра и параметров вибрации. Привет, ПиксХавку!

SergDoc

У меня тут мысль в башке вертится:

  1. Цикл жесткий - магическое число - регули на 400, значит 2500 (ну можно с вариациями на тему)
  2. Фильтр даёт ПРЕДСКАЗАНИЕ положения в момент записи в таймеры, а не в момент расчёта
  3. ПИД обязан вычислить и записать в таймеры нужное ВОВРЕМЯ дабы небыло проскоков периода.
    Отсюда вытекают две вещи:
    внутренние фильтры датчиков придётся отключать! дабы повысить скорость считывания и не ловить старые данные - они будут не верны 😦
    ну и как следствие нужен мощный фильтр дабы он справился с сырыми данными
    как доказательство - мелкоплата на LSM ТОЛЬКО с одноосевым Калманом до комплиментарного и на максимальной частоте выборки удалось хоть как-то завести аксель…
Sir_Alex
SergDoc:

внутренние фильтры датчиков придётся отключать! дабы повысить скорость считывания и не ловить старые данные - они будут не верны

Если в коде просто усреднять, то нет смысла, т.к. датчик сам это делает. А если отдавать Калману (и другим фильтрам), сможет ли он работать на 1Khz?

Мне тут на днях показали код мультивия в частности инициализация ITG3200 - так вот, там Sampling Rate = F = 1KHz - то я то понимаю, что Мультивии не в состоянии на такой частоте обрабатывать данные от гиры = значит он тупо пропускает данные (скорее всего 50% и больше) - не понимаю зачем так сделано???

SergDoc

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

Sir_Alex
SergDoc:

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

Не, вот именно что усреднение там отключено, гира пишет на частоте дискретизации = 1Khz (можно и 8 включить, но там 1). Усреднения нет, поэтому все что не успеет прочитать Мультивии - пропадает.

SergDoc

не Алексей, фильтруется оно


//ITG3200 and ITG3205 Gyro LPF setting
#if defined(ITG3200_LPF_256HZ) || defined(ITG3200_LPF_188HZ) || defined(ITG3200_LPF_98HZ) || defined(ITG3200_LPF_42HZ) || defined(ITG3200_LPF_20HZ) || defined(ITG3200_LPF_10HZ)
  #if defined(ITG3200_LPF_256HZ)
    #define ITG3200_SMPLRT_DIV 0  //8000Hz
    #define ITG3200_DLPF_CFG   0
  #endif
  #if defined(ITG3200_LPF_188HZ)
    #define ITG3200_SMPLRT_DIV 0  //1000Hz
    #define ITG3200_DLPF_CFG   1
  #endif
  #if defined(ITG3200_LPF_98HZ)
    #define ITG3200_SMPLRT_DIV 0
    #define ITG3200_DLPF_CFG   2
  #endif
  #if defined(ITG3200_LPF_42HZ)
    #define ITG3200_SMPLRT_DIV 0
    #define ITG3200_DLPF_CFG   3
  #endif
  #if defined(ITG3200_LPF_20HZ)
    #define ITG3200_SMPLRT_DIV 0
    #define ITG3200_DLPF_CFG   4
  #endif
  #if defined(ITG3200_LPF_10HZ)
    #define ITG3200_SMPLRT_DIV 0
    #define ITG3200_DLPF_CFG   5
  #endif

т.е. если Sampling Rate = F = 1KHz то на выходе LPF_188HZ - что вий вполне успеет прочитать…
на f4 реально взять с датчика по полной…

oleg70
SergDoc:

Кстати, а чё все к фильтру привязались то?

Вот именно эту мысль я и толкаю… Работы в плане доводки датчиков + ПИД и алгоритмов работы с ними не початый край, а этот аспект как то все “перескакивают” и сразу в “калманы”…
Из своих наблюдений (в теме меньше года) могу сообщить:
Попытки обработать данные с гиры/акселя до подачи в ИМУ особых реальных улучшений не дали…(применял усреднение, “медиану” без разн…) только тормозили цикл, ради смеха брал усреднение аж по 70 выборкам - бесполезно…
Правда оговорюсь сразу - это злополучный LSM, гира от F3 вполне адекватная. Таким образом шумы акселя + гира при запущенных моторах не позволяют увеличить коэф. усиления (а равно о быстродействие) ИМУ и повысить качество стабилизации аппарата…
Ставил свою платку на самолет (схема классика), - да - картина лучше, но при “кривом” винте (трава налипла), один раз была явная потеря контроля, чего уж говорить о четырех моторах, создающих в рабочем диапазоне МАССУ резонансов !