Acty-G1/G2/G3 GPS測位アプリの開発

f:id:covia:20200904143335p:plain

Androidを使ったGPS測位アプリの開発

Acty-G1/G2/G3は、Android OSを搭載したGPSトラッカーやBeaconゲートウェイなどの固有のAndroid  APKを開発し、運用いただく組み込み向けシステムですが、GPSトラッカーのアプリを開発する際に生じる様々な課題があります。典型的な課題は、GPS測位情報を毎秒取得してマップに現在位置を記録する場合、値が大きく変動し、現在位置がマップ大きく離れたポイントにジャンプしてしまうことです。これはActy-G1/G2/G3固有のものではなく、GPS測位の共通課題です。ここでは、Fusedを利用したサンプルアプリを開発し、Actyのお客様限定で、ソースコードをご提供する予定です。特定のしきい値を超えた精度で値を破棄するのではなく、カルマンフィルターを用いて、補正を行います。


測位アプリが使える要素データ

  1. その瞬間のAccuracyの高い測位値(GPS測位による)
  2. 過去のAccuracyの高い測位値(GPS測位による)
  3. Accuracyの低い測位値(Wi-Fi基地局による)

 

測位データが取れない時の補間方法

  1. 車で移動している場合、Accuracyの低い測位値と古いデータは、前者のほうが意味があることが多い。
  2. 徒歩で移動している場合、Accuracyの低い測位値と古いデータでは、後者のほうが精度が高い場合がある。なぜなら移動の距離が短いからである。

 

 Fused Location Providerの特性

  1. GPSは衛星数が4個未満になると測位ができない
  2. GPSは原理的に、定期的に測位データが取得できないことがある
  3. これを補間するためにFusedを使うのが簡単である
  4. Fusedは、複合測位なので、GPSが取れない場合は、Wi-Fi基地局測位を自動で行い、測位の方法や衛星数などは取得できない
  5. それぞれの測位手段での精度(Accuracy)は以下になる(実測経験に基づく)
  1. Fusedを使えば原理的にはデータが取得できないケースはないはずだが、実際にはある。これはGoogle Service Libraryのバグと思われる。実運用で、データが取得できない場合の処理をどうするかは、アプリ次第になる

Fused Location Providerの基本パラメータ

開発中のサンプルは以下の基本パラメータで行ってます。

  1.  .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
  2.  .setInterval(2000); //2 second
  3.  .setFastestInterval(1000); //1 second

カルマンフィルター

カルマンフィルター (英: Kalman filter) は、誤差のある観測値を用いて、ある動的システムの状態を推定あるいは制御するための、無限インパルス応答フィルターの一種です。

 

参考サイト 

stackoverflow.com