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

HikeR
Sir_Alex:

при работающих моторах…

моторы обычно не вращаются с одной и той же скоростью, особенно когда их несколько ;)

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

Sir_Alex
HikeR:

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

AP_InertialSensor_MPU6000.cpp:

    // sample rate and filtering
    // to minimise the effects of aliasing we choose a filter
    // that is less than half of the sample rate
HikeR:

моторы обычно не вращаются с одной и той же скоростью, особенно когда их несколько 😉

Логично, поэтому надо строить график при Throttle от нуля до 100%.

HikeR
Sir_Alex:

AP_InertialSensor_MPU6000.cpp:

о, эту штуку недавно добавили только в ArduPlane, но это скорее обычное усреднение, чем какой-то специальный ФНЧ или ФВЧ, суммируем N значений и делим на N. для самолетов, мол, хватает.

Sir_Alex:

строить график при Throttle от нуля до 100%.

это если мотор один, а как складывать гармоники будете от четырех-восьми работающих вразнобой?

p.s.
все-таки почитал вдумчивее, это действительно LPF, который имется в MPU6000 (цифровой встроенный), invensense.com/mems/gyro/…/RM-MPU-6000A.pdf страница 13-14. судя по временной задержке ничего сложнее усреднения там нет.

Sir_Alex
HikeR:

это если мотор один, а как складывать гармоники будете от четырех-восьми работающих вразнобой?

Вразнобой как раз и будет интересно анализировать, т.к. они будут резонировать на каких то частотах, где один работающий мотор не даст вообще никаких помех.
Т.е. в теории будет так: “плавно поднимаем газ от 0 до 100, при этом на графике FFT отмечаются максимумы, после этого меняем частоты LPF и HPF и повторяем тест до тех пор, пока не избавимся от помех от моторов”.

mahowik
Sir_Alex:

Кто нибудь знает, какие есть критерии при выборе частоты LPF фильтра гиры и акселя?

в вие я на этом собаку сьел! 😃

внутренние LPF:

  1. гира 42гц - если для умеренных и быстрых полетов
    гира 20гц - для авто полетов, фпв и начнающих летунов
    Не смотря на довольно низкие значения скорости гир вполне хватает для четкой стабилизации и отброса вибраций…
  2. аксель 5-10гц - при условии что внутреннее усреднение сделано по нормальному в чипе, т.е. при понижении LPF не уменьшается самплиннг… т.к. к примеру в какашечном adxl345 сделано именно уменьшением самплинга…

внешние/алгоритмические LPF:

  1. гира - не трогаем 😃
  2. аксель - душим на 0.1-0.5гц, т.е. оставляем его скорость сходной со скоростью “корректора”… в вие это компл. фильтр, в арду dcm, но сути не меняет…
Sir_Alex
mahowik:
  1. гира 42гц - если для умеренных и быстрых полетов гира 20гц - для авто полетов, фпв и начнающих летунов Не смотря на довольно низкие значения скорости гир вполне хватает для четкой стабилизации и отброса вибраций… 2) аксель 5-10гц - при условии что внутреннее усреднение сделано по нормальному в чипе, т.е. при понижении LPF не уменьшается самплиннг… т.к. к примеру в какашечном adxl345 сделано именно уменьшением самплинга…

Эммм… так вроде в MPU, LPF выставляется одновременно для Гиры и Акселя.
Посмотрим какие будут отзывы о мерапирате 2,9 - там можно выбрать частоту LPF…

mahowik

еще оч. важный параметр акселя это внутр. диапазон акселя… нужно брать 8-16g, иначе от вибраций и внутренних резонансов на этих самых вибрациях может происходить перенасыщение внутреннего АЦП акселя и тогда уже никакие внутр/внешн. фильтры и матеметика не помогут… типа как синусоида режется в меандр с диким расширением спектра гармоник…
в вие пока не доперли до этого, мучались с дрейфами в став/левел моде ибо “на столе” все пахало, а полете всплывало…

Sir_Alex:

Эммм… так вроде в MPU, LPF выставляется одновременно для Гиры и Акселя.

ну да, я тоже задавался этом вопросом, но в даташит так и не залез… оставил на 42-20гц + внешний НЧ для акселя…

HikeR
mahowik:

при понижении LPF не уменьшается самплиннг

неужто есть такие волшебные датчики??

mahowik:

нужно брать 8-16g

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

SergDoc
HikeR:

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

при переполнении плюс на минус поменяется 😦

mahowik
HikeR:

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

