Точность акселерометра андроида (инерциальная навигация)
Я изучал реализацию инерциальной навигационной системы для телефона Android, который я понимаю, трудно, учитывая точность акселерометра и постоянное колебание показаний.
для начала я установил телефон на плоскую поверхность и отсчитал 1000 показаний акселерометра в направлениях X и Y (параллельно таблице, поэтому гравитация не действует в этих направлениях). Затем я усреднил эти показания и использовал это значение для калибровки телефона (вычитая это значение из каждого последующее чтение).
затем я протестировал систему, снова поместив ее на стол и отобрав 5000 показаний акселерометра в направлениях X и Y. Я ожидал бы, учитывая калибровку, что эти ускорения должны составлять до 0 (примерно) в каждом направлении. Однако, это не так, и общее ускорение за 5000 итераций далеко не 0 (в среднем около 10 на каждой оси).
Я понимаю, что не видя кода, это может быть трудно ответить, но в более общем смысле...
Это просто пример того, насколько неточны показания акселерометра на мобильном телефоне (HTC Desire S), или это более вероятно, что я сделал некоторые ошибки в моем кодировании?
6 ответов:
вы получаете положение, интегрируя линейное ускорение дважды, но ошибки-это ужасно. Это бесполезно на практике.
здесь объяснение, почему (Google Tech Talk) at 23:20. Я очень рекомендую это видео.
Это не шум акселерометра, который вызывает проблему, но гироскоп белый шум см. подраздел 6.2.3 распространения ошибок. (Кстати, вам понадобятся гироскопы тоже.)
Что касается внутреннего позиционирования, я нашел эти полезные:
пупс крытый локализации и слежения с использованием Сигма-точки Кальман Сглаживатели
отслеживание пешеходов с помощью инерциальных датчиков, установленных на обуви
повышение производительности шагомеров с помощью одного акселерометра
Я понятия не имею, как эти методы будут работать в реальных приложениях или как их превратить в хорошее приложение для Android.
аналогичный вопрос этой.
обновление:
по-видимому, существует более новая версия, чем выше Оливер Дж. Вудман, "введение в инерциальную навигацию", его кандидатская диссертация:
Я просто думаю вслух, и я еще не играл с API акселерометра android, так что потерпите меня.
прежде всего, традиционно, чтобы получить навигацию от акселерометров вам понадобится 6-осевой акселерометр. Вам нужны ускорения в X, Y и Z, а также вращения Xr, Yr и Zr. Без данных вращения у вас недостаточно данных для установления вектора, если вы не предполагаете, что устройство никогда не меняет свое отношение, что было бы довольно ограничивающим. Никто не читает Во всяком случае, ТОС.
О, и вы знаете, что ИНС дрейфует с вращением Земли, верно? Так что и это тоже. Один час спустя, и вы таинственно поднимаетесь по склону 15° в космос. Это предполагает, что у вас есть модули, способные поддерживать местоположение так долго, что телефон еще не может сделать.
лучший способ использовать акселерометры-даже с 3-осевым акселерометром-для навигации было бы связать в GPS для калибровки INS, когда это возможно. Где GPS не хватает, INS комплименты приятно. GPS может внезапно застрелить вас в 3 кварталах, потому что вы слишком близко подошли к дереву. INS не очень хорош, но по крайней мере он знает, что вы не попали под метеорит.
что вы могли бы сделать, это войти в данные акселерометра телефонов, и многое из этого. Как недели стоят. Сравните его с хорошими (я имею в виду действительно хорошие) данными GPS и используйте datamining для установления корреляции тенденций между данными акселерометра и известными данными GPS. (Pro совет: Вы хотите, чтобы проверить GPS альманах в течение нескольких дней с хорошим геометрия и много спутников. В некоторые дни у вас может быть только 4 спутника, и этого недостаточно) то, что вы можете сделать, это найти, что когда человек идет со своим телефоном в кармане, данные акселерометра регистрируют очень специфический шаблон. На основе datamining вы устанавливаете профиль для этого устройства с этим пользователем и какую скорость этот шаблон представляет, когда у него есть данные 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 футов вокруг вас. С Ваасом, может быть, до 6 футов. Вы могли бы на самом деле имейте больше удачи с системой суб-метра RTK на рюкзаке, чтобы по крайней мере получить алгоритм Энн.
вы все равно будете иметь угловой дрейф с INS, используя мой метод. Это проблема. Но, если вы зашли так далеко, чтобы построить ANN, чтобы вылить в течение нескольких недель данные GPS и INS среди n пользователей, и на самом деле он работал до этого момента, вы, очевидно, не возражаете против больших данных до сих пор. Продолжайте идти по этому пути и использовать больше данных, чтобы помочь решить угловой дрейф: люди-существа привычки. Мы в значительной степени делать то же самое, как ходить по тротуарам, через двери, вверх по лестнице, и не делать сумасшедшие вещи, как ходить по автострадам, через стены или с балконов.
Итак, предположим, вы берете страницу от Большого Брата и начинаете хранить данные о том, куда идут люди. Вы можете начать отображение, где люди должны были бы ходить. Это довольно уверенная ставка, что если пользователь начинает подниматься по лестнице, она находится на том же основании лестницы, что и человек до нее. После 1000 итерации и некоторые корректировки наименьших квадратов, ваша база данных в значительной степени знает, где находятся эти лестницы с большой точностью. Теперь вы можете исправить угловой дрейф и местоположение, как человек начинает ходить. Когда она попадает на эту лестницу, или поворачивает в тот коридор, или идет по тротуару, любой дрейф может быть исправлен. Ваша база данных будет содержать сектора, которые взвешиваются по вероятности того, что человек будет ходить туда, или что этот пользователь ходил туда в прошлом. Пространственные базы данных оптимизированы для это с помощью
divide and conquerдля выделения только значимых секторов. Это было бы похоже на те проекты MIT, где оснащенный лазером робот начинает с черного изображения и рисует лабиринт в памяти, делая каждый поворот, освещая, где все стены.области с высоким трафиком получат более высокие веса, а области, где никто никогда не получал 0 вес. Более высокие зоны движения имеют более высокое разрешение. Вы в конечном итоге с картой везде кто-то был и использовать его в качестве модели прогнозирования.
Я не удивлюсь, если вы сможете определить, какое место человек занял в театре, используя этот метод. Учитывая достаточное количество пользователей, идущих в театр, и достаточное разрешение, у вас будет отображение данных каждой строки театра и насколько широка каждая строка. Чем больше людей посещают место, тем выше точность, с которой вы можете предсказать, что этот человек находится.
кроме того, я настоятельно рекомендую вам получить (бесплатную) подписку на GPS World журнал если вы заинтересованы в современных исследованиях в такого рода вещи. Каждый месяц я выхожу с ним на улицу.
Я не уверен, насколько велико ваше смещение, потому что вы забыли включить единицы. ("Около 10 на каждой оси" не говорит много. :P) тем не менее, это все еще вероятно из-за неточности в аппаратном обеспечении.
акселерометр отлично подходит для таких вещей, как определение ориентации телефона относительно силы тяжести или обнаружение жестов (встряхивание или удар телефона и т. д.)
однако, пытаясь сделать мертвый расчет с помощью акселерометра будет подвергать вас много соединения ошибка. В противном случае акселерометр должен быть безумно точным, и это не общий случай использования, поэтому я сомневаюсь, что производители оборудования оптимизируют его.
акселерометр Android является цифровым, он пробует ускорение с использованием того же количества "ведер", допустим, есть 256 ведер, и акселерометр способен воспринимать от-2g до +2g. это означает, что ваш выход будет квантоваться с точки зрения этих "ведер" и будет прыгать вокруг некоторого набора значений.
для калибровки акселерометра android, вам нужно попробовать намного больше, чем 1000 точек и найти "режим", вокруг которого акселерометр колеблется. Потом найти количество цифровых точек на сколько выход колеблется и использовать его для фильтрации.
Я рекомендую фильтрацию Калмана, как только вы получите режим и +/- колебания.
Я понимаю, что это довольно старый, но вопрос под рукой не рассматривается ни в одном из приведенных ответов.
то, что вы видите, - это линейное ускорение устройства, включая эффект гравитации. Если вы положите телефон на плоскую поверхность, датчик сообщит об ускорении из-за силы тяжести, которая составляет примерно
9.80665 m/s2, следовательно, давая 10 вы видите. Датчики неточны, но они не настолько неточны! Смотрите здесь для некоторых полезных ссылок и информация о датчике, который вам может понадобиться.
вы делаете предположение, что показания акселерометра в направлениях X и Y, которые в этом случае являются полностью аппаратным шумом, будут формировать нормальное распределение вокруг вашего среднего. По-видимому, это не так.
одна вещь, которую вы можете попробовать, это построить эти значения на графике и посмотреть, появляется ли какой-либо шаблон. Если нет, то шум является статистически случайным и не может быть откалиброван против-по крайней мере, для вашего конкретного оборудования телефона.
Comments