Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

ОБНОВИТЬ:

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

Локализация пешеходов в помещении

Другие советы

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

Прежде всего, традиционно, чтобы получить навигацию от акселерометров, вам понадобится акселерометр с 6 асоми. Вам нужны ускорения в x, y и z, а также ротации XR, YR и Zr. Без данных о вращении у вас недостаточно данных, чтобы установить вектор, если вы не предполагаете, что устройство никогда не меняет его отношение, что было бы довольно ограничивающим. В любом случае, никто не читает TOS.

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

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

То, что вы могли бы сделать, это зарегистрировать данные об акселерометре телефонов и многое из них. Как недели стоит. Сравните его с хорошими (я имею в виду действительно хорошие) данные GPS и используйте данные для установления корреляции тенденций между данными акселерометра и известными данными GPS. (Совет профессионала: вы захотите проверить GPS Almanac в течение нескольких дней с хорошей геометрией и большим количеством спутников. В некоторые дни у вас может быть только 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 футов вокруг вас. С ваасом, может быть, до 6 футов. На самом деле вам может повезло больше повезло с подметрой системой RTK на рюкзаке, чтобы хотя бы снизить алгоритм ANN.

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

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

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

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

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

Я не уверен, насколько здорово ваше смещение, потому что вы забыли включить единицы. («Около 10 на каждой оси» не говорит много.

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

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

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

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

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

Я понимаю, что это довольно старое, но проблема не рассматривается ни в одном из приведенных ответов.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top