スマートフォンを用いたリアルタイムGPSトラッキングシステムを開発しました

こんにちは。東京工業大学4年の上野です。

この記事はオリエンティアAdvent Calendar 16日目の記事です。 タイトルにある通り、スマートフォンを用いたリアルタイムGPSラッキングシステム「trako」を開発しました。オリエンティアAdvent Calendarを活用して広く拡散できればいいと思い記事にしました。記事を執筆する機会を与えてくれてありがとうございます。

リアルタイムGPSラッキングの現状

皆さんは国際大会のGPSラッキングを見たことがあるでしょうか。今年のJWOC,WOC,WUOCでもGPSラッキングが利用され、Twitterなどでリアルタイムに日本選手の応援をすることができました。これは非常に面白くオリエンテーリングの様子を伝えるのにも役立つので、日本でも実現できればもっとオリエンテーリング界隈が活気づきそうですよね。

f:id:cola119:20181027024450p:plain
WOC2018 Middle distance Men

海外のGPSラッキング技術は主にこの会社によるものだと思います。ここでイベント一覧を参照することができます。2010年から始まっていて毎週のように利用されていることに驚きです。

このシステムの完成度には驚きです。動作は安定していて精度もよく、デサインも洗礼されています。イベント後はリプレイを見ることができたり軌跡をgpxデータとしてダウンロードすることもできます。

そんな中、昨年度からインカレでもGPSラッキングが導入されました。ですが、更新頻度や精度、UI/UX面で多くの課題が残っているように思いました。(もちろんGPSラッキングの導入を否定しているわけではありません。)

インカレで使用したGPSラッキングシステムは日本ロゲイニング協会からレンタルしたものだと記憶しています。ロゲイニングをトラッキングする場合であれば選手の大体の位置がわかれば十分であり、毎秒更新であったり高い精度を求める必要はないのかもしれません。

f:id:cola119:20181027024645p:plain
インカレロング2018

開発のきっかけ

やっぱり海外のシステムのような高精度で高品質なトラッキングを実現して、インカレの観戦がもっと盛り上がって欲しいものです。

運良く私は少しばかりパソコンに詳しくプログラミングができたので、海外のもののようなシステムは簡単ではないが開発できると思いました。ですが、開発する上でネックとなったのはGPS端末です。私には半導体の知識はなく、GPS端末を自作するとなると時間・費用・やる気の面でかなりのコストがかかってしまいます。 個人がロゲイニング協会からレンタルするのも難しそうです。

そこで色々調べて考えたのですが、GPS技術を使った身近なデバイスとしてスマートフォンがあることに気づきました。Android,iOSともにアプリ開発に大したコストはかからず、しかも4G回線をデフォルトで利用できます。難しいことは考えずとりあえずシステムを開発するには十分であると思い開発に取り掛かりました。

今回開発したシステム

f:id:cola119:20181213190757p:plain:w500

前述の通り、選手の位置情報を送信する端末はスマートフォンを用います。スマホで専用アプリを起動しておくと、スマホが位置情報を取得するたびに4G回線を使って用意しておいたデータベースに位置情報が送信されます。このデータを受信するたびにトラッキングサイトの描画を更新します。この流れをリアルタイムに行えればいいわけです。

①今回はスマートフォンとしてiPhoneを用いました。iOSアプリ開発にはSwiftを用います。中身はとても単純なものですが、Swiftの仕様上、位置情報受信間隔は最短1秒となりました。Androidの場合はもっと短い間隔で受信できるかもしれません。

SwiftのGPS関係(LocationService)を触るのは初めてでしたが割と簡単に実装できました。次のサイトが非常に参考になりました。

medium.com

②データベースとのデータのやり取りですが、ここもリアルタイムでやらなければなりません。というか、ここをリアルタイムで実現することがリアルタイムGPSラッキングの全てと言っても過言ではありませんね。

ここの実現が一番むずかしいと思っていましたが、Firebase Realtime Databaseを用いることでとても簡単に実装できました。これはその名の通り、一つのRealtime Databaseインスタンスを共有すれば各プラットフォームでリアルタイムでデータを同期することが来ます。更に素晴らしいことに、デバイスがオフラインになってもローカルにデータを保存していて、オンラインに戻ったときにオフライン中のデータを自動的にマージすることもやってくれます。深い沢やヤブの中、そもそもキャリア回線が整備されていないエリアで使用したとしても、GPS信号さえ受信できていればGPSロガーとして機能するということです。レース後に電波のある場所へ行けば軌跡を復元できます。

③選手の位置情報を(ほぼ)リアルタイムで取得できたので、あとはこれをもとに選手の分身を移動させるだけです。ここではD3.jsとGoogle Map APIを用いて実装しました。しっぽの移動が難しかったです。

実験

フォレストでの実験

鳥追窪で行われた部内の練習会のときにはじめての実地での実験を行いました。使用した端末はiPhone8pulsです。 トレランザックの外ポケットに入れて走ってもらいました。

www.youtube.com

電波状況を心配していたのですが、ほとんどの区間で途切れることなく送受信できていました。下絵(O-map)とGoogle Mapの重ね合わせでズレが若干生じた部分があったものの、トラッキングとしては十分な精度だと思います。

f:id:cola119:20181214000806j:plain:w400
軌跡をあとから確認できる

さっきも書いた通り、途中で電波を失って送信できなくなったとしても、ローカル(端末側)は位置情報を保持していて次に電波を測位したら自動的に圏外区間の位置情報も送信してくれます。なので軌跡をあとから確認した場合は抜けなく表示することができます。

複数ユーザーの表示

上の実験ではアプリをインストールした端末を1台しか用意していなかったので一人しか表示されていませんが、複数人表示もできます。

