Точность акселерометра Android (инерциальная навигация)

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

Для начала я установил телефон на плоскую поверхность и пробовал 1000 показаний акселерометра в направлениях X и Y (параллельно таблице, поэтому в этих направлениях не было силы тяжести). Затем я усреднил эти показания и использовал это значение для калибровки телефона (вычитая это значение из каждого последующего чтения).

Затем я протестировал систему, снова разместив ее на столе и проверив 5000 показаний акселерометра в направлениях X и Y. Я ожидал бы, учитывая калибровку, что эти ускорения должны составлять до 0 (примерно) в каждом направлении. Однако это не так, и полное ускорение более 5000 итераций нигде не приближается к 0 (усредняя около 10 на каждой оси).

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

Является ли это просто примером того, как неверные показания акселерометра находятся на мобильном телефоне (HTC Desire S), или это более вероятно, что я сделал некоторые ошибки в моем кодировании?

86
задан 20 окт. '11 в 1:40
источник поделиться
5 ответов

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

Вот объяснение, почему (Google Tech Talk) на 23:20. Я настоятельно рекомендую это видео.

Это не шум акселерометра, вызывающий проблему, но гироскоп белого шума, см. подраздел 6.2.3 "Распространение ошибок". (Кстати, вам понадобятся гироскопы тоже.)

Что касается внутреннего позиционирования, я нашел это полезным:

Внутренняя локализация и отслеживание на основе RSSI с использованием Sigma-Point Kalman Smoothers

Отслеживание пешеходов с инерционными датчиками, установленными на обуви

Повышение производительности шагомеров с использованием одного акселерометра

Я понятия не имею, как эти методы будут работать в реальных приложениях или как превратить их в хорошее приложение для Android.

Аналогичный вопрос .

UPDATE:

По-видимому, существует более новая версия, чем приведенная выше Оливер Дж. Вудман, "Введение в инерциальную навигацию", его кандидатскую диссертацию:

Локализация пешеходов для внутренней среды

110
ответ дан 20 окт. '11 в 15:35
источник

Я просто задумываюсь вслух, и я еще не играл с API акселерометра андроида, так что несите меня.

Прежде всего, традиционно для навигации с акселерометров вам понадобится 6-осевой акселерометр. Вам нужны ускорения в X, Y и Z, но также и вращения Xr, Yr и Zr. Без данных вращения у вас недостаточно данных для установки вектора, если вы не предполагаете, что устройство никогда не изменяет его отношение, что было бы довольно ограничивающим. В любом случае, никто не читает TOS.

О, и вы знаете, что INS дрейфует с вращением земли, верно? Так что это тоже. Через час вы загадочно взбираетесь по склону 15 ° в космос. Предположим, что у вас есть INS, способный поддерживать такое местоположение долгое время, которое телефон еще не может сделать.

Лучший способ использовать акселерометры - даже с 3-осевым акселерометром - для навигации - это привязка к GPS для калибровки INS, когда это возможно. Где GPS падает, INS хорошо дополняет. GPS может внезапно выстрелить в 3 квартала, потому что вы слишком близко подошли к дереву. INS не велик, но, по крайней мере, он знает, что вы не пострадали от метеора.

Что вы можете сделать, это зарегистрировать данные акселерометра телефонов и многое другое. Как и недели. Сравните это с хорошими (я имею в виду действительно хорошими) данными GPS и использую datamining, чтобы установить корреляцию трендов между данными акселерометра и известными данными GPS. (Pro tip: вы хотите проверить альманах GPS в течение нескольких дней с хорошей геометрией и множеством спутников. В некоторые дни у вас может быть только 4 спутника, и этого недостаточно). Что вы можете сделать, так это найти, когда человек идет со своим телефоном в кармане, данные акселерометра регистрируют очень специфический шаблон. Основываясь на данных, вы устанавливаете профиль для этого устройства с этим пользователем и какую скорость представляет собой модель, когда у нее есть данные GPS, чтобы идти вместе с ней. Вы должны иметь возможность обнаруживать повороты, подниматься по лестнице, садиться (калибровка до 0 скоростей!) И различные другие задачи. То, как телефон удерживается, должен быть полностью обработан как отдельные данные. Я чувствую запах нейронной сети, используемой для интеллектуального анализа данных. Другими словами, что-то слепое, чем означают входные данные. Алгоритм будет искать только тенденции в шаблонах и не обращать внимания на фактические измерения INS. Все, что он знал, это historically, when this pattern occurs, the device is traveling and 2.72 m/s X, 0.17m/s Y, 0.01m/s Z, so the device must be doing that now. И это переместило бы кусок вперед соответственно. Важно, чтобы он был полностью слепым, потому что просто положить телефон в карман можно ориентировать в одной из 4 разных ориентаций и 8, если вы переключаете карманы. И есть много способов удержать телефон. Мы говорим здесь много данных.

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

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

