새로운 ARCore Geospatial API를 사용하여 증강 현실 (AR) 앱 빌드

1. 개요

ARCore는 스마트폰에서 증강 현실 환경을 빌드하기 위한 Google의 프레임워크입니다. 새로운 ARCore Geospatial API는 증강 현실에 새로운 측면을 부여하여 실제 명소 주위에 위치별 증강 현실 경유지를 배치할 수 있도록 합니다.

빌드할 항목

이 Codelab에서는 ARCore Geospatial API를 시작합니다. Geospatial API가 전반적인 AR 환경에 어떤 정보를 제공할 수 있는지, 이 데이터를 사용하여 간단한 AR 길 찾기 환경을 강화하는 방법을 살펴볼 수 있습니다.

학습할 내용

  • Geospatial API를 사용하는 ARCore 프로젝트 설정 방법
  • Geospatial API에서 지리 데이터를 요청하고 Google 지도를 사용하여 표시하는 방법
  • 실제 위치에 연결된 앵커를 배치하는 방법

필요한 항목

2. 개발 환경 설정

Android 스튜디오 설정

Geospatial API를 시작할 수 있도록 Google Maps SDK와 통합된 ARCore 프로젝트의 기본사항이 포함된 시작 프로젝트가 제공됩니다. 이를 통해 Geospatial API를 빠르게 시작할 수 있습니다.

  1. Android 스튜디오를 시작하고 VCS에서 프로젝트를 가져옵니다.
    • 이미 프로젝트가 열려 있다면 File > New > Project from Version Control...을 사용합니다.
    • Welcome to Android Studio 창이 표시되면 Get from VCS를 사용합니다. VCS 위치에서 가져오기
  2. Git을 선택하고 URL https://github.com/google-ar/codelab-geospatial.git를 사용하여 프로젝트를 가져옵니다.

Google Cloud 프로젝트 설정

Geospatial API는 기기의 자기계 및 카메라 센서 정보와 결합된 스트리트 뷰 이미지를 사용하여 방향 값을 개선합니다. 이 서비스를 이용하려면 Google Cloud 프로젝트를 설정해야 합니다.

  1. Google Cloud 콘솔에서 프로젝트를 만듭니다.
  2. 필요한 API를 사용 설정합니다.
    • 사이드바에서 API 및 서비스라이브러리를 차례로 선택합니다.
    • ARCore API를 검색합니다.
    • 사용 설정을 클릭합니다.
    • 라이브러리로 돌아갑니다.
    • Android용 Maps SDK를 검색합니다.
    • 사용 설정을 클릭합니다.
  3. API 키 사용자 인증 정보를 만듭니다.
    • API 및 서비스에서 사용자 인증 정보를 선택합니다.
    • 상단 표시줄에서 사용자 인증 정보 만들기를 클릭한 다음 API 키를 선택합니다.
    • 생성된 키는 다음 단계에서 필요하므로 기록해 둡니다. 검색해야 하는 경우 사용자 인증 정보 페이지로 돌아갑니다.

이 단계를 통해 API 키 승인을 사용하여 Google Cloud 프로젝트를 만들었으며 이제 Geospatial API를 사용할 수 있습니다.

API 키를 Android 스튜디오 프로젝트에 통합

Google Cloud의 API 키를 프로젝트와 연결하려면 Android 스튜디오에서 만든 프로젝트를 열고 API 키를 수정합니다.

  1. app > src > AndroidManifest.xml을 엽니다.
  2. 다음 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" />
    
  3. PLACEHOLDER_API_KEYGoogle Cloud 프로젝트에서 만든 API 키로 바꿉니다.

com.google.android.ar.API_KEY에 저장된 값은 이 앱에서 Geospatial API를 사용하도록 승인하고 com.google.android.geo.API_KEY에 저장된 값으로 앱에서 Google Maps SDK를 사용할 수 있도록 승인합니다.

