А что у вас за трекер такой? Расскажите подробнее, или ссылка может есть на статью как собрать.
На счет wifi и сотовых вышек я бы тоже посоветовал не пытаться определять трекером координаты по ним, а просто слать вместе с треком журнал наблюдения вышек и точек с ssid, мак-адресами,идентификаторами и уровнями сигнала. Уже на бэкенде как-то превращать это в координаты.
Вообще мне тоже будет в одном пет-проекте нужно такое делать, и трекер мне тоже нужно какой-то разрабатывать будет. Давайте дружить проектами?=)
Я бэкенд-разработчик на питоне и могу помочь с бэком и архитектурой. У меня в телеге такой же ник.
Ещё есть идея брать инфу одометра и угла поворота колес с OBD-2 и пробовать предполагать интегрируя с некоторой точностью траекторию, а потом искать похожие участки на геометрии дорожной сети для детальной локализации в условиях глушения GPS-Глонасс.
Ещё есть идея брать инфу одометра и угла поворота колес с OBD-2 и пробовать предполагать интегрируя с некоторой точностью траекторию
Даже если OBD-2 содержит данные об угле поворота, и даже если будете считывать их каждую миллисекунду... конкретно это - бесперспективняк. Вон, рядом ( Как скомпенсировать отклонение угла при вращении гироскопа? ) человек как раз сражается с акселерометром - так через акселерометр точность в миллиард раз выше будет. Объясняю, почему. Геометрия будет работать против вас. Когда-то давно (лет 40..50 назад) была модная забава - мотородео, автородео. Грубо говоря, на достаточной скорости по внутренней стенке циллиндра можно нарезать круги, держа колёса ровно (поворот на 0 градусов). К чему это я? А к тому, что "вертикальная дорога" - это всего лишь граничный случай; в реальной жизни при ровно выставленных колёсах машина может забирать влево или вправо, в зависимости от рельефа (3d-профиля) дороги. Ровный руль соответствует прямолинейному движению только на идеально горизонтальной дороге (так и быть, отклонением земной поверхности от сферической формы можно пренебречь в этой задаче).
Так что вам перспективнее дружить проектами с человеком с акселерометром (помимо автора данного вопроса), чем вот эту функцию от скорости и угла поворота колёс интегрировать.
Насчёт осылки данных по базовым станциям и SSID на бэкенд - поддерживаю 100%.
hint000, а вот тут удовольствием поспорю с вами. Ничего идеального для описанного применения не нужно. Достаточно очень приблизительно строить геометрию трека. Одометр даёт достаточно хорошую точность. У нас получается от поворота до поворота весьма характерный пробег. даже если кривизна пути будет с погрешностью из-за описанной вами неточности, то на траекторию это не сильно отразится. Уверен, что точности будет достаточно, чтобы находить на карте места, куда "клюшка" уляжется.
Вот смотрите, у нас есть затравочная координата предполагаемого местоположения. Это случайная величина и выражена она в мат-ожидании и дисперсии. Любая подсказка тут будет полезна, она откорректирует мат-ожидание (это точка на карте) и сожмёт дисперсию, но в любом случае это будет размытое пятно вероятности. Вот у нас есть кусок восстановленного трека, сильно неточные показания компаса и карта дорог.
Трек мы пытаемся наложить на дорожную сеть геометрически и считаем какой-нибудь функцией норму совпадения. В этой норме будут участвовать плотность вероятности из размытого пятна исходной гипотезы о местоположении (в худшем случае это центр города и большое градиентное пятно, которое его охватывает слихвой), также на это скалярное поле вероятностей домножатся поля вероятностей по гипотезам, связанным с точками вайфая и сотовых вышек. В итоге будет своеобразная тепловая карта вероятностей.
Допустим мы находим несколько гипотез наложения трека на дорожную сеть с разной степенью достоверности. Наверно имеет смысл применять какой-то релаксационный алгоритм, который будет бросать траектории под разными углами на карту, а те будут "проваливаться" в "рельеф" вероятностей дорожной сети и того самого поля первичных гипотез.
Как только одна гипотеза отрывается по достоверности от других на нужное число сигма, мы её принимаем за рабочую гипотезу, а следующие за ней в рейтинге держим за запасные, чтоб не искать их заново если рабочая окажется ошибочной.
В итоге получим дерево решений, в котором некоторые ветви будут более достоверными, а некоторые менее. Совсем плозие ветви можно пообрезать и выбросить для экономии ресурсов.
В итоге можно при неточности во всех постоениях получить точность геолокации вплоть до ширины дороги. При этом чем больше мы проедем, тем достовернее получим геолокацию.
К примеу мы катим по прямой длинной улице. Первые десятки метров у нас дохрена гипотез (ровных участков дорожной сети очень много), но по мере накопления трека он перестаёт умещаться во всё большем количестве участков дорожной сети. Гипотезы отбрасываются, дерево решений лысеет и когда одна ветка становится самой толстой, мы говорим, что вот наше положение теперь понятно. А если не становится, то накапливаем трек дальше. Любой поворот или цепочка поворотов формируют рисунок, который, как отпечаток пальца, всё однозначнее и однозначнее матчится на конкретный фрагмент дорожной сети. Даже если мы там где-то буксанули или сильно виляли (мы же повороты руля учитываем в совокупности со скоростью), то трек в худшем случае станет хуже ложиться на дорожную сеть, то есть будет численно хуже матчиться. Если, к примеру, работать не только с одной версией полного трека, а ещё и с его последней половиной, потом последней четвертью и т.д., то в конце концов запоротые буксованием и потерей точности хвосты трека будут отбрасываться.
Лучшим подтверждением что схема рабочая является то, что яндекс ее уже воплотил и продает в виде OBD2-донглов. Данные с акселерометров и гироскопв смартфона конечно тоже могут помочь в этом деле (есть много алгоритмов, позволяющих учитывать кучу разнородных данных, например фильтр Калмана), но только на эти датчики рассчитывать не получится, при их интегрировании неизбежно растёт ошибка, а избавляться от неё очень трудно. В описанном мною выше алгоритме ошибки постоянно сбрасываются при выборе рабочих гипотез. При этом даже если рабочих гипотез несколько, мы на их основе можем построить поле вероятностей, которе не смотря на свою пятнистость и обширность будет всё равно помогать в плане экономии вычислительных ресурсов для поиска нас на карте.
Если мы вообще и близко не знаем где находимся (с точностью до планеты), то всю Земную карту дорожной сети перелопачивать в отработке гипотез - это слишком тяжело. А при наличии поля вероятностей, мы можем матчить фрагменты начиная от тех, что ближе к мат-ожиданиям и по разворачивающейся спирали к менее вероятным участкам.
но только на эти датчики рассчитывать не получится, при их интегрировании неизбежно растёт ошибка, а избавляться от неё очень трудно
что мешает применять к показаниям этих датчиков те же методы, что вы описали? Погрешность исходных данных на несколько порядков лучше, чем с OBD-2. Накапливается ошибка в обоих вариантах, с OBD-2 она накапливается даже быстрее, но вы замечательно описали, как можно бороться с накоплением ошибки. Тот же метод, получая на вход более точные данные, не может дать худшие результаты.
Почему принято говорить о накоплении ошибки с гироскопа\акселерометра? Потому что основное применение - воздушная навигация, где нет дорог и ваш метод там неприменим, нечем фильтровать ошибку (если нет других навигационных данных, например, визуальных). Но здесь-то (на дорогах) он применим к исходным данным с любых датчиков.
Как бы то ни было, хотелось бы по результатам проекта увидеть статью на Хабре, тема интересная.
spoiler
Некоторые пишут хабро-статьи короче, чем ваш комментарий. ;)
hint000, проблема данных с акселерометра в том, что ошибка в них накапливается гораздо быстрее.
Приведу простой пример. Представьте, что вам нужно измерить большое (сотни метров) расстояние линейкой размером в миллиметр (с микронной точностью). Вы делаете ОГРОМНОЕ количество измерений и ваша ошибка растёт с каждым измерением. Даже если сама линейка очень точная, ошибка состоит из кучи факторов, которые друг от друга не отделить и чем больше измерений, тем больше ошибка. А теперь представьте, что то же самое расстояние вы меряете рулеткой, у которой шкала имеет дециметровую точность?
Одометр автомобиля хорошо измеряет расстояния порядка тех, что будут опорными в квартальной сетке. Когда машина стоит или медленно едет точность не падает так уж сильно. С какой скоростью вы бы ни проехали (если конечно без пробуксовок и дрифта) пару кварталов, одометр покажет корректное расстояние с точностью до метров. Он просто считает обороты колеса (а на деле там он более подробно считает) и умножает на длину его окружности. У такого метода тоже будут ошибки из-за рельефа дороги, из-за разного давления в шинах при разной погоде. Но часть этих ошибок поддаётся статистической калибровке при удачных матчах геолокации по другим признакам.
А теперь представьте что у вас акселерометр. Машина довольно массивна и быстро не может менять ускорение, но чтобы его интегрировать с хорошей точностью, вам нужно делать измерения ускорения десятки раз в секунду. Чем медленнее едет машина, тем больше измерений вы сделаете, а если она остановится в пробке, то ошибка всё равно продолжит накапливаться! Ведь есть тепловой шум, есть вибрация корпуса автомобиля, резонансы частей смартфона, крепежа, панели приборов, подвески...
Точности интегрирования МЭМС едва хватает, чтобы в картонном шлеме виртуальной реальности со смартфоном внутри вы могли повернуться вокруг своей оси и при этом в виртуальности ваша модель тоже повернулась с точностью хотя бы плюс-минус четверть оборота. Попробуйте поставить на смартфон любую программу-планетарий и поводите в режиме дополненной реальности смартфоном по небу и вы сразу поймёте о чем я. Да, телефон будет цепляться за звёзды и луну камерой, будет ловить компасом магнитное поле, но всё это будет из рук вон плохо работать даже на дистанциях порядка метра вокруг вас.
Более-мнее неплохо получается вектор гравитации отслеживать - это да. Его можно долго усреднять, он не так сильно дёргается, поэтому полно прог с "уровнем" для смартфонов. Но и только. Вы не найдёте софта, который бы точно (хотя бы до метра, какое там точно?!) померял вам хотя бы размер вашей комнаты с помощью интегрирования акселерометров без камеры. А казалось бы: ведём мы рукой смартфон плавно, правда? Вот нет. А вам надо в рассматриваемой предметной области мерять сотни метров с точностью до ширины дороги в вибрирующей повозке, интегрируя показания крохотной линейки (мэмс датчик) сотни раз в секунду даже когда машина стоит (и вибрирует) в пробке.
На счет статьи вы правы, следовало бы написать. Но деструктивный перфекционизм не даёт. Одно дело писать комменты в тредах, а другое дело статья. Там я просто зароюсь в поиске нужных формул, ссылок, литературы и прочего. Я диванный эксперт. У меня нет опыта работы с такой математикой, только общая диванная эрудиция и поверхностное понимание проблемы.
Сама ардуинка максимум что может взять - это список из MAC/SSID точек доступа и мощность сигнала.
Далее список из доступных сетей и мощностей сигналов следует передать на сервер, где будет база данных известных точек доступа с их координатами.
+ Можно сохранить инфу о том, какое сочетание точек доступа с мощностями, какой геопозиции соответствует (для референса)