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

mataor

эх блин… приведу еще пример - маховий прошивка, там как раз основное по расчету высоты - аксель, лично у меня не раз было что держал одну высоту по 10-15 мин, причем не в висении, а в полете

oleg70
mataor:

маховий прошивка, там как раз основное по расчету высоты - аксель

Нельзя ли на этот кусочек кода взглянуть ?? (для анализа)

HikeR
oleg70:

за ускорение по оси Z принимается разница из “сырых” данных Z акселя и вектора G рассчитанного IMU

а IMU-то откуда данные берет? интегрирует гиру и исправляет ее дрейф показаниями акселя, которому можно доверять только когда он находится в покое.

в OP когда-то мелькала эта фишка: гира интегрируется как обычно, но чем больше цифра с акселя отличается от 1G (в любую сторону), тем меньше он участвует в коррекции гиры. образно говоря, введен динамический “коэффициент доверия” примерно так:

len = accel.lenght()

// 0 <= k <= 1
if (len > G)
    k = G / len
else
    k = len / G

result.x = gyro_integrated.x*(1-k) + accel.x*k
// и так далее
oleg70:

Точнее сказать - “шум”

шум так шум.

смотрю в даташит на MS5611, 24 бита, диапазон 10…1200 мбар, считаю разрешение — 0.000071 мбар.
они пишут сначала 0.0024, затем через строчку 0.012, как так?

mataor
oleg70:

Нельзя ли на этот кусочек кода взглянуть ?? (для анализа)

// apply CF with dynamic coefficient to keep the calculated altitude near real baro/sonar altitude
uint16_t altDiff = abs(alt - EstAlt);
dynK = 0.015f + ( ((altDiff > 100) && (EstAlt > 0)) ? (min(altDiff - 100, 500)/10000.0f) : 0.0f );
alt = alt * (1.0f - dynK) + sensorAlt * dynK;
это финишный кусок

oleg70
HikeR:

они пишут сначала 0.0024, затем через строчку 0.012, как так?

Эт надо еще и в высоту пересчитывать, а там логарифмы и прочее…(лень) , короче, точность MS5611 меньше метра, это общепризнанный экспериментально доказанный факт, в отличие например от BMP85… (тут погрубее)

HikeR:

а IMU-то откуда данные берет?

В нашем случае это не важно, главное что на выходе мы имеем “приличный” вектор G (“гира рулит”), который и нужно вычесть из оси Z акселя… Да, так и получается, сначала Z-acs участвует в коррекции гиры в IMU, а потом из нее же и вычитается полученное G…

mataor:

baro/sonar

Смущает сие… (мы о баро/аксель ведем речь)

mataor
oleg70:

Смущает сие… (мы о баро/аксель ведем речь)

не смущайтесь - сие только при включении сонара, который подмешивается к баро

oleg70
mataor:

это финишный кусок

Из представленного кода понял, что как раз используется плавающий коэфициент с предсказанием и одновременным ограничением диапазона… К сожалению неясно как считается сам “alt” и “EstAlt”…, буду “копать” источники…

oleg70
SergDoc:

GPS в удержании высоты не учавствует

Я так понял (из собственных экспериментов в полете) что GPS надежно и правильно выдает только координаты, остальные показания (высота, азимут, скорость) в разные непонятные промежутки времени могут произвольно скакануть как угодно…, нужно сильно поломать голову чтоб исключить такие ситуации…
Короче придется мне все ж магнитометр то возвращать на плату 😦 - он хотя бы стабильный, наверно замахнусь на BMX055.

SergDoc

Там специально входной шум задан - дабы прицел сбить 😃 точь та же байда что и в курсе…

X-Axis Random Noise: Y-Axis Random Noise: - это шум…

Geniok
SergDoc:

Там специально входной шум задан - дабы прицел сбить 😃 точь та же байда что и в курсе…

X-Axis Random Noise: Y-Axis Random Noise: - это шум…

Ну да, с этим разобрался уже.
Кстати, если в первой матрице вместо 0.2 поставить 0.11, то будут точнее показания.
А вот изменение коэффициентов во 2-й матрице ни на что не влияет, что странно.
Основная проблема со всеми этими фильтрами в том, что не показывается каким образом получить эти самые матрицы. А дают уже готовые по принципу “вот вам матрицы - поиграйтесь с коэффициентами”.
Ну поигрались, а дальше что, как на практике применить, имея конкретные датчики?

Взять тот же курс, который сейчас преподает TUM. В начале курса была надежда на то, что они взяв конкретный аппарат (Ar. Drone) на его примере расскажут как получить мат. модель, как получить матрицы состояний и т.д. А они выдают общую информацию по каждой теме и все.

SergDoc
Geniok:

А вот изменение коэффициентов во 2-й матрице ни на что не влияет

а она не используется

c = [0, 0, 0, 0] ← control vector (not used here)

Geniok
SergDoc:

а она не используется

Тогда понятно, видимо глазами пропустил эту строчку.

SergDoc

Вольный перевод:

Пять матриц были настроены на работу в этой симуляции. А - матрица перехода к глобальным координатам. Эта матрица влияет на вектор измерения. В - это матрица контроля . Эта матрица влияет на векторное управление (неиспользованные в этой симуляции). Н - матрица измерений(координаты скорости). Эта матрица влияет на K (Регулятор Калмана ). Q - является матрицей неопределённостей. Эта матрица подразумевает процесс шума ковариации. R - является матрицей собственных шумов датчиков. Эта матрица означает, погрешность измерения ковариации, на основе количества шума датчика. В данной модели, Q и R являются константами, но в некоторых реализациях фильтра Калмана может корректировать их в процессе выполнения.

вот книжка по которой лекция сделана …informatik.uni-freiburg.de/fig.pdf

mahowik
SergDoc:

вот книжка по которой лекция сделана probabilistic-robotics.inform...urg.de/fig.pdf

промахнулся чутка… это дополнение к книге… саму книгу нужно покупать или “поискать”…

www.probabilistic-robotics.org

Sir_Alex:

Название файла, само за себя говорящее ))))

зря, крутая книга и автор Sebastian Thrun, один из создателей гугло-мобилей…
надеюсь прочту когда нить 😃

upd: один из его курсов кстати www.udacity.com/course/cs271

SergDoc

Зато картинко много, а текста нет )))))

Drinker

Книжки четать тут мало кто станет. Тут код подавай для копипастинга. А потом мегатема рождается типа “Йа все сделал правильно, а чета не летаеть”.