я не зря написал про внутренние резонансы самого акселя… дело скорее всего именно в них, т.к. тоже недоумевали откуда вибрации могут быть в таких кол-вах G…
но это уж факт, проводили тесты, спектр. состав смотрели и т.д… я делился подобными мыслями с vis.asta, так он подвердил тоже самое, что допер до этого уже год назад и у него 8g… а как у него летает, думаю все видели 😃
что до падения разрешения, то в норм. акселях даже при 8-16g это от 512 и выше, т.е. с головой т.к. нелинейность самих осей даст больше погрешности в разы…

HikeR
SergDoc:

плюс на минус поменяется

выкопал валяющийся CC3D, как мог колотил по столу, но увидел только “полочку” упирающуюся в дефолтные 8G. может все-таки предусмотрена хоть какая-то защита? или надо перешить на менее низкую чувствительность?

mahowik:

а как у него летает, думаю все видели

вот честно скажу, “как” - неинтересно, интересно “почему”.

mahowik
Sir_Alex:

Посмотрим какие будут отзывы о мерапирате 2,9 - там можно выбрать частоту LPF…

раньше кстати в арду 3g для bma180 выбрано было… посмотри что сейчас…

HikeR:

выкопал валяющийся CC3D, как мог колотил по столу, но увидел только “полочку” упирающуюся в дефолтные 8G.

калотить не надо 😃, это не то… отруби внутренний НЧ акселя, выставь самплинг на макс., вруби моторы и скорми данные FFT… увидишь много нового 😉, на некоторых полках газа от 30% и выше всплывают резонансы до 4g и это без пропов! видимо ВЧ вибрации моторов оч. хорошо совпадают с размерами и конструктивными особенностями мемс акселей в плане резонансов…

HikeR

так может просто не нужно отключать фильтры и мучаться с максимальной частотой, если и так все работает?

да, мотор у меня один, вертолетный 😉 только “трансмиссия” вносит кучу бякости, сам мотор ~40K, основной ротор ~3К плюс хвостовой ротор ~14К (К = 1000об/мин). то есть получается связка ~660/50/230 Гц в всех 3-х плоскостях, цеплял когда-то пару мемс-микрофонов и писал с них на обычный диктофон, там такая каша, что просто удивительно как вобще может что-то работать.

mahowik
HikeR:

так может просто не нужно отключать фильтры и мучаться с максимальной частотой

так фильтры никто не отключает… отключать, это если полный спектр гармоник надо глянуть…

HikeR:

если и так все работает?

не работает в том и дело… тут, как писал выше, именно в искажении исходного сигнала внутренним АЦП, когда синусоуда режется ограничением диапазона акселя…
т.е. смотри, внутри мемс цифр. акселя: аналог. аксель => АЦП => цифровой НЧ фильтр… так искажение происходит уже после АЦП и далее данные уже не верные как не фильтруй (по осям где переполнение произошло)…

я пользовал VibAnalyser… плюс в том, что вибрации меряем самим полетным контроллером, т.е. по сути тем же сенсором на котором летаем…
если есть ардуина или контроллер на меге то вот:
rcopen.com/forum/f134/topic224135/199
rcopen.com/forum/f134/topic224135/218

им же и моторы пробовал балансить… все отлично видно…

upd: вот кстати нашел всю историю как это было… читать отсюда + много страниц 😃

mataor
mahowik:

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

им же и моторы пробовал балансить… все отлично видно…

О… когда-то видел… потом доолго искал но найти не мог… Опять возродилась идея добавить ее в виде модуля к коду вия (как уже добавил модуль прошивки регулей ESC_USBLinker)

rual

Ну понаписали )))

Sir_Alex:

Как теорему Котельникова применить к обработке Аналогово сигнала я знаю. Sample Rate тут по всей видимости никаким боком (Это частота на которой обновляются регистры с выходными данными)

На самом деле всё связано со всем:) Ща попробую объяснить, берём данные гиры, которая формирует их с частотой 200Гц, а мы получаем и обрабатываем их с частотой 50Гц. Получается мы получаем только каждый 4й отсчёт. Что мы получим при интегрировании? Мы каждый раз пропускаем 3и отсчёта в течении которых может быть “горбик”, либо “провал”. Соответственно в первом случае при интегрировании мы получим “недокрут”, в последнем “перекрут”. А может быть ещё хуже, допустим гира дает гармонический сигнал кратный частоте обработки, и мы можем в данном случае получить попадание либо в максимумы, либо в минимумы. В первом случае будет постояное вращение в одну сторону, в последнем в другую, а на самом деле имеется гармоническая вибрация со средней линией в нуле. Более сложные ситуации сами себе нафантазируйте (например частоты биений). Т.е. чтобы правильно интегрировать сигнал, нам нужна его полная форма. Увидели Котельникова?
Для “абсолютных” датчиков это не так важно, т.е компас будет показывать примерно в одном направлении, ну немножко будет уплывать мат.ожидание (тоже самое с ГПС). А вот если аксель используем для быстрого получения верт. скорости, то этот момент тоже крайне важен, а для горизонта не очень:)

