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


109

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

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

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

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

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


1
webvr-polyfill - отличный источник вдохновения: github.com/borismus/webvr-polyfill/tree/master/src посмотрите, как они заполняют датчик VR, используя данные акселерометра: github.com/borismus/webvr-polyfill/blob/master / src /…
SC

Вопрос, который также учитывает гироскоп: stackoverflow.com/questions/8264518/…
Чиро Сантилли 郝海东 冠状 病 六四 事件 法轮功

Ответы:


128

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

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

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

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

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

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

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

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

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

ОБНОВИТЬ:

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

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


2
Я понимаю, что это было давно, но у меня есть дополнительный вопрос. Камера в Android JB имеет функцию «панорамы», которая позволяет делать панорамные снимки, перемещая телефон, либо поворачивая его, либо перемещая линейно по одной оси. Для этого он должен относительно точно отслеживать положение телефона - по крайней мере, лучше, чем ошибка 20 см / с, упомянутая в видео, на которое ссылается этот ответ. Как это сделать? Есть ли способ улучшить качество инерциального отслеживания? Или он использует умную обработку изображений, чтобы сделать это, используя только камеру?
Tom

1
@Tom Я считаю, что последнее, телефон объединяет фотографии исключительно с помощью алгоритмов обработки изображений. Что заставляет вас думать, что телефон должен отслеживать свое положение для создания панорамы? Это можно было делать обычными камерами еще в 90-е, и понятно, что тогда у нас в камерах не было акселерометров :) Конечно, на обычных ПК снимки собирались. Но позиция для этого не нужна, достаточно алгоритмов обработки изображений. Надеюсь это поможет.
Али

Это сильно отличается от старой работы «вручную сделай несколько снимков, а затем сшьешь их позже». Он каким-то образом отслеживает свое положение в режиме реального времени. Это немного сложно объяснить, не демонстрируя этого. Вам не нужно делать снимки вручную - телефон решает, когда вы переместитесь достаточно далеко, чтобы сделать еще один снимок. Пока вы делаете снимки, внизу отображается небольшая панель с предварительным просмотром панорамы. Если вы направите камеру слишком далеко вниз (например), она начнет пищать и покажет стрелку вверх, чтобы сообщить вам, что вам нужно переместить ее обратно вверх.
Tom

2
На самом деле, похоже, что он использует обработку изображений - запуск панорамы, а затем размахивание рукой перед камерой, очень сильно запутает ее систему отслеживания положения!
Tom

@ Том ОК. Я думаю, что он в основном использует обработку изображений (как показывает ваш последний комментарий), но, вероятно, он будет сочетаться с отслеживанием ориентации (но не положения).
Али

19

Я просто думаю вслух, и я еще не играл с 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.

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

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

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

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

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


«было бы привязано к GPS для калибровки INS, когда это возможно. Там, где GPS не справляется, INS хорошо дополняет». Насколько я понимаю, это то, для чего нужна фильтрация Калмана. Он сочетает в себе сильные стороны каждого метода, чтобы нейтрализовать недостатки другого
endolith

8

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

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

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


Спасибо за ответ. Акселерометры показывают около -0,8 мс ^ -2 по осям X и Y в неподвижном состоянии, поэтому я использовал это в качестве смещения. Под битом «Около 10» я имел в виду, что более 5000 итераций, суммирование каждого из ускорений на одной оси от датчика не составило примерно 0 мс ^ -2 (как если бы оно колебалось равномерно выше и ниже смещения значение), но вместо этого имело тенденцию регистрировать ускорение больше в одном направлении, что после двойного интегрирования для определения положения сработало, как телефон, перемещающийся на 3 метра в минуту.
woodstock365

+1 за использование авиационного навигационного термина «мертвая расплата». Хотя мертвая расплата больше подходит для навигации с помощью камеры, чем ИНС.
RyanJMcGowan

7

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

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

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


1
Искал методы калибровки. Кажется, ваше предложение - это то, что мне нужно. Мне просто нужно подтвердить. Как только я найду режим, скажите, что он равен 0,5. Я не получил «Затем найдите количество цифровых точек по тому, насколько колеблется выходной сигнал, и используйте это для своей фильтрации». Не могли бы вы подробнее рассказать об этом.
Назерке

1
Допустим, ваш акселерометр имеет 256 точек вывода и колеблется на 0,015 м / с ^ 2 между показаниями. Когда вы кладете устройство на стол, выходная мощность может колебаться даже кратно 0,015 м / с ^ 2. Допустим, вы получили показание 0 +/- (X * 0,015). Вам нужно найти X (это будет четное число). Например, мой X может быть 3. В этом случае я бы проигнорировал изменения показаний акселерометра менее 0,045 м / с ^ 2
Алекс Стоун

так что акселерометры телефонов Android еще не так хороши .. правильно?
Techsin

4

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

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


17
Нет - я думаю, вы неправильно прочитали вопрос: «... показания в направлениях X и Y (параллельно таблице, поэтому в этих направлениях не действует сила тяжести)». 9,8 / с2 будет по оси Z.
teapot7

0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.