Создание собственной системы стабилизации
Беру две палки на них креплю моторы какие попались и 4 винта, при чем винты у меня почему то оказались разных размеров и шага. Ставлю мозжечок, без всяких настроек пидов и прочих коэффициентов. Включаю подбрасываю вверх, даю газу и … чудо висит коптер в воздухе
Кстати, мне кажется такое вполне можно сделать, правда немного не так. Ставим все как вы написали, все разное, моторы, пропы… Ставим коптер на землю и даем ему команду “Пристрел”, он потихоньку дает газ на каждый мотор по очереди и ждет момента отрыва от земли, как оторвался, записываем параметры мотора и так проверяем все моторы. Дальше эту информацию можно использовать для правильного управления. )))
Ну и к компу подключаем, а нам, мотор 1 - низкая скорость реакциии. Мотор 2 - недостаточная тяга… и т.п.
калман может компенсировать что угодно при наличии адекватной модели “ошибок”.
любой алгоритм может компенсировать что угодно, если он будет это адекватно учитывать.
посему послал калмана лесом, пока сам всё это не изобрету 😃
Во первых спасибо всем, что так активно отреагировали на мою реплику (провокационную) 😃 .
Функции “мозгов” коптера все ж условно разбиваются на две основные части : это самостабилизация и “все остальное…”, причем без нормальной первой части, вторая теряет всякий смысл…
Я то и имел в виду первое… , а дальше понятно, поле для деятельности безгранично (ограничивается только мощью “камня” и уровнем математики)…
4 винта, при чем винты у меня почему то оказались разных размеров и шага.
Как раз “Калман” то и не позволит Вам менять никакие физические характеристики аппарата, один раз подобранная (с большим трудом) “мат. модель” будет действительна только для одной конфигурации…
а RTOS - это просто облегчение себе работы
Вещь конечно “вкусная” но насчет упрощения работы - вопрос очень даже спорный…
(Я б не сел в самолет, управляемый “Windows” 😃 )
Я б не сел в самолет, управляемый “Windows”
У них фамилии разные 😃
Как раз “Калман” то и не позволит Вам менять никакие физические характеристики аппарата, один раз подобранная (с большим трудом) “мат. модель” будет действительна только для одной конфигурации…
Есть ещё слово такое загадочное - Адаптивный?
Я написал что нельзя висеть стабильно
Но это не так им рулят, горизонтальную стабилизацию нельзя сделать без датчиков позиционирования (gps, лидира, сонары, ИК дальномеры), квадрик будет плыть от завихрений воздуха и хобийными акселерометрами это не увидеть.
скажите я ошибаюсь или уже всё таки можно ?
Есть ещё слово такое загадочное - Адаптивный?
Я про него (“калмана”) почитал и все что понял мой мозг: это то что, называть сей метод “фильтром” можно с большой натяжкой…
Т.е. он позволяет получить искомую величину при ограниченном (не точном) или недостаточном количестве косвенных измерений с датчиков, ОН как бы “восстанавливает” правильное значение при “кривых” измерениях используя некую мат.модель (которую придется делать ручками и скорее всего экспериментально)…
Про адаптивный ничего не нашел (возможно недочитал…), вещь сложная для понимания для моего среднего мозга…
Сразу скажу - могу сильно ошибаться (даже очень)…
скажите я ошибаюсь или уже всё таки можно
То что можно - очевидно, вопрос: “как” и “с помощью чего” ???
Имеется возможность самоадаптации какими-то магическими способами - изменение матрицы ковариаций в реальном времени, но блин надо чтобы кто-нибудь это расказал “нормальным” языком, а то блин куча букав, а потом бац формула готова, а откуда куда и чё вообще - х.з. , у нас физик в технаре такой был, чё-то сам себе бубнит, чё-то рисует на доске - короче приходилось приходить с занятий и блин по учебникам выяснять, чтоже мы сегодня изучали, слава богу хоть на экзаменах адекватный был 😃
Одной из основных проблем, с которой сталкиваются при работе с фильтром Калмана, является то, что как модель самой системы, так и модель измерений неидеальны. Статистические свойства шумов, а именно, их ковариационные матрицы являются теми параметрами, от которых зависит точность оценивания вектора состояния системы, то есть точность работы фильтра.
Обычно начальные значения ковариационных матриц шума измерений и шума процесса выбираются путём анализа некоторых эмпирических данных или путём моделирования различных ситуаций и далее считается постоянной. Если в процессе использования этих данных выясняется, что работа фильтра неудовлетворительна, то требуется новая настройка ковариационных матриц шумов. Появляется задача адаптивной фильтрации – параллельно с оценкой вектора состояния системы оценивать статистические свойства шумов процесса и измерений (ковариационные матрицы) с целью повышения точности работы фильтра. Один из методов такой оценки – метод “Уточнение ковариации”.
а то блин куча букав, а потом бац формула готова,
Из за “мутности” и непонятности у меня возникает подозрение, что реально понимающих - не так уж и много…
Можно заявить: “я запустил калман”, а как доказать что он реально работает (и как эффективно) а не мешает ??
Кстати, а чё все к фильтру привязались то? допустим что ему до лампочки какой аппарат - ему нужно что только то дать нам правильные показания, естественно чем точнее тем лучше, остальное всё равно делать PID регулятору - вот тут начинается самое интересное, ну допустим угол, ускорение, скорость у нас есть, даже можем в какой-то краткосрочной перспективе и путь знать. А вот PID привязан уже жестко к типу аппарата (и далеко не всегда правильно), я думаю надо в эту сторону копать, а для фильтра хватит на первых порах - шумы собственные датчиков плюс заложить какой-то коэффициент на вибрации?
А вот PID привязан уже жестко к типу аппарата (и далеко не всегда правильно)
Я вот ПИДы вообще не меняю, даже не знаю какие стоят, а мозги постоянно качуют с одного аппарата на другой. Аппараты очень разные… Для себя сделал вывод, что ПИД для многоротора (для соразмерных аппаратов) менять не нужно, а вот для самолей всё равно придется подбирать под каждый. Даже если делать автонастройку, то только полуавтомат, т.е. мозг набирает статистику ошибок и даёт рекомендации по изменению, а дальше сам меняешь ручками. Иначе моск может проскочить “пространство стабильности” и завалить аппарат, причем это может произойти внезапно, просто при изменении внешних условий.
450 12е пропы ДТ700
диаганаль моторов 300 9е пропы 930KV, нестандартный аппрат, с очень большими мометами энерции по всем осям при указаных пропах
ну и совсем другие мозги, рама 450 9е пропы 930 КВ
Падение на первом вызвано отсечкой неправильно настроенного регуля, болтанка на 2,3м вызвана исключительно пилотом, ибо хотелось проверить качество управления.
ПИды везде одинаковые!
Более тонкую настройку ПИДов стоит выполнять только в части улучшения экономичности и то при наличии качественных регулей.
Вот ещё добавлю про датчики. Сегодня опять вернул Ф3Дискавери на 450ю раму для проверки отключения 4го мотора.
При одинаковых алгоритмах на МПУ всё прилично, на ЛСМ горизонт кривит не по детски…
Сдаётся мне, что в ЛСМ есть взаимовлияние осей, т.е. создаешь ускорение по одной оси, а оно пролазит в другую… При постоянной вибрации осреднённая составляющая этого паразитного ускорения вылазит в бок. Причем почитал в ветках про самики со стабом на ЛСМ, там всё ровно также как и у меня - горизонт валит вперёд и влево.
Что собсна говорит о том, что такая особенность имеется у всех ЛСМ и её проявление не зависит от качества фильтра и параметров вибрации. Привет, ПиксХавку!
У меня тут мысль в башке вертится:
- Цикл жесткий - магическое число - регули на 400, значит 2500 (ну можно с вариациями на тему)
- Фильтр даёт ПРЕДСКАЗАНИЕ положения в момент записи в таймеры, а не в момент расчёта
- ПИД обязан вычислить и записать в таймеры нужное ВОВРЕМЯ дабы небыло проскоков периода.
Отсюда вытекают две вещи:
внутренние фильтры датчиков придётся отключать! дабы повысить скорость считывания и не ловить старые данные - они будут не верны 😦
ну и как следствие нужен мощный фильтр дабы он справился с сырыми данными
как доказательство - мелкоплата на LSM ТОЛЬКО с одноосевым Калманом до комплиментарного и на максимальной частоте выборки удалось хоть как-то завести аксель…
внутренние фильтры датчиков придётся отключать! дабы повысить скорость считывания и не ловить старые данные - они будут не верны
Если в коде просто усреднять, то нет смысла, т.к. датчик сам это делает. А если отдавать Калману (и другим фильтрам), сможет ли он работать на 1Khz?
Мне тут на днях показали код мультивия в частности инициализация ITG3200 - так вот, там Sampling Rate = F = 1KHz - то я то понимаю, что Мультивии не в состоянии на такой частоте обрабатывать данные от гиры = значит он тупо пропускает данные (скорее всего 50% и больше) - не понимаю зачем так сделано???
Не, так это выборка, скажем так, цифровой частью гиры показаний его аналогово датчика, а дальше он сам усредняет и в выходных регистрах уже усреднённые данные…
нам же в таком случае надо следуюшее - в выходных регистрах датчика должны быть значения снятые с той же частотой, с которой позволит шина…
Не, так это выборка, скажем так, цифровой частью гиры показаний его аналогово датчика, а дальше он сам усредняет и в выходных регистрах уже усреднённые данные… нам же в таком случае надо следуюшее - в выходных регистрах датчика должны быть значения снятые с той же частотой, с которой позволит шина…
Не, вот именно что усреднение там отключено, гира пишет на частоте дискретизации = 1Khz (можно и 8 включить, но там 1). Усреднения нет, поэтому все что не успеет прочитать Мультивии - пропадает.
не Алексей, фильтруется оно
//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 реально взять с датчика по полной…
Кстати, а чё все к фильтру привязались то?
Вот именно эту мысль я и толкаю… Работы в плане доводки датчиков + ПИД и алгоритмов работы с ними не початый край, а этот аспект как то все “перескакивают” и сразу в “калманы”…
Из своих наблюдений (в теме меньше года) могу сообщить:
Попытки обработать данные с гиры/акселя до подачи в ИМУ особых реальных улучшений не дали…(применял усреднение, “медиану” без разн…) только тормозили цикл, ради смеха брал усреднение аж по 70 выборкам - бесполезно…
Правда оговорюсь сразу - это злополучный LSM, гира от F3 вполне адекватная. Таким образом шумы акселя + гира при запущенных моторах не позволяют увеличить коэф. усиления (а равно о быстродействие) ИМУ и повысить качество стабилизации аппарата…
Ставил свою платку на самолет (схема классика), - да - картина лучше, но при “кривом” винте (трава налипла), один раз была явная потеря контроля, чего уж говорить о четырех моторах, создающих в рабочем диапазоне МАССУ резонансов !
Я вот ПИДы вообще не меняю,
кстати, да, ПИД скорее сильней привязан непосредственно к свойствам датчиков + настройки их усиления…
т.е. если Sampling Rate = F = 1KHz то на выходе LPF_188HZ - что вий вполне успеет прочитать… на f4 реально взять с датчика по полной…
Честно говоря, у меня нету всего кода, т.к. это в Сашиной прошивке (mahowii), но строка которая должна была залить тот самый делитель, закоменчена:
// i2c_writeReg(ITG3200_ADDRESS, 0x15, ITG3200_SMPLRT_DIV); //register: Sample Rate Divider -- default value = 0: OK
А по умолчанию, делитель = 0, т.е. 1KHz
P.S. Ха, так в твоем куске кода, делитель всегда равен 0 ))))
так смотри ITG3200_SMPLRT_DIV 0 и ITG3200_DLPF_CFG 0 это максимум датчика т.е. 8КГц считывание и 256Гц на выходе это при времени цикла 3906 вполне успеваемая цыфра 😃 я не работал с этим датчиком, но так понимаю, эти два регистра связаны между собой…
Калманов
Калман
калман
калмана
Калмана
Калмана
😃)))
Напомню 7-го числа начался отличный курс по цифровой обработке сигналов www.coursera.org/course/dsp я записался, но пока из за проблем со временем не начал…
далее через 2 дня начнется курс Machine Learning от Стэнфорда! www.coursera.org/course/ml
- кореш мой проходит сейчас Artificial Intelligence for Robotics www.udacity.com/course/cs373
Очень доволен, что с курсом есть необходимый материал по азам линейной алгебры. И кстати там есть урок по Калману. Друг сказал что сперва не въехал, а потом допер и все как на ладони стало. Курс этот от фрица, препода из Стэнфорда, который участвует в проекте по автономным гугломобилям.