Sir_Alex
mahowik:

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

Я когда говорил про FFT, в общем то и имел ввиду VibAnalyzer. Но я хотел бы его расширить. Что бы можно было на ходу менять фильтры и видеть результат. Ну и как дополнение, возможность управлять движками с пульта.

mahowik
rual:

На самом деле всё связано со всем Ща попробую объяснить, берём данные гиры, которая формирует их с частотой 200Гц, а мы получаем и обрабатываем их с частотой 50Гц. Получается мы получаем только каждый 4й отсчёт. Что мы получим при интегрировании? Мы каждый раз пропускаем 3и отсчёта в течении которых может быть “горбик”, либо “провал”. Соответственно в первом случае при интегрировании мы получим “недокрут”, в последнем “перекрут”. А может быть ещё хуже, допустим гира дает гармонический сигнал кратный частоте обработки, и мы можем в данном случае получить попадание либо в максимумы, либо в минимумы. В первом случае будет постояное вращение в одну сторону, в последнем в другую, а на самом деле имеется гармоническая вибрация со средней линией в нуле. Более сложные ситуации сами себе нафантазируйте (например частоты биений). Т.е. чтобы правильно интегрировать сигнал, нам нужна его полная форма.

ну вот чтобы не было проскоков по гире, ставим ее внутр. лпф на частоту как мин в два раза ниже частоты интегрирoвания… тогда и Котельников улыбается и сигнал полной формы 😃

rual:

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

если делать позиционирование по акселю (с коррекцией по гпс), то и для горизонта важно…

Sir_Alex:

Я когда говорил про FFT, в общем то и имел ввиду VibAnalyzer. Но я хотел бы его расширить. Что бы можно было на ходу менять фильтры и видеть результат. Ну и как дополнение, возможность управлять движками с пульта.

та вроде как стенд уже и не нужен… т.е. все уже понятно что куда прописать 😃

rual:

Да, это без калибровки. Особо не вижу в этом смысла, по кругу расхождение в максимумах единицы градусов.

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

HikeR

действительно, понаписали.

rual:

берём данные гиры, которая формирует их с частотой 200Гц, а мы получаем и обрабатываем их с частотой 50Гц.

по-моему, это поиск проблем на ровном месте. зачем принудительно снижать частоту опроса и попадать на т.н. “aliasing”? читаем 4 значения подряд, усредняем или еще как фильруем, на выходе те же 50Гц, но уже куда более достоверные. если железка слабая, то накой тогда такие частоты опроса, которые она (железка) не может обработать…

ради интереса пробежался по всяким арду и мегапилотам, блин, почти везде именно такая картина: опрашиваем датчики с частотой F, реально берем показания с частотой <F/2, затем обычно стоит туча фильтров и сглаживаний.

под рукой какой-то старый код из CC, читает весь накопившийся буфер акселя (который заведен на 3.2кГц, вроде бы, цикла хватает на 6-7 считываний):

	do {
		i++;
		samples_remaining = PIOS_ADXL345_Read(&accel_data);
		x +=  accel_data.x;
		y += -accel_data.y;
		z += -accel_data.z;
	} while ( (i < 32) && (samples_remaining > 0) );

	float accel[3] = {(float) x / i, (float) y / i, (float) z / i};

более с этими цифрами не делается ничего.

mahowik:

чтобы не было проскоков по гире, ставим ее внутр. лпф на частоту как мин в два раза ниже частоты интегрирoвания

а если есть только гира без встроенной обработки, есть какие-либо реализации “на посмотреть”?

mahowik
HikeR:

действительно, понаписали

ну так не флуд всякий, а по делу! 😃 а вы расстраиваетесь…

HikeR:

а если есть только гира без встроенной обработки, есть какие-либо реализации “на посмотреть”?

вопрос про аналоговые гиры?

HikeR
mahowik:

вопрос про аналоговые гиры?

не, городить фильтры на ОУ мне сейчас некстати ;)
есть набор данных (вернее несколько) с датчиков в покое, есть старые wav-ники с “записанными” вибрациями, есть на худой конец генератор всяко-разного шума. вот и хочется глянуть пошагово, как и зачем все эти цифровые LPF/HPF-ы работают.

p.s.
вобщем-то, вопросы снимаются, надыбал книжку “Стивен Смит. Цифровая обработка сигналов”, теории и абстракций минимум, практических примеров достаточно, как раз для моего уровня ;)