GPSなしで地下鉄の位置を追跡するTransitアプリ
(blog.transitapp.com)- トンネル内で GPS・セルラー・Wi‑Fi が途切れても、TransitのGO tripは予測位置、残り駅数、ETAを表示し続けられるようになった
- 核心は、スマートフォンの 加速度計の振動信号 でユーザーが走行中の列車内にいるかを分類し、最後に確認できた位置と列車の時刻表を組み合わせて計算する方式
- Transitチームは数百件の旅程と複数都市の手動ラベリングデータを集め、New York City地下鉄では全路線に乗車して列車・エスカレーター・エレベーターの振動を記録した
- 最終的な位置予測モデル The Mixer は現在位置を90%の確率で当て、初期テストでは約400,000件の旅程における150万件の地下駅検知を支援した
- 2つのモデルは小さなファイルに圧縮されてスマートフォン上で実行されるため オフラインの駅カウント が可能で、振動データはTransitのサーバーに送信されない
地下で位置を特定しにくい理由
- 地下鉄、metro、U-Bahnのトンネル内では、セルラーサービス、Wi‑Fi、GPS が安定して動作しないことが多い
- これまでは地下で停車駅やETAを確認するには、ホームの表示板、駅の案内放送、車内のデジタル画面に頼る必要があった
- Transitは地上を貫通するGPS衛星を作る代わりに、スマートフォンの 振動パターン でトンネル内の列車位置を予測する
GO tripで表示される情報
- ユーザーはTransitで GO trip を開始すればよい
- 路線詳細画面からすぐに開始できる
- 計画した旅程からも開始できる
- アプリはGPS座標が分からなくても次の情報を表示する
- 地図上の 予測位置
- 残り駅数のカウントダウン
- 更新されたETA
ステップ1: 列車内の移動を分類
- GPSが不安定なトンネルに入ると、まずユーザーが 走行中の列車 にいるかを判別する必要がある
- Transit社員のStephenはMontrealのオフィスへ通勤しながら、スマートフォンで加速度計データを記録し、旅程の各区間にラベルを付けた
- 歩き始めた時点
- 階段を下りた時点
- ホームで待っていた時点
- 列車が発車し、停止した時点
- 加速度データはFourier transformに着想を得た方式で整理され、周波数データ に変換される
- 走行中の列車ではスマートフォンが約 5Hz で振動し、歩行時は約 2Hz として現れた
- ランダムノイズや高調波周波数のため単純なパターンだけでは不十分で、移動タイプを分類する機械学習モデルと大量の学習データが必要だった
ステップ2: 正解データの収集
- Transitチームは数百件の旅程と数十都市でデータにラベルを付け、列車や線路の種類に関係なく「走行中の列車」を判別する 汎化モデル を作ろうとした
- ÉtienneとElijahは、アプリで最も人気のある地下交通システムである New York City 地下鉄で振動データを収集した
- 2人はiPhone、Android、MetroCardを持ち、MTAのバスと列車に1週間乗って各旅程ステップにラベルを付けた
- 目的は、列車内の振動と駅構内の別の振動を区別する手がかりを見つけることだった
- エスカレーターとエレベーターを上り下りし、停止時点まで注釈を付けた
- BronxからBrighton Beachまで、Manhattan Bridge、Williamsburg Bridge、Canarsie Tunnelを含むNew Yorkのすべての地下鉄路線に乗車した
ステップ3: 移動分類器の学習
- 整理・処理されたセンサーデータを基に、motion classifier が「走行中の列車」と「走行中の列車ではない」を区別できるよう学習された
- モデルはラベルなしのセンサーデータを入力として受け取り、スマートフォンが走行中の列車、停車中の列車、歩行、エスカレーターでの移動のどこにあるかを推定する
- Transitはこの推定を手動注釈で作成した ground truth と比較し、より正確に予測できるようロジックを調整した
- 調整の結果、モデルはユーザーが実際に走行中の列車にいるのか、それとも単にスマートフォンだけが振動しているのかを区別できるようになった
ステップ4: 位置予測モデルThe Mixer
- 移動しているかどうかが分かった後は、ユーザーの列車が正確にどこにいるかを予測する必要がある
- 最後のモデルである The Mixer は次の要素に重みを付けて現在位置を計算する
- 移動タイプの予測、つまりユーザーが走行中の列車にいるかどうか
- ユーザーが最後に確認された位置
- 最後に確認された位置が最近か、かなり前か
- 列車の時刻表
- The Mixerは現在位置の予測を 90% の確率で当てる
- Paris RERの旅程例では、地下区間でGPSとBluetooth/Wi‑Fiスキャンによる断続的な位置更新が入り、この更新によって通信できない区間の地下位置予測を補正する
- ユーザーが地上に上がり、セルラーサービスのある地域に入ると、アプリは再び標準の GPS位置 を使用する
オフライン動作とプライバシー処理
- 位置予測が可能になると、地下でもユーザーの ETA を更新できる
- 不安定なGPSや車内画面の確認に頼らなくても、駅のカウントが可能になる
- 駅カウントは完全に オフライン で動作する
- motion classifierとThe Mixerは小さなファイルに圧縮され、スマートフォン上で実行される
- 振動データはTransitのサーバーに送信されない
- 追跡なし
- Cookieなし
- 振動データはユーザーの端末内に残る
使い方と初期テスト規模
- ユーザーは地下鉄を探してTransitを開き、GO で旅程を開始すると、駅が1つずつカウントダウンされるのを確認できる
- 初期テスト中、Transitは約 400,000件の旅程 で 150万件の地下駅 の検知を支援した
- GOのターンバイターンナビゲーションはすでに 600以上の都市 で数百万人の地上移動者に使われていた
- 先月リリースされた GO Bike 以降、自転車利用者もGOを使っている
- 今回の機能により、地下鉄利用者は通信状態が悪い区間でもGOをより信頼できるようになった
- アプリは Transitダウンロードページ から利用できる
1件のコメント
Hacker News のコメント
10年ほど前、フランスの会社 snips のブログ記事を読んだことがあるが、アプリが気圧センサーで列車が駅に入る瞬間や出る瞬間を検知する仕組みだった。
駅間のトンネルに列車が進入したり出たりするときに急激な気圧の上昇/低下が起きるので、かなりはっきりした信号が得られると言っていた。
見つけた: https://medium.com/snips-ai/underground-location-tracking-3e...
このチューブは圧力の急上昇を検知して、ドアが人の手を挟もうとしているかを判断でき、トンネル進入時の圧力差で生じる「ドン」という効果を抑えるのにも使われる。
すべてのスマートフォンに気圧センサーがあるわけではなく、機種ごとの測定品質の差も大きい。例えば、ある端末ではスマートフォンを強く握るだけで値が跳ねた。
Transit には気圧センサーの読み取り権限もなく、私たちの用途ではその権限を求めるだけの正当性を示すのが難しかった。
ただし精度は、電力網の電流が直流か交流か、さらには車両の年式によっても変わっていたようだ。
建物は完成していたが運用されていなかったため、ほぼ10年間、地域の鉄道会社が列車を建物の内外に走らせなければならなかった。
本当にすばらしい。
今まさに、自分の下を London Underground が通過する 音を録音する プロジェクトをやっている。
私たちの下を走る Northern Line は非常にはっきり聞こえ、深さは30mにも満たない。
高品質な低周波録音で列車が通過する音を捉えることに取りつかれてしまった。なぜかは分からないが、頭から離れない。
例えばトンネルは北行き/南行きの2本があるが、実際の TfL データと相関させて、それぞれの音のシグネチャを区別できるのか気になっている。
さらに興味深いのは、営業終了後に私たちの下で走る保守車両を「捕まえられる」かどうかだ。
このプロジェクトで他に何ができるのかは分からないが、自分の下で動く、半ばはかない生き物のような存在の音を捉えるという考えに取りつかれている。
私は静止状態の日常物体から出る極めて弱い高周波振動に関心があるが、おそらく目標はほぼ逆なのだと思う。センサーの入手についてはまだあまり進展がない。
レーザードップラー振動計が欲しいが、価格が高い。
誰がやっていたのか探してみる。
[0] https://lamont.columbia.edu/
歩道の非常口から漏れた音だったのか、それとも地面が鐘のように鳴っていたのかは分からない。
記事の 会話調のトーン が本当に良かったことも、少し認めておきたい。
周波数チャートのようなかなり細かな説明に入っても、読むのが楽しかった。英語版を読んだ。
書いた人は本当に見事にやり遂げている。
Transit App は宝石のようなアプリだ。
「分類器」という言い方が親しみやすい。記事全体を書きながら AI という言葉を一度も出していない点が印象的だ。
一部の都市では、トンネルに BLE ビーコン を設置して位置を送信し、最も強いビーコン信号で現在位置を見つけられるようにしている。
ハードウェアを設置せずにこれを把握する方式なので、良さそうに見える。
もちろん公平に言えば、その画面は笑ってしまうほど頻繁に間違っていて、「お忘れ物にご注意ください」のような役に立たないメッセージをローテーション表示するので、欲しい情報を見るには20秒ほど待たなければならない。列車内では致命的にひどい。
駅間の進行状況は、各線路区間の 加速度シグネチャ を検知すれば、よりうまく追跡できそうだ。
完全に直線で平坦な線路でないなら特にそうで、GPS 以前の初期の車載ナビゲーションのように見える。当時は推測航法を使い、測定した経路の形を地図データと照合してドリフトを補正していた。
より信頼できる方法は、加速度計で線路の特徴を確認することかもしれない。勾配、カーブ、凹凸、あるいはそれらの組み合わせのようなものだ。
カーブ時の音、トンネル合流区間で背景が変わる変化なども使える。積分した加速度は列車速度を与えるので、他の入力と組み合わせると有用だ。
シグネチャを収集できればすばらしいが、都市とスマートフォンを広くカバーするには膨大な作業になる。Google や Apple のような会社ならデータと能力があるかもしれないが、小さな会社では可能性は低い。
車輪の回転数と連動する非常に独特なうなり音がある。以前、SFT、ピーク検出、カルマンフィルタリングで粗い速度計を作ったことがある。
Transitユーザーとして、こんな素晴らしいアプリを作ってくれてありがとう。これは常に最大の不満の一つでした。
Transitだけでなく、公共交通ナビゲーションをサポートするどのアプリでも同じで、Apple Mapsも例外ではありません。
誰かがこれに取り組んでいるだろうとは思っていましたが、設計に込められた考慮と細部のレベルを読むと本当にすがすがしいです。ものすごい努力だったと思います。
Transitチームは、公共交通アプリの小さいけれど大きな不満の一つを解決したことを誇っていいと思います。
本当にすごい。BARTによく乗るので、トンネルの位置ごとに異なるキーキーいう音をもとに位置分類器を作ったら面白いだろうと、いつも思っていました。
でも加速度計データを使うほうがずっと実用的そうです。
列車が走る騒音を録音して動きを把握することはできるでしょうが、ユーザーはアプリが自分を盗聴しているのではないかと疑うでしょう。
機械学習に加えて、加速度計とジャイロスコープで推測航法を行えば、ずっと良くなるのでは?
動いている列車内では、既知のトンネル経路に沿って移動するよう制約し、列車の発車が検知されたら、ユーザーが列車の停車矩形内にいると制約する、といった具合です。
それとも追加情報があっても、スマートフォンのハードウェアがあまりに不正確なのでしょうか?
ジャイロスコープだけでも短い移動では非常によく動作しますが、長く緩やかなカーブではほとんど役に立たなくなります。MEMSジャイロスコープは数十秒の間にかなり大きくドリフトします。
磁力計と加速度計でセンサーフュージョンができれば問題は軽くなりますが、高速の列車では加減速やカーブでの力のせいで「下」を見つけるのが難しくなります。地下鉄トンネル内でコンパスがどれほどよく動くのかも分かりません。
航空機で「人工水平儀」アプリを使った経験しかありませんが、そこでは加速度計は「下」を見つけるのにまったく役に立ちませんでした。数Gがかかる機動を一度でも行うと、水平儀はピッチ角を完全に見失います。磁気環境がノイズだらけでGPSも切れていれば、どちらへ向かっているのかも分かりません。
ただし推測航法は一般に非常に不正確なので、列車に乗ったことを認識できれば、列車がどこにいるかを正確に分かるため、精度を大きく高められます。
列車が止まるたびにユーザーが十分にじっと立っているか座っていればIMUバイアスを補正できるでしょうが、それでも推測航法はかなりドリフトしそうです。
過去の記録に対する現在の速度を推定し、到着時刻を予測すればよいのです。だから加速度より速度に注目したほうがよいでしょう。
先週New York subwayでこの機能を使ってみました。新機能だとは知りませんでした。
アイデアは素晴らしいですが、私にはうまく動かず、アプリは列車が実際の位置より何駅も後ろにいると表示していました。