Tin tức về sản phẩm

Tạo hướng dẫn viên du lịch thực tế kết hợp bằng Android XR, Geospatial API và Gemini

6 phút đọc

Tại sự kiện Google I/O năm nay, chúng tôi đã công bố một bản cập nhật cho trải nghiệm không gian: Geospatial API hiện đã có bản xem trước trong ARCore cho Jetpack XR. Bằng cách đưa Hệ thống định vị trực quan (VPS) của Google vào Android XR, Android XR cho phép gắn nội dung kỹ thuật số vào thế giới thực với độ chính xác dưới một mét và hướng chính xác ở những khu vực được hỗ trợ.* Để khám phá những khả năng mà Geospatial API có thể mang lại, nhóm chúng tôi đã xây dựng một bản minh hoạ: XR Geospatial Tour.

Hãy tưởng tượng bạn bước vào một thành phố mới, đeo một chiếc kính thông minh XR có dây (như chiếc XREAL Project Aura sắp ra mắt) và ngay lập tức có một Local Guide am hiểu chỉ dẫn cho bạn. Bạn không cần phải nhìn chằm chằm vào bản đồ 2D, thay vào đó, các mô hình 3D sẽ nhẹ nhàng hướng dẫn bạn và một giọng nói thông minh sẽ cho bạn biết về các địa danh lịch sử ngay trước mặt bạn. Chúng tôi đã kết hợp API không gian địa lý, Gemini API sử dụng Firebase AI Logic, Google Maps Grounding và Jetpack XR SDK để tạo ra một trải nghiệm đi bộ tham quan sống động, không cần dùng tay.

Tuyên bố từ chối trách nhiệm: Video và ứng dụng Tour Guide chỉ nhằm mục đích minh hoạ. Một số trình tự đã được rút ngắn. Mọi phần cứng được mô tả có thể đang trong quá trình phát triển; chi tiết sản phẩm cuối cùng có thể thay đổi.

Hãy cùng tìm hiểu chi tiết về cách triển khai và cách chúng tôi kết hợp các API này để xây dựng trải nghiệm không gian trên quy mô toàn cầu.

1. Xác định chính xác người dùng bằng ARCore Geospatial API (VPS)

Nâng cao trải nghiệm đi theo chỉ dẫn trên XR bằng cách kết hợp sức mạnh của GPS với độ chính xác của VPS. Độ chính xác và hướng chính xác mà VPS mang lại giúp các điểm tham chiếu 3D phù hợp với thế giới thực.

Đây là lý do Geospatial API trên Android XR có thể giúp bạn xây dựng trải nghiệm tuỳ chỉnh. Bằng cách sử dụng thị giác máy tính nâng cao, VPS cố gắng cung cấp một GeospatialPose (bao gồm cả vĩ độ, kinh độ và hướng) chính xác hơn GPS.

Sau đây là cách chúng tôi truy xuất tư thế không gian địa lý của người dùng bằng cách liên kết hướng của thiết bị với toạ độ không gian địa lý:

// Retrieve the current geospatial pose from the ARCore session
val result = geospatial.createGeospatialPoseFromPose(arDevice.state.value.devicePose)
if (result is CreateGeospatialPoseFromPoseSuccess) {
    val pose = result.pose
    Log.d("VPS", "Accurate Location: ${pose.latitude}, ${pose.longitude}")
}

Vì toàn bộ trải nghiệm đều dựa vào độ chính xác này, nên chúng tôi sẽ theo dõi horizontalAccuracy và orientationYawAccuracy cho đến khi các chỉ số này đạt đến ngưỡng của chúng tôi. Nếu người dùng đang ở trong nhà hoặc ở một khu vực không xác định, chúng tôi sẽ nhắc họ "đi đến một không gian công cộng ngoài trời và nhìn xung quanh".

2. Lên hành trình bằng Gemini API và tính năng Grounding với Google Maps

Sau khi có vị trí, chúng ta sẽ dùng Gemini API thông qua Firebase AI Logic để yêu cầu mô hình Gemini đóng vai trò là hướng dẫn viên du lịch địa phương. Chúng ta truyền toạ độ của người dùng đến mô hình và yêu cầu mô hình xuất ra một phản hồi JSON có cấu trúc chứa các chuyến đi bộ gần đó:

   val configForTools = ToolConfig(
      functionCallingConfig = null,
      retrievalConfig = retrievalConfig {
        latLng = FirebaseLatLng(pose.latitude, pose.longitude)
        languageCode = "en"
      }
    )

    val responseJsonSchema = Schema.obj(
      mapOf(
        "locationIntro" to Schema.string(),
        "tours" to Schema.array(
          Schema.obj(
            mapOf(
              "title" to Schema.string(),
              "description" to Schema.string(),
              "stops" to Schema.array(
                Schema.obj(
                  mapOf(
                    "name" to Schema.string(),
                    "detailedName" to Schema.string(),
                    "description" to Schema.string()
                  )
                )
              )
            )
          )
        )
      )
    )

    val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
      modelName = "gemini-3.5-flash",
      tools = listOf(Tool.googleMaps()),
      generationConfig = generationConfig {
        responseMimeType = "application/json"
        responseSchema = responseJsonSchema
      }
    )

   val result = model.generateContent("The user is at latitude ${pose.latitude} and longitude ${pose.longitude}. Generate exactly 3 diverse tours near this location (e.g., historical, food, nature). All tour ideas should be walking distance only.")

