Хотите поблагодарить автора блога - жмите здесь !
1 2 0
1 2 0

Нажмите на рекламный баннер выше, если хотите поблагодарить автора блога !
Написание каждой статьи заняло в сотни раз больше времени, чем один клик.

среда, июля 10, 2013

Android калибровка GPS, ускорение захвата спутников после холодного старта, повышение точности GPS по сути до возможного предела "железа"

Вам не нравится что GPS на Вашем Android слишком долго "ищет и звхватывает спутники" ? Точность определения местоположения хуже 10ти метров ? Вы думали что "это GPS на самом деле так работает" ? Ничего подобного. Ваш GPS может обеспечить точность +-5 метров, ато и точнее. И я расскажу Вам как этого добиться. И больше никаких "патчей" или сторонних и "геморных" в использовании "GPS утилит ускоряющих поиск спутников и повышающих точность". Все что необходимо есть в Вашем аппарате. Просто "калибровки" туда производитель вписывает "среднефонарные" - естественно не будет же он каждый телефон калибровать индивидуально. Да и производитель где ? В Китае, а калибровать нужно там, где Вы его реально используете.Ниже приведенная инструкция, собрана мною из разных источников по частям и проверена, кроме части "обеспечения максимальной точности", которую проверю позже и сделаю дополнение, но даже без нее, время "холодного старта" GPS, после перезагрузки телефона удалось довести до  менее чем 20ти секунд, вместо 1-2х минут до калибровки. При этом захват первых спутников идет менее чем через 3-4 секунды, а "захват GPS" (локализация по спутникам, когда перестает мигать  "поиск GPS" и тело переходит на работу по спутникам) - менее 10ти секунд (иногда до 40ка но реже - в зависимости от точности часов Вашего смарта и видимости спутников).
Впечатления от работы обеих методов, чтобы решить какой из них Вам больше по душе, можно прочесть здесь: http://vyacheslav.blogspot.com/2013/07/android-gps.html. Я лично рекомендую "метод калибровки родного GPS" (описанный ниже) - он дает те же результаты, и как по мне много предпочтительнее и удобнее в использовании.
Следует отметить, что с помощью программы, описанной здесь: http://vyacheslav.blogspot.com/2013/07/android-gps-6.html  , скорость активации из "холодного" состояния, всеже чуть шустрее. но более гемеройно, и из за ее "глубокого проникновения в систему GPS Android", она может "сбить" калибровки его "родной системы", о которых ниже. Плюс все что нужно проделать с ее помощью, перед каждым включением GPS делает запуск с ее использованием реально медленее, чем в варианте, изложенном в этой заметке.



Добавлено 30/08/2013. перед началом калибровки, просмотрите вот эту заметку и проделайте процедуры, которые в ней описаны: http://vyacheslav.blogspot.com/2013/08/gps-android-jb-411-cink-king-gps.html. Особенно актуально, если у вас серьезные проблемы с GPS, типа "очень плохо держит спутники" и "лок" "падает" при малейшем ослаблении сигнала, плюс после этого, GPS будет "держать" больше спутников одновременно, что улучшит как стабильность так и точность. Без этих процедур мне не удавалось "привести в норму" GPS под JB 4.1.1 Cink King. После чего проделайте калибровку по методике. изложенной ниже в этой заметке.

