R Roam Roamを入手

GPS の獲得標高がずれる理由と、気圧計が直すもの

垂直方向は衛星測位がいちばん苦手にしている軸で、そのうえ獲得標高の計算方法が、その弱点を大きな、しかも常にプラス方向の誤差へ変えてしまいます。なぜ気圧センサーのほうが優れた計器なのか、そしてそれがどこで外すのか。

運河沿いの平坦な周回コースを走ったのに、アプリは四百メートル登ったと言ってくる。ライドに問題があったわけではありません。その数字は、高く出ることが構造的に保証された作り方で組み立てられています。

垂直方向は、いちばん弱い軸

受信機は、聞こえている衛星の配置から位置を解きます。そしてその配置は、根本的に偏っています。水平方向には衛星が周囲を取り囲んでいるので、反対方向から来る誤差どうしがある程度打ち消し合います。垂直方向はそうはいきません。衛星はすべて頭上にあります。真下にあるはずの衛星は地球が遮っていて、打ち消す相手がいないのです。結果として、数十年ものあいだ通用してきた経験則が残ります。垂直方向の誤差は、水平方向の誤差のおよそ二倍から三倍。

もう一つ、別の問題もあります。GNSS が本来報告する高さは、海面からの高さではなく、数学的に定義された楕円体からの高さです。この二つの差は、世界中で数十メートル単位で変わります。受信機はジオイド補正をかけますが、使うモデルが違えば結果も違ってきます。同じ丘の上に立った二台の機器が、その丘の標高について食い違う理由の一つが、これです。

合計するという操作が、片側にだけ誤差を積む

獲得標高は計測値ではありません。合計値です。高度のサンプルを順にたどって、上がった分をすべて足す。この操作には困った性質があります。ノイズも合計に寄与し、しかも常にプラス方向にしか寄与しないのです。

本当の高度が完全に平坦で、サンプルが上下に数メートルずつ揺れているとします。上向きの揺れは登りとして数えられます。下向きの揺れは何にも数えられません。下りは獲得標高から引かれないからです。一秒に一回、二時間サンプリングすれば、ただ少しノイズが多いだけのセンサーが、完全に平らな河畔の道から数百メートルの登りを製造します。

だからアプリは閾値を設けて、一定メートル未満の変化を無視します。これは効きます。そして別の誤差を持ち込みます。ノイズを抑え込めるところまで閾値を上げると、細かいアップダウンの続く道を構成している本物の小さな登りまで、一緒に数えなくなるからです。

気圧計は何が違うのか

最近の iPhone にはどれも気圧センサーが載っています。気圧が高さとともに下がる関係はよく分かっていて、海面付近ではごく大まかに一ヘクトパスカルあたり八〜九メートル。センサーの感度は、一メートルを十分に下回る変化を捉えられる程度にはあります。

決定的なのは、これが完全に独立した計器だという点です。その誤差は衛星配置とも、ビル街での反射とも、樹冠の覆いとも、ジオイドモデルとも無関係で、短時間のノイズは GNSS の垂直方向のノイズよりはるかに小さい。「いま自分は登っているのか」という、獲得標高が本当に尋ねている唯一の問いに答える用途では、大きな差をつけてこちらが優れたセンサーです。

Roam(ローム)は気圧センサーを読み、すべての測位点について、気圧由来の高度を GPS 由来の高度と並べて保存し、気圧由来の値があるときは常にそちらを使います。列は両方とも残るので、捨てられるものはありません。

気圧計が外すところ

気圧計が測っているのは気圧であって、高さではありません。そして気圧は、あなたとは何の関係もない理由で動きます。

現実的なやり方は、獲得標高には気圧計を使い、単発の絶対高度はおおよその値として扱うことです。なお iOS では、このセンサーはモーションとフィットネスの許可の内側にあります。つまりアプリは、見た目には何も壊れないまま、アクセスを失うことがあります。

誰も気づかない壊れ方

厄介なのは、間違った数字が出ることではありません。欠けた数字が、まともな数字の顔をして出てくることです。あるライドで気圧由来の列がまるごと空だったとき、単純に GPS 高度へフォールバックするアプリは、もっともらしい数字を表示します。そして画面上には、よいほうのセンサーが一度も関与しなかったことを示すものが何もありません。

これはこのアプリ自身の履歴にも起きました。あるライドの九千点あまり、気圧由来の高度がすべて空で、しかも五つある原因のどれに当たるのかを言う手立てがなかったのです。センサーはそもそも一度も生成されていませんでしたが、存在しないセンサーと黙っているセンサーは見分けがつきません。直し方は、原因それぞれに名前を与えて、その分岐を通った瞬間に記録することでした。この端末にハードウェアがない、許可を一度も求めていない、許可を拒否された、デバイス管理プロファイルやペアレンタルコントロールで制限されている、アプリ自身の設定でオフにされている、開始したが失敗した。対処法はそれぞれ違いますし、そのうち二つは、走る人自身が握っているスイッチです。

自分の数字をどう扱うか

  1. 平坦なルートを走って、報告された獲得標高を見る。本当に平らな地面を一時間走って数十メートルを超えるなら、それは合計されたノイズです。
  2. 同じライドを二台で記録して比べる。合計値は違って当然です。気圧由来のほうが低く、そして安定しているはずです。
  3. アプリ間で獲得標高を、計測された量であるかのように比べない。閾値も平滑化も違えば、同じ生データから違う答えが出ます。
  4. 絶対高度をおおよその値として、獲得標高を信頼できる値として扱う。多くの人の直感とはちょうど逆です。

よくある質問

GPS の獲得標高が高く出すぎるのはなぜですか

獲得標高が上向きの変化の合計であり、GPS の垂直方向のノイズが上向きにしか寄与しないからです。上への揺れはすべて登りとして数えられ、下への揺れは何にもなりません。ノイズを含むサンプルを一時間集めるだけで、平地の上に登りが製造されます。

気圧高度は GPS より正確ですか

獲得標高についてははっきり上です。一メートル未満の変化を捉えられ、その誤差は衛星配置と無関係だからです。絶対高度については較正した分だけしか正確になりません。測っている気圧そのものを天気が動かしてしまうからです。

天気は気圧高度に影響しますか

します。前線が通過すれば、一日のうちに百メートル以上として読めるだけの海面気圧の変化が起きます。短い外出ならドリフトはわずかですが、数日の行程では効いてきます。このセンサーが絶対的な高さではなく相対的な変化のために信頼されるのは、そのためです。

同じライドなのにアプリごとに獲得標高が違うのはなぜですか

センサーが違い、ノイズの閾値が違い、平滑化の仕方が違うからです。獲得標高は計測値ではなくアルゴリズムの出力なので、同じ生の記録から違う合計が出るのは正当なことで、アプリをまたいで比べてもほとんど意味がありません。

ライドを失わない記録アプリ

Roam は測位点が届いたその瞬間に、走行中の累計値と同じトランザクションで端末へ書き込みます。信号が切れた区間は直線でつながず、切れた区間として残します。獲得標高は GPS の高度ではなく気圧センサーから読みます。アカウントもサインインも同期もありません。一本まるごと記録して、見て、再生するところまでは無料です。

App Storeでダウンロード

関連記事

記事一覧