Mô hình ngôn ngữ lớn rất giỏi trong việc tạo nội dung mô tả phong phú, nhưng đôi khi có thể tạo ra toạ độ vĩ độ/kinh độ chính xác không có thật. Để giải quyết vấn đề này, chúng tôi đã sử dụng Google Maps Grounding để cung cấp thông tin thực tế cho AI.

3. Giọng nói hướng dẫn bạn: Gemini 2.5 TTS

Để hướng dẫn viên du lịch có cảm giác thực sự hiện diện, chúng tôi đã triển khai tính năng lồng tiếng linh hoạt.

Bằng cách sử dụng gemini-2.5-flash-tts model, chúng ta có thể định cấu hình cấu hình tạo mô hình để trả về dữ liệu âm thanh theo cách tự nhiên thay vì chỉ văn bản! Sau đây là cách yêu cầu ResponseModality.AUDIO:

val ttsModel = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel(
        modelName = "gemini-2.5-flash-tts",
        generationConfig = generationConfig {
            // Instruct the model to return Audio
            responseModalities = listOf(ResponseModality.AUDIO)
        }
    )

val response = ttsModel.generateContent("Say in a neutral but positive voice:\n$prompt")

// Extract the raw audio bytes from the response
val audioBytes = response.candidates.firstOrNull()?.content?.parts
    ?.filterIsInstance<InlineDataPart>()
    ?.firstOrNull { it.mimeType.contains("audio") }?.inlineData

4. Hiện thực hoá ý tưởng ở chế độ 3D bằng Jetpack XR

Mảnh ghép cuối cùng là kết xuất dữ liệu này trong trường nhìn của người dùng. Jetpack XR SDK giúp bạn dễ dàng chuyển đổi từ giao diện người dùng Android 2D sang điện toán không gian.

Chúng tôi đã sử dụng Jetpack Compose cho XR để xây dựng các thành phần không gian. Để thể hiện các địa điểm yêu thích trong chuyến tham quan, chúng tôi đã xây dựng một thành phần kết hợp có tên là InfoSphere. Thành phần này chứa một GltfModel của một quả cầu 3D lơ lửng trong không gian và có thể tương tác để hiển thị thông tin.

Khi sử dụng SDK Jetpack XR, chúng ta có thể đặt các mô hình 3D cùng với giao diện người dùng Compose bằng cách sử dụng SpatialBox và SceneCoreEntity. Chúng ta cũng đã sử dụng InteractableComponent để phản hồi thao tác nhấn của người dùng.

Bằng cách kết hợp AnimatedSpatialVisibility cho các nền tảng giao diện người dùng Compose truyền thống với các phần tử 3D SceneCoreEntity, chúng tôi có thể kết hợp dữ liệu vào thế giới thực một cách liền mạch.

@Composable
fun InfoSphere(
    content: InfoBubbleContent,
    session: Session,
    sphereModel: GltfModel,
    isSelected: Boolean,
    onClick: () -> Unit
) {
    // SpatialBox lets us arrange 3D components and SpatialPanels together
    SpatialBox(
        SubspaceModifier
            .offset(x = 2.dp, y = 1.dp, z = (-3).dp) // Positioned in 3D space
    ) {
        // Smoothly animate the visibility of our 2D Compose UI Panel
        AnimatedSpatialVisibility(visible = isSelected) {
            SpatialPanel {
                InfoBubble(content) // Regular 2D Compose UI
            }
        }
        // Render our interactive 3D sphere
        SceneCoreEntity(
            factory = {
                GltfModelEntity.create(session, sphereModel).also { entity ->
                    // Make the 3D model respond to user taps
                    entity.addComponent(InteractableComponent.create(session) { inputEvent ->
                        if (inputEvent.action == InputEvent.Action.UP) {
                            onClick()
                        }
                    })
                }
            }
        )
    }
}

Khám phá mọi tiềm năng của Android XR ngay hôm nay

Quá trình xây dựng ứng dụng XR Geospatial Tour cho chúng tôi thấy rằng rào cản gia nhập đối với trải nghiệm không gian quy mô toàn cầu đang thấp hơn bao giờ hết đối với các nhà phát triển Android. Với Geospatial API hiện có ở dạng bản xem trước trên Android XR, ứng dụng của bạn có thể hiểu rõ thế giới thực xung quanh một cách liền mạch. Bằng cách kết hợp các API của Compose cho XR với dữ liệu vị trí có độ chính xác cao của VPS và các chức năng tạo sinh của Gemini, chúng ta có thể tạo ra những trải nghiệm hiểu được cả vị trí của người dùng và nội dung họ đang xem.

Để giúp bạn làm quen với Android XR, chúng tôi rất vui mừng được mở đơn đăng ký tham gia Chương trình xúc tác cho nhà phát triển Android XR, trong đó có Dự án Aura của XREAL. Kể từ hôm nay, bạn có thể đăng ký để nhận bộ công cụ phát triển XREAL Project Aura hoặc bộ công cụ phát triển kính có màn hình trong những tháng tới! 

*Tuyên bố từ chối trách nhiệm: Chỉ có trên một số thiết bị. Cần có kết nối Internet. Hoạt động trên các ứng dụng và nền tảng tương thích. Kết quả có thể khác với thực tế. 

Tiếp tục đọc