www.youtube.com

Xcodeのシミュレータなので米国AppleStoreの周りを移動しています。海外のもののように、端末が圏外になったときは色が薄くなるようにしています。

今後の課題

今回はスマートフォンを用いてリアルタイムGPSラッキングシステムを実装しました。まだ本格的に運用するには不十分な完成度かなと思います。

GPS端末にスマートフォンを用いるということ

スマートフォンは大きくて重いです。持って走るには結構厳しいですよね。この世界最小のスマホを使えば解決するかもしれません。 また、GPS精度は端末側に依存しますが、安価で軽く小さいスマホGPS精度が悪い傾向にあります。また、競技者が外部と通信できるデバイスを持っていることをよく思わない人がいるかも知れません。

山中での電波状況

ご存知の通り、必ずしも山中で4G,3G回線が通じているとは限りません。ぶっちゃけこれはどうしようもない問題のような気もします(電波が通じない場所じゃそもそも観戦もできない)。 ただ世の中には便利なものがあって、LPWA (Low Power, Wide Area)という無線規格が存在します。これは適当な言い方をすると遠距離でも通信できるBluetoothみたいなもので、ゲートウェイを設置することで4G回線を使わずデバイスと通信することができます。 山岳遭難を防ぐために導入された事例もあるようです。

soracom.jp

海外のトラッキングはかなり安定して通信できているので、もしかしたらこの技術を使っているのかもしれません。LoRaやSigfoxといったLPWA規格はヨーロッパで広く使われているみたいで、最近日本にも普及し始めているようです。LPWAについてはまだよくわかっていないのでこれから調べていこうと思います。

ランニングコスト

1選手を1レーストラッキングするのに必要な費用を考えてみました。

  1. スマホGPS端末):私物なら0円
  2. 開発費
    • iOSアプリはストアに公開する場合、年間99ドル(11,000円)
    • FIrebase利用料:様々なプランがありますが、一月あたり1GB保存、10GBダウンロードまでは無料です。座標情報を扱っているだけなら十分な範囲だと思います。
    • Google Map API利用料:料金体系がよくわかっていないのですが、月200ドルまで無料なので大丈夫でしょう(適当)。とりあえずGoogle Mapを使っただけなのでLeaflet.jsを使えばフリーで運用できると思います。

考えてみたものの、スマホを使えばほとんどお金をかけずに運用できそうです。

O-mapの公開範囲

これはあまり本質的ではありませんが、日本ではO-mapは著作物でありパブリックにするべきではないと考えている人が多いようです。僕はむしろもっとパブリックにした方がいいと思います。

開発

今後需要がありそうならさらに開発を続けていこうと思っています。UIを改善して、リプレイやGPXエクスポート機能をつければ最低限、海外のものに近づけると思います。あとはApple WatchのCellularモデルは腕時計単体でモバイル通信が可能なので、Apple Watch専用アプリを作ればスマホを持たずにトラッキングができそうです。腕時計なら競技中につけてても違和感ないので、まさに理想のトラッキング環境と言えるでしょう。ただApple Watchは6,7万するのでなかなか手が出ないのと、6,7万の腕時計をつけて森を走り回るのはちょっとだけ勇気が必要です。卒論の闇から開放されたら色々試してみようと思います。

今後

スマートフォンGPSでも最低限のトラッキングを実現することができました。

現在、作ったアプリは一般に公開していません。今後どうするかは考え中です。練習会でトラッキングを使ったとして、面白いかもしれませんがただそれだけな気がします。それに練習会ではスマホを見ずに練習したほうがいいと思います。 すぐにルートを振り返えれるという点では良いかもしれません。

普及という面では、オリエンテーリングを初めて体験する人にスマホを持って森に入ってもらうのはいいかもしれません。スマホでアプリを起動しながらトラッキングサイトを開けば、今自分がいる場所をリアルタイムでO-map上で確認することができます(地図アプリみたいな感じ)。競技性は失われますが、一人で森に入るのが怖い人でもスマホを持っていれば現在地を確認したり、外部に連絡を取ることができます。 フィニッシュしてすぐにどこを通ってきたのかを確認できるので、レースの振り返りにも最適だと思います。体験会に来てくれた人が事後にルートを思い出して分析するのって結構難しいことだと思います。このシステムなら、全員のルートが同時に見れるので参加者全体にアドバイスしたりお互いに反省しあうことができます。こうやってレース後に振り返ってもらうことで、次の参加へのインセンティブになるんじゃないかなとも思います。

大会で使うことを考えると、今年のCCMやインカレのように会場に観戦者がいるような大会が向いていると思います。ただ競技性を重視するとスマートフォンより専用の端末の方がいいですね。

終わりに

オリエンテーリングは競技中の様子を捉えるのが困難な上に、言葉でナビゲーションの面白さ・難しさを伝えにくいです。しかしうさぎのアジトさんの記事にもあるように、オリエンテーリングはかっこいい競技だと思います。GPSラッキングが身近なものになって誰でも簡単に選手の動きを見れるようになれば、オリエンテーリングのかっこよさをちょっとは伝えられるんじゃないかなと思います。

GPSラッキングサイトをもっとより良いものにできると思います。 また、GPS端末の仕様や現行のビジネスモデルを知りたいです。

  • 演出好きな運営者様へ

ちょっとしたイベントでGPSラッキングを試してみたいです。ロゲイニング協会からレンタルしたGPS端末を使ってももっといい表示にできると思います。

  • 半導体・電気電子の知識がある人へ

協力してGPSラッキング事業を始めませんか。Androidアプリを開発できる人、通信・GPSモジュールを使って位置情報送信デバイスを開発できる人いませんか。

もし何か聞きたいことがあれば気軽に連絡してください!