Я искал возможность реализовать инерциальную систему навигации для телефона Android, что, как я понимаю, сложно из-за точности акселерометра и постоянных колебаний показаний.
Для начала я положил телефон на плоскую поверхность и сделал выборку 1000 показаний акселерометра в направлениях X и Y (параллельно столу, поэтому в этих направлениях гравитация не действует). Затем я усреднил эти показания и использовал это значение для калибровки телефона (вычитая это значение из каждого последующего чтения).
Затем я протестировал систему, снова поместив ее на стол и сняв 5000 показаний акселерометра в направлениях X и Y. Я ожидал, учитывая калибровку, что эти ускорения в сумме должны составить 0 (примерно) в каждом направлении. Однако это не так, и общее ускорение за 5000 итераций далеко не 0 (в среднем около 10 по каждой оси).
Я понимаю, что не видя своего кода, на это может быть трудно ответить, но в более общем смысле ...
Является ли это просто примером того, насколько неточны показания акселерометра на мобильном телефоне (HTC Desire S), или более вероятно, что я допустил некоторые ошибки при кодировании?
источник
Ответы:
Вы получаете положение, дважды интегрировав линейное ускорение, но ошибка ужасная. На практике это бесполезно.
Вот объяснение, почему (Google Tech Talk) в 23:20 . Я очень рекомендую это видео.
Причиной проблемы является не шум акселерометра, а белый шум гироскопа , см. Подраздел 6.2.3 Распространение ошибок. (Кстати, гироскопы вам тоже понадобятся.)
Что касается размещения в помещении, я нашел их полезными:
Локализация и отслеживание внутри помещений на основе RSSI с использованием сглаживающих устройств Калмана по сигма-точке
Отслеживание пешеходов с помощью инерциальных датчиков, устанавливаемых на башмак
Повышение эффективности шагомеров с помощью одного акселерометра
Я понятия не имею, как эти методы будут работать в реальных приложениях или как превратить их в красивое приложение для Android.
Аналогичный вопрос такой .
ОБНОВИТЬ:
По всей видимости, существует более новая версия, чем вышеприведенная диссертация Оливера Дж. Вудмана «Введение в инерциальную навигацию», его докторская диссертация:
Пешеходная локализация для помещений
источник
Я просто думаю вслух, и я еще не играл с 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, если вы заинтересованы в текущих исследованиях такого рода. Каждый месяц я увлекаюсь этим.
источник
Я не уверен, насколько велико ваше смещение, потому что вы забыли указать единицы измерения. («Около 10 на каждой оси» мало что говорит.: P) Тем не менее, это все еще вероятно из-за неточности в оборудовании.
Акселерометр подходит для таких вещей, как определение ориентации телефона относительно силы тяжести или обнаружение жестов (тряска или удары телефоном и т. Д.)
Однако попытка произвести точный расчет с помощью акселерометра приведет к множеству сложных ошибок. В противном случае акселерометр должен был бы быть безумно точным, и это не обычный вариант использования, поэтому я сомневаюсь, что производители оборудования оптимизируют его.
источник
Акселерометр Android является цифровым, он измеряет ускорение с использованием того же количества «ведер», допустим, их 256, и акселерометр способен определять от -2g до +2g. Это означает, что ваш вывод будет квантован в терминах этих «корзин» и будет прыгать по некоторому набору значений.
Чтобы откалибровать акселерометр Android, вам нужно выбрать более 1000 точек и найти «режим», вокруг которого колеблется акселерометр. Затем найдите количество цифровых точек по тому, насколько колеблется выходной сигнал, и используйте это для своей фильтрации.
Я рекомендую фильтрацию Калмана, как только вы получите режим и +/- колебания.
источник
Я понимаю, что это довольно давно, но данная проблема не решена ни в одном из приведенных ответов.
Вы видите линейное ускорение устройства, включая эффект силы тяжести. Если вы положите телефон на плоскую поверхность, датчик сообщит об ускорении силы тяжести, которое приблизительно равно
9.80665 m/s2
10, что вы видите. Датчики неточные, но они не НАСТОЛЬКО неточные! Смотрите здесь для некоторых полезных ссылок и информации о датчике может быть после.источник
Вы делаете предположение, что показания акселерометра в направлениях X и Y, которые в данном случае являются полностью аппаратным шумом, будут иметь нормальное распределение вокруг вашего среднего значения. Видимо, дело не в этом.
Вы можете попробовать нанести эти значения на график и посмотреть, проявляется ли какая-либо закономерность. В противном случае шум является статистически случайным и не может быть откалиброван - по крайней мере, для вашего конкретного оборудования телефона.
источник