Ускорение работы AGPS на Android

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

Всё началось с того, что я случайно скачал одну прекрасную утилиту — FasterGPS (Market). Немного пошарившись в ней, я внезапно ускорил ловлю GPS в пару раз. Параметры я тогда выставлял наобум.

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

Нужен Root, любой файловый менеджер (Total Commander, например) и желательно Busybox, впрочем, я не уверен, что он требуется. Для устройств HTC я не знаю что сказать, у них же там какие-то S-OFFы ещё нужны… Не знаю, никогда в HTC-шках не разбирался.

1) Синхронизация времени

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

Когда устройство подключается к спутникам, проводятся математические расчёты с четыремя неизвестными: координаты x,y,z и разница во времени Андроида и спутника. Исходя из количества спутников задержка меняется. Из-за того, что и спутники, и (как правило) GPS-приёмники движутся, то разница во времени прямо сказывается на скорости обмена данными. Измеряется она в мили- или нано- секундах и запросто может быть в пару тысяч милисекунд (напомню, Милисекунда = Секунда / 1000)

Для синхронизации времени GPS-спутников и времени телефона пока нам необходима утилита Smart GPS Time (QR, Market).

1.1) Ставим программу на устройство.
Желательно выйти на открытую местность или подойти к окну.
1.2) Запускаем, жмём кнопку «Включить GPS» и ждём, пока накопится больше трёх спутников или состояние GPS будет отображать «Вкл. Работаем«.
Если спутники не ловятся, переходим к пункту 2.
1.3) Жмём кнопку Синхронизировать, пока Разница не станет + 0 ms. Учтите, что погрешность в любом случае появляется (как я заметил, в зависимости от найденных спутников), так что бесполезно постоянно заходить в программу тыкать кнопку, чтобы время всегда шло наравне с атомными часами. Этого не будет никогда. Наша цель сейчас — минимизировать разницу во времени.

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

2) FasterGPS

Наверное, единственная нормальная утилита для тонкой настройки AGPS у андроидов.

2.1) Качаем утилиту по ссылкам выше.

2.2) Открываем и настраиваем таким образом:
Континент: Европа
Регион: Российская Федерация

Можно тестировать с большей длей уверенности. Если что-то изменилось в лучшую сторону — можно не продолжать. Следующие пункты для опытных пользователей или тех, кто хочет быть уверенным, что все действия пройдут не зря.

Для точного определения расположения приёмника требуется соединение к 3-4 и более спутникам (часто бывает от 8 до 15).

Путь 1

2.3) Переходим к расширенным настройкам. Тапнув на параметре всплывает окошко, куда нужно ввести значение этого параметра. Проходимся по всем параметрам и выставляем такие значения (выделенные — необязательны, но желательны):
DEBUG_LEVEL = 0
INTERMEDIATE_POS = 0
ACCURACY_THRES = 0
ENABLE_WIPER = 1
CURRENT_CARRIER = common
DEFAULT_AGPS_ENABLE = TRUE
DEFAULT_SSL_ENABLE = FALSE
DEFAULT_USER_PLANE = TRUE
REPORT_POSTION_USE_SUPL_REFLOC = 1
SUPL_HOST = supl.google.com
SUPL_PORT = 7276
SUPL_NO_SECURE_PORT = 3425
SUPL_SECURE_PORT = 7275
SUPL_TLS_HOST = FQDN
SUPL_TLS_CERT = /etc/SuplRootCert
C2K_HOST = c2k.pde.com
C2K_PORT = 1234

Путь 2

Файл с настройками AGPS лежит в памяти телефона по пути /etc/gps.conf (именно он перезаписывается программой FasterGPS при изменении каждого параметра выше).

2.3) Создаём на ПК файл gps.conf и при помощи волшебного Ctrl+C/Ctrl+V и Блокнота вставляем туда следующее:

# Строка, начинающаяся с такой решёточки — комментарий
# Пояснения ко многим параметрам есть в расширенных настройках FasterGPS
NTP_SERVER=ru.pool.ntp.org 
XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin
XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin
XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin
DEBUG_LEVEL=0
INTERMEDIATE_POS=0
ACCURACY_THRES=0
ENABLE_WIPER=1
CURRENT_CARRIER=common
DEFAULT_AGPS_ENABLE=TRUE
DEFAULT_SSL_ENABLE=FALSE
DEFAULT_USER_PLANE=TRUE
REPORT_POSITION_USE_SUPL_REFLOC=1SUPL_HOST=supl.google.com
SUPL_PORT=7276
SUPL_NO_SECURE_PORT=3425
SUPL_SECURE_PORT=7275
SUPL_TLS_HOST=FQDN
SUPL_TLS_CERT=/etc/SuplRootCert
C2K_HOST=c2k.pde.com 
C2K_PORT=1234

Как вы заметили, именно эти параметры настраиваются в программе.

Но есть одно важное замечание.
Параметр NTP_SERVER указывает на сервер синхронизации времени (ntp.org — проект с огромным количеством серверов синхронизации времени). Зачем он нужен — я так и не понял. Ведь если время приёмника синхронизируется со временем спутника, то зачем NTP-сервер? Однако! Если время приёмника синхронизируется всё-таки именно с NTP-сервером (который тикает в такт часам спутника) исходя из расчитанной задержки времени, то тогда всё встаёт на свои места. Я не уверен в обоих вариантах событий.

2.4) Сохраняем файл и заливаем его на андроид в указанную папку своим любым способом. Подтверждаем замену.
Не бойтесь заменить файл. Если вы запускали FasterGPS, то он сделал резервную копию при первом запуске, которая восстанавливается без проблем в той же программе. Если резервной копии нет, ничего страшного не произойдёт.
2.5) Используя свой любимый файловый менеджер выставляем права доступа к файлу:

rw-r—r— (644)

Настройка закончена

Желательно перезапустить телефон (просто выключить и включить).

Как результат

имеем высокую скорость и точность позиционирования. Даже гуляя пешком можно заметить как на карте меняется ваше точное местоположение; погрешность, как я прикинул в уме при тестах — около метра, в зависимости от количества словленных спутников.

Но для уверенного приёма необходимо быть на открытом пространстве или в машине. Желательно не сидеть на месте, а менять положение приёмника, даже просто пройдясь туда-сюда.

P.S.

Некоторые прошивки, например, у Acer Liquid Mini, позволяют задать сервер-порт в настройках AGPS. Когда я тестировал всё вышеописанное, у меня там вообще был и остался установлен сервер agps.fastnet.org с портом 7275. Я нашёл эти данные где-то в интернете и всю свою жизнь устанавливал только их, хотя я вообще не знаю влияют ли они на что-нибудь и работает ли этот сервер.

Первоисточники некоторой информации:

Опубликовано
В рубрике blog Отмечено

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *