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

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

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

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

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

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

Ответ 1

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

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

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

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

Внутренняя локализация и отслеживание на основе RSSI с использованием сигма-точечных сглаживателей Калмана

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

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

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

Похожий вопрос такой.

ОБНОВИТЬ:

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

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

Ответ 2

Я просто задумываюсь вслух, и я еще не играл с 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, если вы заинтересованы в текущих исследованиях такого рода вещей. Каждый месяц я выхожу с ним.

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

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