0

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

Точно я читаю, Время данных акселерометра (с фиксированным интервалом) каждой регистрации в секундах.

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

Я попробовал метод Эйлера. От начального состояния, такого как:

v0=0.v0=0 Это начальная скорость в нулевое время.

x0=0.x0=0 Это начальное положение в нулевое время.

определить,

deltaT=registrationinterval.deltaT=registrationinterval (в моем случае 0,04s)

затем для каждой регистрации сделал, я делаю:

vi=vi−1+ayi∗deltaT.vi=vi−1+ayi∗deltaT

xi=xi−1+vi∗deltaT.xi=xi−1+vi∗deltaT

где i представляет тока и i-1 прецедент.

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

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

Я также прочитал фильтр Калмана, который может быть применен заранее, чтобы очистить сигнал, может быть решением?

Или мне следует изменить метод интеграции и переключиться на Euler из Runge Kutta? (Последнее, однако, я не имею ни малейшего представления о том, как это можно установить).

Или кто-нибудь знает алгоритм, который может мне помочь?

Здесь есть example данные зарегистрированных, если могут быть полезны:

ответ

0

Оба Эйлера и Рунге-Кутта являются численные интеграторы. Один может быть более точным, чем другой, в зависимости от того, какие типы уравнений вы интегрируете, но оба должны давать одинаковый количественный результат. Если кто-то дает вам все возрастающую скорость, а другой нет, тогда у вас есть ошибка.

Я думаю, что это больше проблема физики, чем проблема программирования.

Из данных видно, что данные по вертикальному акселерометру включают в себя ускорение силы тяжести, которое составляет около 9,8 м/с^2 на поверхности земли. Конечно, ваш автомобиль поддерживается дорогой, поэтому он фактически не ускоряется.

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

Одна вещь, которую вы могли бы сделать, это усреднить первые несколько измерений в качестве базовой линии (которая должна быть близка к 9,8 м/с^2) и вычесть это значение после последующих чтений. Когда автомобиль движется вверх и вниз по холмам, значения датчиков будут меняться в зависимости от базовой линии, и эти различия будут вам интересны.

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