프로젝트 확인

프로젝트가 준비되었는지 확인합니다. Android 스튜디오에서 앱을 실행합니다. 화면 하단에 작동 중인 지도와 함께 카메라 뷰가 표시되어야 합니다.

상용구 프로젝트

3. 사용자 위치 확인

이 단계에서는 샘플 프로젝트에 코드를 추가하여 Geospatial API를 시작합니다.

Geospatial API를 사용하도록 ARCore 세션 구성

지리정보 데이터를 가져오려면 Geospatial API를 사용 설정해야 합니다. HelloGeoActivity.ktconfigureSession 함수를 수정하여 세션 구성의 GeospatialModeENABLED로 변경합니다.

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.

아래에서 어스 객체를 사용할 수 있는지 확인합니다. 이때 TrackingState.ENABLEDtrackingState개 있습니다.

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 스튜디오에서 Play를 클릭합니다. ARCore가 추적을 설정할 수 있도록 기기를 들어 올려 움직이세요. 잠시 후 지도에 녹색 마커가 표시됩니다. 이 마커는 주변을 볼 때 회전합니다. 또한 올바른 방향을 가리켜야 합니다. 실제로 북쪽을 향하고 있을 때는 화살표도 북쪽을 가리킵니다.

녹색 화살표는 현재 위치와 방향을 따라갑니다.

4. 지구 좌표를 사용하여 앵커 배치

Geospatial API는 실제 세계에서 좌표 쌍과 회전에 앵커를 배치할 수 있습니다. 이렇게 하면 사용자가 특정 위치를 방문할 때 고정된 콘텐츠를 볼 수 있습니다.

이 단계에서는 지도를 탭하여 앵커를 배치하는 방법을 추가합니다.

지도를 탭할 때 작업 설정

프로젝트에는 지도 프래그먼트가 클릭되면 위도 및 경도와 함께 호출되는 onMapClick 함수가 제공됩니다. HelloGeoRenderer.kt에서 onMapClick 함수를 찾습니다.

어스 개체를 사용할 수 있는지 확인

어스에 앵커를 만들기 전에 어스 객체의 TrackingStateTRACKING인지 확인합니다. 이는 지구의 위치를 알고 있다는 의미입니다. 또한 EarthStateENABLED인지 확인합니다. 즉, Geospatial API에 문제가 발생하지 않았습니다. onMapClick 안에 다음 줄을 추가합니다.

val earth = session?.earth ?: return
if (earth.trackingState != TrackingState.TRACKING) {
  return
}

새 앵커의 위치 결정

어스 객체가 추적되고 있는지 확인한 후 이전 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 스튜디오에서 Play를 클릭합니다. ARCore가 추적을 설정할 수 있도록 기기를 들어서 움직입니다. 잠시 후 지도에 현재 위치를 나타내는 녹색 마커가 표시됩니다.

지도를 탭하면 Geospatial API를 사용하여 실제 위치에 고정된 앵커가 배치됩니다. AR 뷰에서 볼 수 있도록 현재 위치에 가깝게 앵커를 배치해 보세요. 환경을 탐색할 때 안정적으로 유지되어야 합니다.

지도를 탭하여 마커를 배치합니다.

5. 결론

이 Codelab에서는 Geospatial API를 사용하여 현실 세계와 연결된 간단한 AR 환경을 만드는 방법을 알아봤습니다.

지도를 탭하여 마커를 배치합니다.

학습한 내용

  • Geospatial API를 사용 설정하여 Google Cloud 프로젝트를 설정하는 방법
  • ARCore 프로젝트에서 지리정보 정보를 가져와 지도에 표시하는 방법
  • 지리적 위치를 사용하여 실제에 배치된 앵커를 배치하는 방법

추가 리소스

이 Codelab에 사용되는 지리적 개념과 SDK에 관한 자세한 내용은 다음 추가 리소스를 참고하세요.