R Roam Roam 받기

GPS 누적 상승이 틀리는 이유와 기압계가 고치는 것

수직은 위성 수신기가 가장 못 재는 축이고, 누적 상승을 더하는 방식은 그 약점을 크고 언제나 양수인 오차로 바꿔 놓는다. 왜 압력 센서가 더 나은 도구인지, 그리고 그것이 어디에서 실패하는지.

강변 자전거길을 따라 평평한 한 바퀴를 돌았다. 앱은 400미터를 올랐다고 말한다. 주행에는 아무 문제가 없었다. 그 숫자가 너무 크게 나올 수밖에 없는 방식으로 조립되었을 뿐이다.

수직은 약한 축이다

위성 수신기는 들리는 위성들의 기하학적 배치로부터 위치를 푸는데, 그 배치는 근본적으로 한쪽으로 치우쳐 있다. 수평으로는 위성들이 사방에서 당신을 둘러싸고 있어서 반대 방향의 오차끼리 어느 정도 상쇄된다. 수직으로는 모든 위성이 머리 위에 있다. 아래쪽에 있어야 할 위성들은 지구가 가로막고 있고, 상쇄해 줄 반대편이 없다. 그 결과 수십 년째 유지되어 온 경험칙이 나온다. 수직 오차는 수평 오차의 대략 두 배에서 세 배다.

별개의 문제가 하나 더 있다. GNSS는 본래 해수면이 아니라 수학적 타원체를 기준으로 높이를 보고하는데, 이 둘의 차이는 지역에 따라 수십 미터씩 달라진다. 수신기들은 지오이드 보정을 적용하지만 쓰는 모델이 서로 다르고, 같은 언덕 꼭대기에 선 두 기기가 그곳의 고도를 다르게 말하는 이유 중 하나가 이것이다.

합산이 왜, 그리고 어느 방향으로 상황을 악화시키나

누적 상승은 측정값이 아니다. 그것은 합이다. 고도 표본들을 순서대로 훑으면서 올라간 몫을 전부 더한다. 이 연산에는 곤란한 성질이 하나 있다. 노이즈가 여기에 기여하는데, 그것도 언제나 양의 방향으로만 기여한다.

실제 고도가 완전히 평평하고 표본이 위아래로 몇 미터씩 흔들린다고 해 보자. 위로 흔들린 것은 전부 상승으로 세어진다. 아래로 흔들린 것은 아무것도 아닌 것으로 세어진다. 하강은 누적 상승에서 빼 주지 않기 때문이다. 초당 한 번씩 두 시간을 표본하면, 그저 좀 시끄러울 뿐인 센서가 완벽하게 평평한 강변길에서 수백 미터의 상승을 만들어 낸다.

그래서 앱들은 문턱값을 두고 몇 미터 미만의 변화를 무시한다. 도움이 되고, 동시에 자기만의 오차를 들여온다. 노이즈를 눌러 없앨 만큼 문턱값을 올리면 완만한 오르내림이 이어지는 길을 이루는 진짜 작은 상승들도 함께 세지 않게 된다.

기압계는 무엇을 다르게 하나

최근의 아이폰에는 모두 압력 센서가 들어 있다. 기압은 높이에 따라 잘 알려진 방식으로 떨어진다. 해수면 근처에서 아주 거칠게 말하면 8~9미터마다 1헥토파스칼쯤이고, 센서는 1미터에 한참 못 미치는 변화까지 분해할 만큼 예민하다.

결정적으로 이것은 완전히 독립적인 도구다. 그 오차는 위성 배치, 도심 협곡, 나무 그늘, 지오이드 모델과 아무 관계가 없고, 단기 노이즈는 GNSS의 수직 노이즈보다 훨씬 작다. "지금 내가 올라가고 있는가"를 판정하는 그 한 가지 일에 대해서는, 그리고 누적 상승이 실제로 묻는 질문은 그것뿐인데, 압력 센서가 큰 차이로 더 나은 센서다.

Roam은 압력 센서를 읽어, 모든 점마다 GPS 고도 옆에 기압 고도를 함께 저장하고, 기압 값이 있을 때는 언제나 그쪽을 쓴다. 두 열을 모두 남겨 두기 때문에 버려지는 것은 없다.

기압계가 실패하는 지점

그것이 재는 것은 높이가 아니라 압력이고, 압력은 당신과 아무 상관 없는 이유로도 변한다.

합리적인 사용법은 누적 상승에는 기압계를 쓰고, 어떤 하나의 절대 고도든 근사치로 대하는 것이다. iOS에서는 이 센서가 동작 및 피트니스 권한 뒤에 놓여 있어서, 겉으로 아무것도 망가지지 않은 채로 앱이 센서 접근을 잃을 수 있다.