Если вы использовали GPS для начальной базовой линии, часть проблемы есть GPS, как правило, имеет свои собственные миграции с течением времени, но они являются неповторяющимися ошибками. Сядьте в приемник в одном месте и зарегистрируйте данные. Если исправлений WAAS нет, вы можете легко получить исправления местоположения, перемещаясь в случайных направлениях на 100 футов вокруг вас. С WAAS, возможно, до 6 футов. На самом деле вам может быть повезло с системой RTK с субметром на рюкзаке, чтобы как минимум получить алгоритм ANN.

У вас все еще будет дрейф angular с помощью INS с использованием моего метода. Это проблема. Но если вы зашли так далеко, чтобы построить ANN, чтобы налить данные GPS и INS за несколько недель среди русских пользователей, и на самом деле это работало до сих пор, вы, очевидно, не против больших данных. Продолжайте движение по этому пути и используйте больше данных, чтобы помочь разрешить дрейф angular: Люди - это привычки. Мы в значительной степени делаем те же вещи, что и прогулка по тротуарам, через двери, вверх по лестнице и не делаем сумасшедших вещей, таких как прогулки по автострадам, через стены или с балконов.

Итак, скажем, вы берете страницу из Большого Брата и начинаете хранить данные о том, куда идут люди. Вы можете начать картографирование, где люди будут ходить пешком. Это довольно уверенная ставка, что, если пользователь начнет подниматься по лестнице, она на той же лестнице, что и перед ней. После 1000 итераций и некоторых настроек наименьших квадратов ваша база данных в значительной степени знает, где эти лестницы с большой точностью. Теперь вы можете исправить angular дрейф и местоположение, когда человек начинает ходить. Когда она ударяет по этой лестнице или выключит этот зал или движется по тротуару, любой дрифт может быть исправлен. Ваша база данных будет содержать сектора, взвешенные по вероятности того, что человек будет ходить туда или что этот пользователь ходил туда в прошлом. Пространственные базы данных оптимизированы для этого, используя divide and conquer, чтобы выделять только те секторы, которые имеют смысл. Это было бы похоже на те проекты MIT, где робот, оснащенный лазером, начинает черным изображением и рисует лабиринт в памяти, делая каждый поворот, освещающий, где находятся все стены.

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

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

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

16
ответ дан 28 дек. '13 в 12:09
источник

Я не уверен, насколько велико ваше смещение, потому что вы забыли включить единицы. ( "Около 10 на каждой оси" не говорит много.: P) Тем не менее, это все еще возможно из-за неточности в оборудовании.

Акселерометр отлично подходит для таких вещей, как определение ориентации телефона относительно силы тяжести или обнаружение жестов (тряска или наталкивание телефона и т.д.).

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

8
ответ дан 20 окт. '11 в 2:22
источник

Акселерометр Android является цифровым, он пробуждает ускорение с использованием того же количества "ведер", скажем, имеется 256 ведер, а акселерометр способен измерять от -2 до +2 г. Это означает, что ваш результат будет квантован в терминах этих "ведер" и будет прыгать вокруг некоторого набора значений.

Чтобы откалибровать акселерометр андроида, вам нужно пробовать намного больше 1000 пунктов и найти "режим", вокруг которого акселерометр колеблется. Затем найдите количество цифровых точек на том, сколько выходных колебаний и использует их для фильтрации.

Я рекомендую фильтрацию Калмана, когда вы получите режим и +/- колебания.

6
ответ дан 31 мая '12 в 15:31
источник

Я понимаю, что это довольно старо, но проблема не решена в ЛЮБОЙ из ответов.

То, что вы видите, это линейное ускорение устройства, включая эффект силы тяжести. Если вы положите телефон на плоскую поверхность, датчик сообщит об ускорении из-за силы тяжести, которое составляет примерно 9.80665 m/s2, и, следовательно, даст 10, которые вы видите. Датчики являются неточными, но они НЕ ТО, ЧТО неточно! См. здесь для некоторых полезных ссылок и информации о датчике, который вы можете после.

5
ответ дан 03 марта '13 в 23:49
источник

Другие вопросы по меткам или Задайте вопрос