Por que o ganho de altitude do GPS sai errado, e o que o barômetro resolve
A vertical é a medida mais fraca que um receptor de satélite produz, e a forma como a subida é totalizada transforma essa fraqueza num erro grande e sempre positivo. Por que um sensor de pressão é o instrumento melhor, e onde ele também falha.
Você pedala um circuito plano na beira de um canal. O app informa que você subiu quatrocentos metros. Não houve nada de errado com o seu trajeto; o número foi montado de um jeito que garante que ele saia alto demais.
A vertical é o eixo fraco
Um receptor de satélite resolve a sua posição a partir da geometria dos satélites que consegue escutar, e essa geometria é torta por natureza. Na horizontal, os satélites cercam você, então erros vindos de direções opostas se cancelam em parte. Na vertical, todos os satélites estão acima de você — a Terra está no caminho dos que estariam abaixo — e não há nada do outro lado para cancelar. O resultado é uma regra prática que se sustenta há décadas: o erro vertical é mais ou menos duas a três vezes o erro horizontal.
Há um segundo problema, independente desse. O GNSS informa nativamente a altura acima de um elipsoide matemático, não acima do nível do mar, e a diferença entre os dois varia em dezenas de metros pelo mundo. Os receptores aplicam uma correção geoidal, e os modelos divergem entre si, o que é parte do motivo pelo qual dois aparelhos no mesmo topo de morro discordam sobre a altitude dele.
Por que somar piora as coisas, e sempre para o mesmo lado
Ganho de altitude não é uma medição. É uma soma: percorra as amostras de altitude e vá acumulando toda subida. Essa operação tem uma propriedade infeliz — o ruído contribui para ela, e só contribui positivamente.
Imagine que a altitude verdadeira seja perfeitamente plana e que as suas amostras oscilem alguns metros para cada lado. Toda oscilação para cima é contada como subida. Toda oscilação para baixo é contada como nada, porque descida não subtrai do ganho. Amostre uma vez por segundo durante duas horas e um sensor meramente ruidoso terá fabricado centenas de metros de subida em cima de um caminho de sirga completamente nivelado.
É por isso que os apps aplicam um limiar e ignoram variações menores que um certo número de metros. Ajuda, e traz um erro próprio: levante o limiar o bastante para abafar o ruído e você também deixa de contar as pequenas subidas legítimas que formam uma estrada ondulada.
O que o barômetro faz de diferente
Todo iPhone recente tem um sensor de pressão. A pressão do ar cai com a altura de um jeito bem compreendido — muito grosseiramente, um hectopascal a cada oito ou nove metros perto do nível do mar — e o sensor é sensível o suficiente para resolver variações bem abaixo de um metro.
E, o mais importante, ele é um instrumento completamente independente. Os erros dele não têm relação alguma com geometria de satélites, com desfiladeiros urbanos, com cobertura vegetal ou com modelo de geoide, e o ruído dele no curto prazo é muito menor que o ruído vertical do GNSS. Para a tarefa específica de detectar "estou subindo agora", que é a única pergunta que o ganho de altitude de fato faz, ele é o sensor melhor por uma larga margem.
O Roam lê o sensor de pressão, guarda a altitude barométrica ao lado da altitude do GPS em cada ponto e usa o valor barométrico sempre que ele existe. As duas colunas são preservadas, então nada é descartado.
Onde o barômetro falha
Ele mede pressão, não altura, e a pressão muda por motivos que não têm nada a ver com você.
- O tempo. Uma frente passando pode deslocar a pressão ao nível do mar em dez ou vinte hectopascais ao longo de um dia, o que se lê como cem metros ou mais de variação aparente de altitude. Num trajeto de duas horas essa deriva costuma ser pequena; numa travessia de vários dias, não é.
- A altitude absoluta é, por isso, pouco confiável sem calibração, e é por isso que um altímetro barométrico é excelente em variação relativa e ruim em responder "que altura tem este cume". O ganho é uma soma de variações relativas, ou seja, exatamente o caso em que ele é bom.
- Carros, trens e aviões são vedados o bastante para que a pressão interna e a externa se descolem uma da outra. O ar-condicionado de um carro pode aparecer como subida.
- Uma entrada obstruída — uma capa, um bolso encharcado de chuva — pode amortecer ou atrasar as leituras.
A prática sensata é usar o barômetro para o ganho e tratar qualquer altitude absoluta isolada como aproximada. No iOS o sensor também fica atrás da permissão de Movimento e Preparo Físico, o que significa que um app pode perder acesso a ele sem que nada quebre de forma visível.
A falha que ninguém percebe
O defeito interessante não é um número errado. É um número ausente com cara de número normal. Se a coluna barométrica ficar vazia num trajeto inteiro, um app que simplesmente recorre à altitude do GPS vai informar um valor de aparência plausível, e nada na tela indica que o sensor bom nunca participou.
Isso aconteceu na história deste próprio app: a altitude barométrica estava nula nos nove mil pontos de um trajeto, e não havia como saber qual dos cinco motivos possíveis se aplicava — o sensor simplesmente nunca tinha sido construído, e um sensor ausente é indistinguível de um sensor calado. A correção foi dar um nome a cada motivo e registrá-lo no instante em que o caminho é tomado: não há hardware neste aparelho, a permissão nunca foi pedida, a permissão foi recusada, há restrição por perfil de gerenciamento ou controle parental, o recurso foi desligado nos ajustes do próprio app, ou o sensor iniciou e depois falhou. Cada um tem um remédio diferente, e dois deles são um interruptor que pertence a quem está pedalando.
O que fazer com os seus próprios números
- Percorra uma rota plana e olhe o ganho informado. Qualquer coisa acima de algumas dezenas de metros numa hora em terreno realmente plano é ruído sendo somado.
- Compare dois aparelhos no mesmo trajeto. Espere que os totais sejam diferentes; espere que o barométrico seja menor e mais estável.
- Não compare o ganho entre apps como se fosse uma grandeza medida. Limiares diferentes e suavizações diferentes produzem respostas diferentes a partir de dados idênticos.
- Trate a altitude absoluta como um valor aproximado e o ganho como o número confiável, que é o contrário da intuição da maioria das pessoas.
Perguntas frequentes
Por que meu ganho de altitude pelo GPS é tão alto?
Porque o ganho é uma soma de variações para cima, e o ruído vertical do GPS só contribui para cima. Toda oscilação para cima é contada como subida e toda oscilação para baixo não conta nada, então uma hora de amostras ruidosas fabrica subida em terreno plano.
A altitude barométrica é mais precisa que a do GPS?
Para o ganho, bastante — ela resolve variações abaixo de um metro e seus erros não têm relação com a geometria dos satélites. Para a altitude absoluta, ela é só tão boa quanto a calibração, porque o tempo move a pressão que ela mede.
O clima afeta a altitude barométrica?
Afeta. Uma frente passando pode deslocar a pressão ao nível do mar o suficiente para ser lida como cem metros ou mais ao longo de um dia. Num passeio curto a deriva é pequena; numa viagem de vários dias ela importa, e é por isso que se confia no sensor para variação relativa, não para altura absoluta.
Por que dois apps mostram subidas diferentes para o mesmo trajeto?
Sensores diferentes, limiares de ruído diferentes e suavizações diferentes. O ganho não é uma medição, e sim a saída de um algoritmo, então o mesmo trajeto bruto legitimamente produz totais diferentes, e comparar esses totais entre apps significa muito pouco.
Um gravador que não perde o trajeto
O Roam grava cada ponto do GPS no celular no instante em que ele chega, marca as falhas de sinal em vez de traçar uma linha reta por cima delas e lê a subida do barômetro, não da altitude do GPS. Sem conta, sem login, sem sincronização. Gravar um trajeto, vê-lo e reproduzi-lo são coisas gratuitas.