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

Tạo một hướng dẫn viên du lịch thực tế hỗn 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 neo 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 đang bước vào một thành phố mới, đeo một cặp kính thông minh XR có dây (như Dự án Aura sắp ra mắt của XREAL) và ngay lập tức có một hướng dẫn viên địa phương am hiểu dẫn bạn đi tham quan. 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 Geospatial API, Gemini API bằng Firebase AI Logic, Google Maps Grounding và Jetpack XR SDK để tạo ra trải nghiệm tham quan thực tế ảo không cần dùng tay.

Tuyên bố từ chối trách nhiệm: Ứng dụng Video và Hướng dẫn tham quan 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 xem xét chi tiết về việc triển khai và cách chúng tôi kết hợp các API này để tạo ra một trải nghiệm không gian ở quy mô toàn cầu.

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

Nâng cao trải nghiệm điều hướng 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 cho phé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 công nghệ thị giác máy tính tiên tiến, VPS cố gắng cung cấp một GeospatialPose (bao gồm vĩ độ, kinh độ và hướng) chính xác hơn GPS.

Sau đây là cách chúng ta 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 một 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 phụ thuộc 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 ngưỡng. 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ập hành trình bằng Gemini API và tính năng neo bám của Google Maps

Sau khi có vị trí, chúng ta sẽ dùng Gemini API thông qua Firebase AI Logic để nhắc 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 có khả năng tạo nội dung mô tả phong phú, nhưng đôi khi có thể đưa ra thông tin không chính xác về toạ độ vĩ độ/kinh độ. Để giải quyết vấn đề này, chúng tôi đã sử dụng Tính năng liên kết với Google Maps để liên kết AI với Google Maps.

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.

Khi 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 một 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á trong không gian 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. SDK Jetpack XR 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 để tạo các thành phần không gian. Để thể hiện các địa điểm yêu thích dọc theo chuyến tham quan, chúng tôi đã tạo một composable 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.

Bằng cách sử dụng Jetpack XR SDK, 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 tôi cũng 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 thành phần giao diện người dùng Compose truyền thống với các phần tử 3D SceneCoreEntity, chúng ta có thể kết hợp dữ liệu một cách liền mạch vào thế giới thực.

@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á những tiềm năng của Android XR ngay hôm nay

Việc 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. Giờ đây, nhờ API Không gian địa lý có sẵn ở chế độ xem trước trên Android XR, các ứng dụng của bạn có thể dễ dàng hiểu được thế giới thực xung quanh. 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 khả 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 trải nghiệm Android XR, chúng tôi rất vui khi 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 một bộ công cụ dành cho nhà phát triển của XREAL Project Aura hoặc bộ công cụ dành cho nhà phát triển kính hiển thị của chúng tôi 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ế. 

Đọc tiếp