Navigation App

Navigation App

1.紹介

1.1 Navigation Appとは

  1. このアプリケーションはGPSを使って目的地を簡単に見つけてくれます。
    Augmented Reality[1], AR(Augmented Reality)の技術で、現実世界の中に目的地を表示します。
  2. ARについての記述資料として iOS (use ARKit[2] – Apple) 、 Android (use ARCore[3] – Google)をご参照ください。

1.2 Navigation Appの動作

  1. GPSを使い現在地を取得する。
  2. ARを使い端末のモーションセンサーで表示している物体の動きを追い、現実世界を写しているカメラの向きや動きを組み合わせます。[4]
  3. この組み合わせた情報を使用することで現実の世界に3Dの物体を組み合わせたものを2Dのスクリーンに描写することができます。
  4. 表面を特定するためのコントラストの調整がとても重要です。表面が白すぎても、暗すぎてもうまく動作をさせることができません。

 

2. 開発に必要なもの

2.1 iOS

  1. iOS 11 またはそれ以降のバージョン
  2. A9 processor またはそれ以降のiOS端末 (iPhone SE, 6S またはそれ以降のバージョン, all iPads Pro models, iPad 2017 またはそれ以降のバージョン).[5]
  3. Xcode 10.2.1 またはそれ以降のバージョン

2.2 Android

  1. Android 7.0 (Nougat) またはそれ以降のバージョン
  2. ARCoreサポート端末。対象端末は こちらを参照。[6]
  3. Android Studio 3.1 またはそれ以降のバージョン

 

3.iOSクイックスタート

3.1 Xcodeを開ける

3.2 Choose File ➤ New ➤ Projectを押下します。

3.3 “Augmented Reality App”アイコンを押下し、 “Next”ボタンを押下します。次に”product name”, “organization name”, “organization identifiers”を入力します。

3.4 Content technology ➤ SceneKitを押下します。

3.5 Info.plist:

  • “Privacy – Camera Usage Description”と“Privacy – Location When In Use Usage Description”のKeyとdescriptionsを追加します。
  • “Required device capabilities”のTypeを“arkit”に設定します。

 

4.Android クイックスタート

4.1 Android studioを開けます。

4.2 Choose File ➤ New ➤ New Projectを押下します。

4.3 root buildに”JitPack”を追加します。その後gradleのrepositoriesの最後に下記のように追加します。

4.4 build.gradleのdependencyにSceneformライブラリを追加します。

4.5 ManifestにARCoreの使用の許可を追加します。

5.主な機能

5.1 現在地周辺の目的地を現実世界とアレンジしたような形で目的地の距離を表示します。現在地が変更されると目的地までの距離も変更されます。

5.2 カテゴリと目的地のリストの表示と検索ができます。このスクリーンで目的地を表示するかどうかを選択することができます。

5.3 マルチ言語サポート。現在日本語、英語、ベトナム語で表示ができます。

5.4 目的地の情報を表示。選んだ目的の情報を表示することができます。

6.感想

6.1 GPSの位置の誤差

  1. 実際のところコンパスは正確に動作していますが、位置情報については一時的に実際とは離れた位置を取得することがあります。
  2. androidとiOSで少し機能の差があります。位置情報が異なる値で返ってくることがあり、取得したものをそのまま表示し比較すると異なった位置で表示されてしまうことがあります。
  3. 標高についても異なって表示されることがあります。Android端末では時々標高自体がアプリ起動中に取れないこともありました。

6.2 端末でAR上に場所を表示

  1. 端末内にカメラで表示している画像に実際の場所をマッピングさせる開発にはかなりの時間が取られました。なぜならロケーションを取得するSDKが時々正常に動作せず、
    ロケーションSDKのARを使ったロケーションではなく、計算をしてARに場所の表示を行うようにしました。
    – Step 1: 位置情報から目的地までの距離を計算し、次に、一時的なタイトルと距離を含むViewを作成します。
    – Step 2: 計算した距離情報を3D ARで表示するため3D用の位置情報(x, y, z)にコンバートします。
    – Step 3: Step1で作成したViewをStep2で作成した位置情報でViewの縮尺を計算し、ARのスクリーンに追加します。
    – P/S: 現在地が移動している間、一定時間ごとに距離を計算し表示を行います。
  2. それ以外に、表示をわかりやすくするために距離でソートを行いその順番で表示します。ただ、あまりに近いと高度の表示に影響が出ます。
  3. 最後に、カメラの表示やそのほかの表示に影響を与えないようにしながら、距離情報のウィンドウをドラッグで動かせるようにしました。

6.3 バッテリー消費の注意

  1. カメラとGPSこの2つの機能がかなりのバッテリーを消費します。それはアプリを使用中いつも起動しているからです。このようなことから、長時間使用していると端末がかなり熱くなることがあります。

7. 改善点

ユーザにこのアプリケーションの使用感を上げるためには、いくつかのパフォーマンスの改善を行う必要があると思います。

7.1 距離により場所の表示を調整する。

  1. Android,iOS両方でかなり短い距離の場合の表示では画面のすぐ前に距離のウィンドウが表示されます。この場合、ほかの距離の表示も全てはっきり見えるように、AR上の距離の計算を行い端末に適応した表示にアレンジする必要があります。

7.2 全ての距離表示ウィンドウの再表示の停止
定期的に、アプリは全ての距離表示を距離測定から再計算し新しい値としてアップデートします。
例えば改善点は下記です。

  1. もし半径10m以内の現在地の変更であれば、全ての再表示は行わない。
  2. カメラを動かすだけのスクリーン上の移動であれば、UIの再表示は行わない。

 

8.   謝辞

このアプリでは、ProjectDent[7] (iOS) と Appoly[8] (Android)を使用させて頂いてます。

 

9.参考文献:

[1] https://en.wikipedia.org/wiki/Augmented_reality

[2] https://developer.apple.com/augmented-reality/

[3] https://developers.google.com/ar/

[4] https://developers.google.com/ar/discover/concepts

[5] https://developer.apple.com/library/archive/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/DeviceCompatibilityMatrix/DeviceCompatibilityMatrix.html

[6] https://developers.google.com/ar/discover/supported-devices

[7] https://github.com/ProjectDent/ARKit-CoreLocation

[8] https://github.com/appoly/ARCore-Location