top of page

Melhorando precisão do GPS no Android

Os dispositivos Android atuais que possuem receptor GPS muitas vezes demoram para achar satélites a fim de obter a localização do dispositvo, um dos motivos para isso acontecer é muitas vezes a ausência de um servidor NTP ou até mesmo a latência da rede para realizar a conexão do dispositivo com o servidor em questão.

Em artigos anteriores no nosso site há demonstração e configuração de um servidor NTP. Para este artigo você precisará ter acesso root em seu android e também um navegador de arquivos capaz de acessar os arquivos de configuração do sistema.

Nosso servidor NTP possui acesso externo disponível por qualquer computador no endereço "ntp1.ifsc.usp.br", esse servidor localiza-se na cidade de São Carlos - SP. Futuramente mais detalhes técnicos serão abordados sobre o mesmo.

O arquivo que iremos modificar para melhora da recepção do sinal é o gps.conf, localizado na pasta /system/etc esse arquivo contém configurações importantes que trabalham justamente com o funcionamento do GPS. Em diversos modelos de diferentes fabricantes de dispositivos móveis há configurado um servidor "pool.ntp.org", esse servidor é dinâmico porém muitas vezes uma referência de tempo fixa torna-se mais confiável, rápida e segura que uma dinâmica. Sabendo disso, nosso truque para melhora do travamento do sinal GPS é basicamente adicionar mais servidores para que a API do Android possa ter mais possibilidades de comparações temporais e com isso, redução nos delays e escolha mais "inteligente" dos satélites com menor variação de tempo e mais próximos da localização atual do cliente.

Abaixo, um exemplo simples do arquivo gps.conf presente na configuração original do Moto G4 Plus:

 

#XTRA_SERVER_1=http://xtrapath2.izatcloud.net/xtra2.bin

#XTRA_SERVER_2=http://xtrapath2.izatcloud.net/xtra2.bin

#XTRA_SERVER_3=http://xtrapath3.izatcloud.net/xtra2.bin

# _SET = 1

# _CLEAR = 0

ERR_ESTIMATE=0

#NTP_SERVER=time.gpsonextra.net

# NTP_SERVER=asia.pool.ntp.org

# NTP_SERVER=europe.pool.ntp.org

#North America

#NTP_SERVER=north-america.pool.ntp.org

# DEBUG LEVELS: 0 - none, 1 - Error, 2 - Warning, 3 - Info

# 4 - Debug, 5 - Verbose

# If DEBUG_LEVEL is commented, Android's logging levels will be used

DEBUG_LEVEL = 2

# Intermediate position report, 1=enable, 0=disable

# supl version 1.0

#5UPL_VER=0x20000

# Emergency SUPL, 1=enable, 0=disable

# SUPL Mode (0=Standalone, 1=MSB, 2=MSA)

# GPS Capabilities bit mask

# SCHEDULING = 0x01

# MSB = 0x02

# MSA = 0x04

# ON_DEMAND_TIME = 0x10

# GEOFENCE = 0x20

# default = ON_DEMAND_TIME | MSA | MSB | SCHEDULING | GEOFENCE

CAPABILITIES=0x37

# Accuracy threshold for intermediate positions

# less accurate positions are ignored, 0 for passing all positions

# ACCURACY_THRES=5000

################################

##### AGPS server settings #####

################################

# FOR SUPL SUPPORT, set the following

# SUPL_HOST=supl.host.com or IP

# SUPL_PORT=1234

# FOR C2K PDE SUPPORT, set the following

# C2K_HOST=c2k.pde.com or IP

# C2K_PORT=1234

####################################

# LTE Positioning Profile Settings

####################################

# 0: Enable RRLP on LTE(Default)

# 1: Enable LPP_User_Plane on LTE

# 2: Enable LPP_Control_Plane

# 3: Enable both LPP_User_Plane and LPP_Control_Plane

################################

# EXTRA SETTINGS

################################

# NMEA provider (1=Modem Processor, 0=Application Processor)

# Mark if it is a SGLTE target (1=SGLTE, 0=nonSGLTE)

##################################################

# Select Positioning Protocol on A-GLONASS system

##################################################

# 0x1: RRC CPlane

# 0x2: RRLP UPlane

# 0x4: LLP Uplane

 

Essas são as configurações padrões presentes nesse arquivo... Observe que justamente as linhas que são responsáveis pela obtenção dos tempos citados anteriormente estão comentadas, ou seja, não estão ativas. Nosso GPS não tem uma referência de tempo local, terrestre para fazer as comparações de tempo e com isso acaba demorando mais para localizar-se e escolher os melhores satélites para obtenção da localização.

O que eu fiz basicamente, foi limpar o arquivo com as linhas comentadas e que não são úteis para a conexão e configuração do GPS e habilitar algumas funções inativas no sistema, como a que é foco deste artigo, servidores NTP. Minhas configurações atuais estão:

 

#Uncommenting these urls would only enable #the power up auto injection and force injection(test case). XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra2.bin XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra2.bin # _SET = 1 # _CLEAR = 0 ERR_ESTIMATE=0 #NTP servers for fast GPS FIX NTP_SERVER_1=ntp1.ifsc.usp.br NTP_SERVER_2=gpsntplpsc.duckdns.org NTP_SERVER_3=time.gpsonextra.net # DEBUG LEVELS: 0 - none, 1 - Error, 2 - Warning, 3 - Info # 4 - Debug, 5 - Verbose # If DEBUG_LEVEL is commented, Android's logging levels will be used DEBUG_LEVEL = 2 # GPS Capabilities bit mask # SCHEDULING = 0x01 # MSB = 0x02 # MSA = 0x04 # ON_DEMAND_TIME = 0x10 # GEOFENCE = 0x20 # default = ON_DEMAND_TIME | MSA | MSB | SCHEDULING | GEOFENCE CAPABILITIES=0x37 # Accuracy threshold for intermediate positions # less accurate positions are ignored, 0 for passing all positions ACCURACY_THRES=5000

 

Obviamente, as configurações podem variar de Smartphone para Smartphone e com isso alguns parâmetros colocados no exemplo acima podem não funcionar, por isso faça um backup do seu arquivo gps.conf original!

Caso não queira realizar muitos testes altere somente as linhas "NTP_SERVER=............". Pode-se adicionar quantos servidores julgar necessário, vou deixar abaixo uma lista de servidores presentes na cidade de São Carlos - SP e seus respectivos tipos. Observe que no arquivo de configuração há além dos servidores extra um default, deixei este caso todos os outros falhem, o que é extremamente difícil!

{

Servidor IFSC USP - Referência: HP 5071 -> ntp1.ifsc.usp.br

Servidor NTP a partir de satélites GPS: gpsntplpsc.duckdns.org

Servidor NTP Stratum 2: ntpsaocarlos.duckdns,org

}

Abaixo, deixo algumas imagens do antes e do depois da precisão do GPS e um log do sistema com a conexão e correção dos servidores NTP:

Fig. 1: Visualização do GPS sem as correções.

Fig. 2: Visualização do GPS com as correções aplicadas (para aplicar é necessário

reiniciar o celular).

Fig. 3: Sistema reconhece os servidores desejados e alguns outros automáticos

pelo android.

Fig. 4: Após algum tempo, quando necessário o sistema realiza consultas periódicas

aos servidores NTP para correção interna de data e hora, além da utilização no

GPS, "D/SntpClient( 1733): round trip: 58ms, clock offset: -17603ms".

-> Aplicativos utilizados: GPS Test, aLogcat (ROOT) e Root explorer (para procura e edição do arquivo de configurações do GPS), disponíveis na Play Store.

bottom of page