Точность акселерометра Android (Инерциальная навигация) - PullRequest
105 голосов
/ 20 октября 2011

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

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

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

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

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

Ответы [ 6 ]

122 голосов
/ 20 октября 2011

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

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

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

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

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

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

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

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

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

UPDATE:

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

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

19 голосов
/ 28 декабря 2013

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

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

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

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

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

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

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

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

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

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

8 голосов
/ 20 октября 2011

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

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

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

7 голосов
/ 31 мая 2012

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

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

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

4 голосов
/ 04 марта 2013

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

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

0 голосов
/ 17 апреля 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...