*наклонным шрифтом выделены пункты, необходимые для достижения вообще теоретически возможной точности. Пункты наклонным шрифтом могут быть пропущены, это чуть снизит точность (реально раза в 2), на скорости "холодного старта" не скажется.
**Перед процедурой выясните код инженерного меню Вашего аппарата - он Вам понадобится.

  1. Точность работы GPS, и особенно скорость "захвата после холодного старта", сильнейшим образом зависят от точности установки времени на Вашем аппарате. Обычно у всех стоит в настройках "Даты и Времени", "синхронизировать время по сети". У меня тоже стояло. Но как выяснилось, при этом аппарат использует для установки времени сотовый сигнал оператора, который в некоторых случаях может давать точность установки времени хуже +-несколько минут, а в моем случае (Киев, опаратор Life) давал отличие от реального времени целых 3 секунды. В общем кал, а не "сигналы точного времени". Есть еще возможность "определять время по GPS", но если Вы не в деревне живете, то это будет жрать много батареи, а толку будет чуть - ни в квартире ни в метро ни в маршрутке, ни в офисе... Ну Вы поняли.
    Поэтому озаботимся сначала утсановкой наиболее точного возможного времени. Для этого я поставил бесплатную программу ClockSync, вот отсюда: https://play.google.com/store/apps/details?id=ru.org.amip.ClockSync&hl=ru, можно еще взять отсюда: http://4pda.ru/forum/index.php?showtopic=171610. Также можете воспользоваться методикой, которую я описал здесь: http://vyacheslav.blogspot.com/2013/07/android-gps_12.html - она не требует установки дополнительных программ, но требует ручного редактирования нескольких системных конфигурационных файлов.
    Далее, определяемся с опорным сервером точного времени, который будем использовать. Немаловажно, чтобы он был как можно ближе к Вам, и чтобы время пинга до него было минимальным. Для начала, адреса "пулов" - для Украины это ua.pool.ntp.org, для России ru.pool.ntp.org. Если Вы в другой стране, ищите вот здесь: http://www.pool.ntp.org/ru/.
    Теперь запускаем терминал, и в нем комманду "ping ua.pool.ntp.org", и смотрим на время отклика. Делаем это раз 10 - каждый раз она будет обращаться к случайному серверу "пула", и обычно к другому. Даже для Украины время "отклика" для разных серверов колеблется от 5ти до 60мс (по наземке), что уж говорить о России с ее размерами. Соответственно выписываем IP адрес сервера, время отклика от которого минимально. Его и будем использовать.
    Запускаем установленную программу ClockSync, Меню > настройки. Первый пункт "NTP сервер". Вписываем туда выбранный IP адрес. Далее, выставляем галочку "автоматическая синхронизация", потом выбираем "Интервал". Чем интервал" меньше - тем чаще будет проходить синхронизация, а это "немножко траффика и множко батареи", с другой стороны, мой аппарат за 3 часа "уходит" аж на 160-180 миллисекунд... Я остановился на 3х часах покачто. Далее галочка "точный интервал" - можете не ставить - чуть сохранит батарею, я лично поставил. "Режим высокой точности" - ставьте, тем более что синхронизация иногда будет идти через сотовую передачу данных с очень нестабильной скоростью (можете не ставить - точность упадет, зато существенно снизится расход батареи при синхронизации). Ставим также "определять часовой пояс",  
    Выходим из меню настроек, жмем "меню", и выбираем "синхронизировать" - насколко Ваш аппарат идет "мимо времени" видно на экране. Да, в меню настроек через сутки сможете посмотреть насколько часы Вашего аппарата "спешат/опаздывают" в сутки (мой Fly IQ 450 на 9,21 сек в день).
    PS автоматическая синхронизация времени возможна только на "рутованном" аппарате. Если у Вас не рутованный, там есть в программе "ручной режим", но точность уже будет совсем не та.
    Примечание - добавлено позже. Также есть второй способ точной синхронизации времени, без установки дополнтилеьной программы, я его описал здесь: http://vyacheslav.blogspot.com/2013/07/android-gps_12.html. После сравнения результатов, я выбрал именно этот способ, но он требует некоторого редактирования конфигурационных файлов.
    Также желательно, если у Вас рутованный аппарат, отредактировать файл /system/etc/gps.conf. А именно, в первой строке, после "NTP_SERVER=", заменить указанный там "дефолтовый", на более подходящий для Вашей страны - например для Украины на ua.pool.ntp.org, или даже на ранее определенный IP адрес, но это будет менее универсально и иногда чревато сбоями, если конкретный сервер не будет работать, поэтому ua.pool.ntp.org универсальнее, зато IP адрес в этом поле может еще больше ускорить начальный холодный старт. Редактирование можно делать с помощью "Root Explorer".
    Со временем разобрались. Далее.
  2. Идем в настройки телефона. Местоположение. Отмечаем пункты: "По координатам сети", "Спутники GPS", "Вспомогательные данные", "AGPS", остальное "по вкусу". теперь заходим в пункт "Параметры EPO". Выключаем "EPO" на время калибровки. Здесь все.
  3. Запускаем Google Earth, в настройках переключаем его, чтобы показывал координаты в формате градусов и долей. Ищем поблизости место, где будем проводить калибровку. Это должно быть достаточно открытое место, например площадь. Выбираем точку где будем стоять при калибровке (выберите приметы, чтобы стать точно в нее потом), наводим на нее курсор, и записываем показанные координаты до последнего знака. Подготовка окончена - идем "в поле" :) с телефоном.
  4. Если использовали п3 - становимся ТОЧНО в точку, которую ранее выбрали. Запускаем "root explorer", заходим в папку /data/misc, удаляем файл mtkgps.dat. Загружаем самые свежие данные AGPS - например через программу Статус GPS (меню>инструменты>Данные AGPS>Загрузить). Проверяем время, например программой ClockSync (несколько раз проверяем, смотрим типичное отклонение, и потом жмем синхронизировать - как пользоваться программой и где взять - см ранее в статье о калибровке времени). Заходим в инженерное меню, LocationBasedServices, выбираем в меню "GPS", и нажимаем кнопку "GPS" (надпись на ней сменится с OFF на ON). Переходим во "View". Ждем пока появится "фикс" (перестанет мигать индикатор GPS), и потом еще не менее 2х минут. После чего жмем RefPosition, и в появившихся окошках вписываем координаты, ранее выписаные с Google Earth" для точки где Вы проводите калибровку (там будут нули). Жмем "ОК". Снова переходим к экрану View, и ждем после "фикса" не менее 2х минут, лучше минут 5. Выходим назад в инженерное меню.  Если п3 не выполняли - просто выбираем любое достаточно открытое место. Вынимание - даже не пытайтесь проделывать калибровку на балконе или "из окна" - сделаете только хуже.
  5. ****Можете перед калибровкой еще проверить правильность выбора SIM карты для AGPS - если Ваш сотовый оператор "глюкало", а карты две и два оператора, то можно выбрать менее глючного, это в случае если был выбран "глюкавый", может существенно ускорить работу GPS, ато и "оживить" "неработающий напрочь GPS" процедура описана в самом конце заметки.
  6. Заходим в "Инженерное меню" (для моего FLY IQ 450 и многих китайцев-клонов это код *#*#3646633#*#*, который набираем там где обычно набираете номер телефона при звонке, у Вас может быть другой). Находим "YGPS location", и запускаем. Телефон держите вертикально.
  7. Переходим на вкладку Information. Жмем кнопку "Full".
  8. Переходим на вкладку 'Satellites", ждем когда появится минимум 5 спутников (лучше больше - у меня их было 11 при настройке), и после того как они "появятся и позеленеют", ждем еще минимум 2 минуты, удерживая аппарат неподвижно (можно дольше - хуже не будет - только лучше). Это первичная калибровка. У меня она заняла минуты 3, но у некоторых аппаратов по отзывам может занять и до получаса.
  9. Идем в пункт Information", жмем "Cold". Далее как в п 8. Пункт 9 повторяем 3 раза. Можно больше. 
  10. Снова в Information. Жмем "Warm". далее как в п.8. Повторять уже не обязательно.
  11. Снова в Information". Жмем "Hot". Далее как в п 8.
  12. Если Вы выполняли пункт 3, выходите в инженерное меню, выбираете пункт "LocationBasedService", переходим на вкладку "View" (на забудьте активировать GPS как описано в п 4), и ждем пока определится максимум спутников. Минимум 7, лучше больше (чем больше, тем точнее калибровка), и после того как определится максимум, ждем еще 2 минуты. После чего идем во вкладку GPS, и жмем "RefPosition". У Вас появятся две цифры, от той, что Вы ранее записали используя Google Earth, они будут отличаться скорее всего тысячными. Исправляете обе на те, что Вы записали ранее в п3. Жмем "ОК". Теперь переходим во вкладку GPS и ждем минут 5 держа телефон неподвижно. Вот в этом месте - чем дольше - тем лучше. Программа GPS, получив реальные координаты, сравнивает их с теми что "получаются у нее" и вносит коррекции. их уточняя. Ниже в окошке увидите счетчик "процесса" и данные, которые врем от времени меняются. 
  13. Выходим из инженерного меню, перезагружаем телефон.
  14. Все. Радуемся шустрому и точному GPS.
После полностью выполненной инструкции, реальная точность определения позиции (вычисленная по google earth а не та, которую показывает сам GPS), составила ~2.3-2.5 метра (GPS показывал точность в 5-6 метров в статусе), при "видимых" 9ти спутниках, и 8 метров (GPS показывал точность 10.5 метров в статусе) при видимых 7ми спутниках  -спутники движутся и раз на раз не приходится в смысле день на день.

 PS Если Вы собираетесь использовать также программу, описанную здесь: http://vyacheslav.blogspot.com/2013/07/android-gps-6.html, то учтите что калибровать нужно после ее установки. И в случае ее деинсталяции - калибровать повторно - скидывает при деинсталяции калибровочные данные, и GPS снова начинает "искать спутники по нескольку минут". Загрузка ее данных "ускорения" ВРОДЕ БЫ не влияет на калибровку, но и смысла не имеет - разница по скорости "в пределах статистической погрешности". Но кажется, реальная точность чуть лучше, со свежезагруженными ее данными (процентов на 20, но тоже в пределах статпогрешности по сути). Также имейте в виду, что загруженные данные вышеуказанной программы быстро устаревают, и спустя день-два уже наоборот будут тормозить GPS и снижать точность (по сравнению с просто нормально откалиброванным родным по вышеописанной в этой статье методике). Плюс я ее снес нафик :) Бо во первых не нужна, а во вторых с ней можно получить "GPS который ничего не определяет", если забыли загрузить новые данные. Даже если Вы нажали кнопку "сбросить загруженные данные" и саму программу не запускаете. По кр мере у меня раз так случилось - проверять грабли еще раз не стал.

PPS В нете бродят слухи, что "включение данных EPO" (специфические данные GPS для чипов MTK), дающих некоторое ускорение "холодного старта", уменьшают количество "захватываемых спутников". Это наврядли. Количество захватываемых спутников определяется их "количеством над головой в данный момент" и высотой над горизонтом (в городе, те что над самым горизонтом обычно не видны). Но всеже при калибровке ее лучше выключить. И использовать только если Вы едете в место, где инет возможно будет не доступен. Тогда она Вам даст реальное ускорение запуска (в ней загружаются данные за месяц вперед). В обычной ситуации лучше пользоваться только AGPS - ее данные свежее, и соответственно точнее, поэтому скорость "старта" с ней типично выше.

PPPS Ниже "референсная информация" для тех, кому достался аппарат, с полностью нерабочим GPS. Стоит ее проверить - причина может быть в том, что у Вас вписано в настройки что то отличное от нижеприведенного:

В инженерном меню, в пункте LocationbasedService, во вкладке AGPS:
Должно быть включено Enable A-GPS, MSB, User Profile, SLP Template - GOOGLE, supl.google.com, 7275, TLS Enable, RRLP, IMSI, K-Value.
Horizontal Accuracy - 22, Vertical Accuracy - 0, Location Age - 0, Delay - 0. Выбрано Location Estimate.
*********Выбор SIM карты для AGPS
Идем на вкладку NET - выбираем [SIM1] - нажимаем [Query] смотрим карту(вкладка Map), там должен появится адрес по которому вы находитесь, или близкий к нему. Тоже делаем с [SIM2]. Сравниваем, что точнее к вашему реальному положению, и на вкладке AGPS выбираем предпочитаемую симку.
На вкладке AGPS нажимаем [Save Profile]
Да, если что то из перечисленного в этом PS отличалось от настроек Вашего аппарата, или если Вы сменили симку, к которой у Вас привязан AGPS - калибровку нужно провести по новой.

PS О влиянии точности хода часов на время "холодного старта GPS".

Из "неудобного места" - балкон, сверху все перекрыто бетоном, двор-колодец - дома с 4х сторон, небу "кусочек сверху", едва видно 4 спутника (едва потом что видно 3, а 4й то появляется то пропадает). телефон откалиброван по методике, изложенной выше (до калибровки в этих условиях захвата вообще не было). Часы "отстают" на ~160мс (со времени калибровки часов программой ClockSync прошло 2 часа). Время "холодного старта" ~250-300 сек. После принудительной калибровки времени программой ClockSync - время "холодного старта" ~100сек. Впрочем это условия. в которых GPS обычно вообще не работоспособен, но хорошо иллюстрируют влияние точности хода часов на время "холодного старта".

PPS  Для форсирования загрузки данных AGPS, например если Вы находитесь далеко от места, где они были загружены - типа уехали километров на 200 на рыбалку/отдых итд, и загруженные дома данные AGPS стали неактуальны, что может отрицательно сказаться на времени "холодного старта".

Можно использовать программу "Статус GPS" вот отсюда: https://play.google.com/store/apps/details?id=com.eclipsim.gpsstatus2&hl=ru. Запускаете эту программу. Слева внизу под "координатным кругом", - возраст данных AGPS в часах. Нажимаете Меню > Инструменты > Данные A-GPS. Потом "загрузить". 

1 комментарий:

Закрыть окно X
Пожалуйста, потратьте несколько секунд на поддержку блога и его автора
Нажмите на рекламную ссылку: Рекламная ссылка для поддержки блога, или на баннер вверху справа страницы.