아무도 눈치채지 못하는 고장 방식

흥미로운 결함은 틀린 숫자가 아니다. 정상처럼 보이는, 없어진 숫자다. 한 주행 내내 기압 고도 열이 비어 있는데 앱이 그냥 GPS 고도로 물러서 버리면, 화면에는 그럴듯해 보이는 값이 뜨고, 좋은 센서가 처음부터 끼어들지 않았다는 사실은 어디에도 나타나지 않는다.

이 앱의 역사에도 실제로 그런 일이 있었다. 한 주행의 9천 개가 넘는 모든 점에서 기압 고도가 비어 있었는데, 다섯 가지 가능한 이유 중 어느 것이었는지 알아낼 방법이 없었다. 센서가 아예 만들어진 적이 없었던 것인데, 없는 센서와 조용한 센서는 겉에서 구분되지 않는다. 해법은 이유마다 이름을 붙여서 그 갈래를 타는 순간 기록하는 것이었다. 이 기기에 하드웨어가 없음, 권한을 요청한 적 없음, 권한이 거부됨, 기기 관리 프로파일이나 자녀 보호로 제한됨, 앱 자체 설정에서 꺼져 있음, 시작했다가 실패함. 이것들은 해결책이 서로 다르고, 그중 둘은 사용자 본인이 쥐고 있는 스위치다.

당신의 숫자를 어떻게 다룰 것인가

  1. 평평한 경로를 한 번 달리고 보고된 상승을 본다. 진짜로 평평한 지형에서 한 시간에 수십 미터를 넘는다면 그것은 합산되고 있는 노이즈다.
  2. 같은 주행을 두 기기로 기록해 비교해 본다. 합계가 다를 것을 예상하고, 기압 쪽이 더 낮고 더 안정적일 것을 예상하라.
  3. 앱끼리 누적 상승을 측정량처럼 비교하지 말 것. 문턱값과 평활화가 다르면 똑같은 데이터에서 다른 답이 나온다.
  4. 절대 고도는 대략적인 값으로, 누적 상승은 믿을 만한 값으로 대하라. 대부분의 사람이 직관적으로 생각하는 것과 정반대다.

자주 묻는 질문

GPS 누적 상승이 왜 이렇게 높게 나오나요?

누적 상승은 위쪽 변화만 더한 합이고, GPS의 수직 노이즈는 위쪽으로만 기여하기 때문입니다. 위로 흔들린 것은 전부 상승으로 세어지고 아래로 흔들린 것은 아무것도 아닌 것으로 세어지므로, 한 시간치의 시끄러운 표본만으로도 평지에서 상승이 만들어집니다.

기압 고도가 GPS보다 정확한가요?

누적 상승에 대해서는 상당히 그렇습니다. 1미터 아래의 변화까지 분해하고 그 오차가 위성 배치와 무관하기 때문입니다. 절대 고도에 대해서는 보정한 만큼만 정확합니다. 날씨가 측정 대상인 기압 자체를 움직이기 때문입니다.

날씨가 기압 고도에 영향을 주나요?

줍니다. 전선이 하나 지나가면 하루 동안 100미터가 넘게 읽힐 만큼 해면기압이 움직일 수 있습니다. 짧은 나들이에서는 표류가 미미하지만 며칠짜리 여정에서는 문제가 됩니다. 이 센서를 절대 높이가 아니라 상대적 변화에 쓰는 이유가 그것입니다.

같은 주행인데 두 앱의 상승값이 왜 다른가요?

센서가 다르고, 노이즈 문턱값이 다르고, 평활화 방식이 다르기 때문입니다. 누적 상승은 측정값이 아니라 알고리즘의 출력이므로, 같은 원본 주행에서 다른 합계가 나오는 것은 정상이고, 앱끼리 비교하는 것은 별 의미가 없습니다.

주행을 잃지 않는 기록 앱

Roam은 측위점이 도착하는 그 순간, 주행 중인 누적 수치와 같은 트랜잭션으로 휴대폰에 기록합니다. 신호가 끊긴 구간은 직선으로 잇지 않고 끊긴 구간 그대로 남깁니다. 누적 상승은 GPS 고도가 아니라 기압 센서에서 읽습니다. 계정도, 로그인도, 동기화도 없습니다. 한 번의 주행을 온전히 기록하고, 보고, 다시 재생하는 것은 무료입니다.

App Store에서 다운로드

관련 글

전체 글