Получение положения с помощью акселерометра на телефоне Android

Я знаю, что интегрирование ускорения дважды даст мне положение (ускорение -> скорость -> положение), но как я могу все это сделать, когда все, что у меня есть, это набор точек данных (например: 1 секунда = несколько # м/с ^2); как я могу взять эти точки данных и интегрировать их?

Это как-то связано с численным интегрированием ?

Да, безусловно: чистая интеграция данных опасна по причинам, изложенным в моем ответе и практически проиллюстрированным ответом Джорджа Гордона.

Ответы (3)

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

То, что вы будете конструировать, — это инерциальная навигационная система (ИНС). Для этого требуются очень точные инструменты, такие как те, которые вы найдете в INS, используемых в военных и других самолетах. Точная INS намного больше, чем вы могли бы поместиться в смартфоне — даже в тех смехотворно больших, которые они продают в наши дни!

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

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

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

Чтобы проиллюстрировать далее: любой общий алгоритм обработки данных, применяемый к временному ряду, часто означает, что вы эффективно вычисляете свой результат с помощью рекуррентного отношения; в к т час шаг мы оцениваем наш "результат" Д ( к ) из наших необработанных данных Икс ( к ) где Икс и Д обычно являются векторами-столбцами:

(1) Д ( к + 1 ) "=" ф ( Д ( к ) , Икс ( к ) )

где ф : р Н × р Н р Н некоторая общая нелинейная функция. На самом деле есть шум Н ( к ) добавляется к необработанным данным, поэтому вместо этого вы вычисляете:

(2) Д ~ ( к + 1 ) "=" ф ( Д ~ ( к ) , Икс ( к ) + Н ( к ) )

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

(3) Д ( к + 1 ) "=" А Д ( к ) + Б Икс ( к )

где А является квадратной матрицей, каждое собственное значение которой лежит строго внутри единичного круга на комплексной плоскости, то дисперсия ошибки равна Н ~ Т С Т С Н ~ где

(4) С "=" Б + А Б + А 2 Б + А 3 Б +

и Н ~ - вектор стандартных отклонений шума, так что дисперсия сходится к конечному значению Н ~ Т Б Т ( ( я г А ) 1 ) Т ( я г А ) 1 Б Н ~ . Нам НИКОГДА не нужно повторно калибровать нашу оценку в этом случае, если мы довольны этой ограниченной дисперсией.

Но в вашем случае это не так. Вы выполняете двойную интеграцию. Ваши уравнения состояния, дискретизированные, таковы:

(5) в ( к ) "=" в ( к 1 ) + а ( к ) Δ Икс ( к ) "=" Икс ( к 1 ) + в ( к ) Δ

где а , в , Икс являются, естественно, ускорение, скорость и положение и Δ ваш интервал дискретизации. а ( к ) ваши «необработанные данные», а ваша оценка такая же, как в уравнении (3) с А "=" я г и Б ( к ) "=" ( 1 1 ) Δ а ( к ) . Видно, что ряд (4) неограниченно растет, отсюда и необходимость повторной калибровки через равные промежутки времени.

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