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

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 вполне адекватная. Таким образом шумы акселя + гира при запущенных моторах не позволяют увеличить коэф. усиления (а равно о быстродействие) ИМУ и повысить качество стабилизации аппарата…
Ставил свою платку на самолет (схема классика), - да - картина лучше, но при “кривом” винте (трава налипла), один раз была явная потеря контроля, чего уж говорить о четырех моторах, создающих в рабочем диапазоне МАССУ резонансов !

oleg70
rual:

Я вот ПИДы вообще не меняю,

кстати, да, ПИД скорее сильней привязан непосредственно к свойствам датчиков + настройки их усиления…

Sir_Alex
SergDoc:

т.е. если 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 ))))

SergDoc

так смотри ITG3200_SMPLRT_DIV 0 и ITG3200_DLPF_CFG 0 это максимум датчика т.е. 8КГц считывание и 256Гц на выходе это при времени цикла 3906 вполне успеваемая цыфра 😃 я не работал с этим датчиком, но так понимаю, эти два регистра связаны между собой…

mahowik
Sir_Alex:

Калманов

rual:

Калман

HikeR:

калман

oleg70:

калмана

WETErok:

Калмана

SergDoc:

Калмана

😃)))

Напомню 7-го числа начался отличный курс по цифровой обработке сигналов www.coursera.org/course/dsp я записался, но пока из за проблем со временем не начал…

далее через 2 дня начнется курс Machine Learning от Стэнфорда! www.coursera.org/course/ml

  • кореш мой проходит сейчас Artificial Intelligence for Robotics www.udacity.com/course/cs373
    Очень доволен, что с курсом есть необходимый материал по азам линейной алгебры. И кстати там есть урок по Калману. Друг сказал что сперва не въехал, а потом допер и все как на ладони стало. Курс этот от фрица, препода из Стэнфорда, который участвует в проекте по автономным гугломобилям.
SergDoc

Это осеннее обострение, в аналы(слово то какое) медицины войдёт как Калманомания - похоже оно заразно 😃

WETErok
mahowik:

проходит сейчас Artificial Intelligence for Robotics www.udacity.com/course/cs373
Очень доволен

Я в прошлом году или позапрошлом окончил его. Отличный курс, но потом наступает некоторое разочарование, когда начинаешь реально что то делать то оказываться что тебе рассказали лишь введение, и что бы реально применить нужно самостоятельно перелопатить гору информации. может это и к лучшему. Для себя вынес полезного это алгоритм Particle Filter, классная вещь Калман не нужен 😃

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

Это так в базефлайте? И вие?
Вообще тут надо отделить мух от котлет:
Расчеты ИНС и ПИДов должны быть в ритме выборки датчиков, а а микшер и управление в ритме формирования ШИМ. Т.е. по готовности датчика выполняются вычисления позиционирования и ошибка от заданного положения, и это происходит ДО следующего отсчета датчиков, а миксер вычисляется от выхода ПИДов по готовности таймера к отработке следующего периода. Итого получается отставание: 1 период отсчета ДУС (F3discovery - 2.63 мсек,F4BY - 4 мсек.) , и до выхода в ШИМ 1 период таймера (т.е. от 2.5 до 20 мсек), т.е. при 400Гц ШИМ = 5(7) мсек, при 50Гц шим 23-24 мсек.

SergDoc:

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

Не понял при чем тут внутренние фильтры? Разница между внутренним и внешним только в месте размещения.
А задержка зависит больше от частоты ШИМ, ну а далее регуль и ВМГ.

Сегодня квадру чуть в космос не отправил 😃, поставил новую батарею 4000мАч на 12х пропах, а настройки оставил старые мингаз 1200, средняя точка 1300. Рванул вверх, а вниз спускаться отказался. Хотел сначала ронять, пока он из радиовидимости не свалил, но потом я его большими кренами назад-вперёд снизил постепенно, а там батарея начала сдавать помалу. Дальше летал практически на нулевом газу.

SergDoc
rual:

Не понял при чем тут внутренние фильтры? Разница между внутренним и внешним только в месте размещения.
А задержка зависит больше от частоты ШИМ, ну а далее регуль и ВМГ.

Надо повысить частоту считывания, ибо смысл читать гиры на 800Гц если они выдают показания на 42Гц - и что мы будем читать старые данные? зачем? смысл от 400-490 герцового шима? если изменения вносятся 42 раза в секунду (это я из примера готовности датчиков) скажем для ПИДа хорошо сглаженные двумя фильтрами данные, но для бесплатформенной ИНС помоему не очень?

rual:

ДУС (F3discovery - 2.63 мсек,F4BY - 4 мсек.) , и до выхода в ШИМ 1 период таймера (т.е. от 2.5 до 20 мсек), т.е. при 400Гц ШИМ = 5(7) мсек, при 50Гц шим 23-24 мсек.

я вечно путаюсь в микро и мили - мсек-это что?

oleg70
SergDoc:

Надо повысить частоту считывания, ибо смысл читать гиры на 800Гц если они выдают показания на 42Гц - и что мы будем читать старые данные? зачем? смысл от 400-490 герцового шима?

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

rual
SergDoc:

Надо повысить частоту считывания, ибо смысл читать гиры на 800Гц если они выдают показания на 42Гц - и что мы будем читать старые данные? зачем?

Кто сказал, что реальная частота дискретизации 42Гц? Я пока уверен, что СТшные ДУСы вполне адекватно отражают повороты на установленной частоте.Что касаемо МПУ, то там ещё проще, ДУС работает на 1кГц, на это дальше задается делитель отсчетов от 1 до хз (128 макс вроде), он задает частоту отсчетов акселя, ДУС на это же время осредняется. И мы получаем выход с ДУСа и акселя на одной частоте.

SergDoc:

я вечно путаюсь в микро и мили - мсек-это что?

м -мили
мк -микро

rual

А смысла ставить ШИМ 490 Гц при обсчете инс 42Гц нет особого, ну кроме того, что при 50Гц ШИМ к 238 мсек от ИНС добавится 200 мсек от регуля. Хотя пробовал летать на 50Гц, для больших винтов и тяжелых аппаратов разницы нет, но там возможно важно иметь обратную связь по оборотам.

oleg70:

Отсюда же и имею очень скептическое отношение к разного рода “крутым” регулям по I2C, там где надо и не надо…

К регулям по и2ц имею резко отрицательное отношение, а вот по КАН положительное. Хотя не то ни другое не использовал, зато хорошо знаком с особенностями первого интерфейса и возможностями второго.

mahowik
WETErok:

Для себя вынес полезного это алгоритм Particle Filter, классная вещь Калман не нужен

спасибо, почитаю… вот нашел статейку habrahabr.ru/post/152553/