1. 概要
ARCore は、スマートフォンで拡張現実(AR)エクスペリエンスを構築するための Google のフレームワークです。新しい ARCore Geospatial API は、拡張現実に新たな側面をもたらし、現実世界のランドマークの周囲に場所固有の拡張現実の地点を配置できます。
作成するアプリの概要
この Codelab では、ARCore Geospatial API の使用を開始します。Geospatial API が AR エクスペリエンス全体に提供できる情報と、そのデータを使用してシンプルな AR 案内体験を実現する方法について学びます。
学習内容
- Geospatial API を使用する ARCore プロジェクトをセットアップする方法
- Geospatial API に地理データをリクエストし、Google マップを使用して表示する方法
- 実際の場所に付加する Anchor を配置する方法
必要なもの
- ARCore 対応の Android デバイス(USB ケーブルで開発マシンに接続され、USB デバッグが構成されていること)。
- Android Studio がインストールされ、Android アプリをビルドできるように構成されていること。
- Android 開発用デバイスにインストール済みの Google Play 開発者サービス(AR) 1.31 以降。
2. 開発環境を設定する
Android Studio を設定する
Geospatial API を使い始めるにあたって、Google Maps SDK と統合された ARCore プロジェクトの基本が含まれたスターター プロジェクトが用意されています。これにより、Geospatial API をすぐに使い始めることができます。
- Android Studio を起動し、VCS からプロジェクトをインポートします。
- すでにプロジェクトを開いている場合は、[File] >新規 >Project from Version Control...
- [Welcome to Android Studio] ウィンドウが表示されたら、[Get from VCS] を使用します。
- [Git] を選択し、URL
https://github.com/google-ar/codelab-geospatial.git
を使用してプロジェクトをインポートします。
Google Cloud プロジェクトの設定
Geospatial API は、ストリートビュー画像をデバイスの磁力計およびカメラセンサーの情報と組み合わせて、向きの値を改善します。このサービスを利用するには、Google Cloud プロジェクトを設定する必要があります。
- Google Cloud コンソールでプロジェクトを作成します。
- Google Cloud Platform でプロジェクトを作成するをご覧ください。
- 適切なプロジェクト名(「ARCore Geospatial API project」など)を入力し、任意の場所を選択します。
- [作成] をクリックします。
- Google Cloud Platform でプロジェクトを作成するをご覧ください。
- 必要な API を有効にします。
- API キーの認証情報を作成します。
これで、API キー承認を使用して Google Cloud プロジェクトを作成し、Geospatial API を使用する準備が整いました。
API キーを Android Studio プロジェクトと統合する
Google Cloud から取得した API キーをプロジェクトに関連付けるには、Android Studio で作成したプロジェクトを開き、API キーを変更します。
- アプリを開く >src >AndroidManifest.xml に作成されます。
- 次の
meta-data
エントリを見つけます。<meta-data android:name="com.google.android.ar.API_KEY" android:value="PLACEHOLDER_API_KEY" /> <meta-data android:name="com.google.android.geo.API_KEY" android:value="PLACEHOLDER_API_KEY" />
PLACEHOLDER_API_KEY
は、Google Cloud プロジェクトで作成した API キーに置き換えます。
com.google.android.ar.API_KEY
に格納された値は、このアプリによる Geospatial API の使用を承認し、com.google.android.geo.API_KEY
に格納された値は、このアプリによる Google Maps SDK の使用を認可します。
プロジェクトを検証する
プロジェクトの準備が整っていることを確認します。Android Studio でアプリを実行します。カメラビューが表示され、画面下部に有効な地図が表示されます。
3. ユーザーの現在地を特定する
このステップでは、サンプル プロジェクトにコードを追加して、Geospatial API の使用を開始します。
Geospatial API を使用するように ARCore セッションを構成する
地理空間データを取得するには、Geospatial API を有効にする必要があります。HelloGeoActivity.kt
の configureSession
関数を変更して、セッション構成の GeospatialMode
を ENABLED
に変更します。
fun configureSession(session: Session) {
session.configure(
session.config.apply {
// Enable Geospatial Mode.
geospatialMode = Config.GeospatialMode.ENABLED
}
)
}
地理空間モードが ENABLED
の場合、アプリケーションは地理空間情報を取得できます。
Geospatial API からデータをリクエストする
HelloGeoRenderer.kt
で次の行を見つけます。
// TODO: Obtain Geospatial information and display it on the map.
その下で、Earth オブジェクトが使用できることを確認します。この時点で、trackingState
TrackingState.ENABLED
になっています。
val earth = session.earth
if (earth?.trackingState == TrackingState.TRACKING) {
// TODO: the Earth object may be used here.
}
TODO
の下で、ARCore の地理空間情報をリクエストします。次の行を追加します。
val cameraGeospatialPose = earth.cameraGeospatialPose
これにより、次の情報を含む GeospatialPose
が得られます。
- 緯度と経度で表した場所。位置情報の精度の推定値も提供されます。
- 高度、推定標高精度
- 方位、デバイスの向きのおおまか、方角の精度の推定値。
地図上に位置情報を表示する
cameraGeospatialPose
に保存されている GeospatialPose
を使用して、ユーザーの現在地を示すマーカーを地図上に移動できます。中断したところから再開して、以下を追加します。
activity.view.mapView?.updateMapPosition(
latitude = cameraGeospatialPose.latitude,
longitude = cameraGeospatialPose.longitude,
heading = cameraGeospatialPose.heading
)
これにより、Geospatial API から取得した値を使用して、地図の位置が継続的に更新されます。
試してみる
Android Studio で [Play] をクリックします。デバイスを上げて動かすと、ARCore がトラッキングを確立できるようになります。しばらくすると、地図上に緑色のマーカーが表示されます。周囲を見回すと、このマーカーが回転します。また、正しい方向を向いている必要があります。物理的に北を向いている場合、矢印も北を指しています。
4. 地球の座標を使用してアンカーを配置する
Geospatial API を使用すると、現実世界の任意の座標ペアと回転にアンカーを配置できます。これにより、特定の場所を訪れる際にアンカー コンテンツをユーザーに表示できます。
このステップでは、地図をタップしてアンカーを配置する方法を追加します。
地図がタップされたときのアクションを設定する
このプロジェクトには、地図フラグメントがクリックされたときに緯度と経度を指定して呼び出される onMapClick
関数が含まれています。HelloGeoRenderer.kt
で onMapClick
関数を見つけます。
Earth オブジェクトが使用可能であることを確認する
Earth にアンカーを作成する前に、Earth オブジェクトの TrackingState
が TRACKING
(つまり、地球の位置がわかっているもの)であることを確認してください。また、EarthState
が ENABLED
であることも確認してください。つまり、Geospatial API で問題が検出されなかったことを意味します。onMapClick
内に次の行を追加します。
val earth = session?.earth ?: return
if (earth.trackingState != TrackingState.TRACKING) {
return
}
新しい Anchor の配置を決定する
Earth オブジェクトがトラッキングしていることを確認したら、以前の earthAnchor
がある場合はデタッチします。次の手順で earthAnchor
を新しいアンカーに置き換えます。
earthAnchor?.detach()
次に、cameraGeospatialPose
を使用して、新しいアンカーの高度を決定します。地図をタップしたときの座標ペアをアンカーの位置として使用します。
// Place the earth anchor at the same altitude as that of the camera to make it easier to view.
val altitude = earth.cameraGeospatialPose.altitude - 1
// The rotation quaternion of the anchor in the East-Up-South (EUS) coordinate system.
val qx = 0f
val qy = 0f
val qz = 0f
val qw = 1f
earthAnchor =
earth.createAnchor(latLng.latitude, latLng.longitude, altitude, qx, qy, qz, qw)
createAnchor
は、指定された回転の測地座標に固定された Anchor
を作成します。このアンカーは、指定された座標と高度で安定した状態を維持しようとします。
地図上に配置したマーカーを表示する
最後に、マーカーの位置を示す新しいマーカーを移動します。
activity.view.mapView?.earthMarker?.apply {
position = latLng
isVisible = true
}
試してみる
Android Studio で [Play] をクリックします。デバイスを上げて動かすと、ARCore がトラッキングを確立できるようになります。しばらくすると、現在地を示す緑色のマーカーが地図上に表示されます。
地図をタップすると、Geospatial API を使用して、現実世界の場所に固定されたアンカーを配置します。AR ビューでアンカーを確認できるようにするには、現在地の近くにアンカーを配置してみてください。操作中も安定した状態を維持します。
5. まとめ
この Codelab では、Geospatial API を使用して、現実世界と結びついたシンプルな AR エクスペリエンスを作成する方法を学習しました。
学習した内容
- Geospatial API を有効にして Google Cloud プロジェクトをセットアップする方法。
- ARCore プロジェクトで地理空間情報を取得して地図上に表示する方法。
- 地理的位置を使用して現実世界に配置するアンカーを配置する方法
参考情報
この Codelab で使用する地理的コンセプトと SDK の詳細については、以下の参考情報をご覧ください。