Xây dựng hướng dẫn viên du lịch thực tế hỗn hợp bằng Android XR, Geospatial API và Gemini

7 phút đọc

Tại Google I/O năm nay, chúng tôi đã công bố bản cập nhật cho trải nghiệm không gian: Geospatial API hiện đã có ở dạng bản dùng thử trong ARCore cho Jetpack XR. Bằng cách đưa Hệ thống định vị bằng hình ảnh (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 ở các khu vực được hỗ trợ.* Để khám phá những gì mà Geospatial API có thể mang lại, nhóm của 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 cặp kính XR có dây (như XREAL Project Aura sắp ra mắt) và ngay lập tức có một hướng dẫn viên du lịch đị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 mà thay vào đó, các mô hình 3D sẽ nhẹ nhàng hướng dẫn bạn đi và một giọng nói thông minh sẽ kể cho bạn nghe về các địa danh lịch sử ngay trước mặt bạn. Chúng tôi đã kết hợp Geospatial APIGemini API bằng Firebase AI LogicGoogle Maps Grounding và Jetpack XR SDK để tạo ra trải nghiệm tham quan đi bộ sống động và không cần dùng tay.

 

 

Tuyên bố từ chối trách nhiệm: Video và ứng dụng Hướng dẫn viên du lịch chỉ nhằm mục đích minh hoạ. Một số chuỗi đã đượ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; thông tin chi tiết về sản phẩm cuối cùng có thể khác.

Hãy cùng xem qua thông tin 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 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 chỉ đườ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 đi kèm với VPS 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 tôi truy xuất tư thế không gian 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:

// 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 horizontalAccuracyorientationYawAccuracy cho đến khi các chỉ số này đáp ứng ngưỡng của chúng tôi. Nếu người dùng ở trong nhà hoặc ở một khu vực không được nhận dạng, chúng tôi sẽ nhắc họ "đi bộ đến một không gian công cộng ngoài trời và nhìn xung quanh".

2. Lập kế hoạch tham quan bằng Gemini API và Google Maps Grounding

Sau khi có vị trí, chúng tôi sẽ sử dụng Gemini API bằng 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 tôi chuyển toạ độ của người dùng cho mô hình và yêu cầu mô hình này xuất ra phản hồi JSON có cấu trúc chứa các chuyến tham quan đ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 ra nội dung mô tả phong phú, nhưng đôi khi có thể tạo ra các 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 để kết nối AI với thế giới thực.

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

Để hướng dẫn viên du lịch thực sự có mặt, chúng tôi đã triển khai tính năng thuyết minh động.

Khi sử dụng gemini-2.5-flash-tts model, chúng tôi 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 bạn có thể 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. Biến ý tưởng thành hiện thực trong không gian 3D bằng Jetpack XR

Phần cuối cùng của câu đố là hiển thị 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 để xây dựng các thành phần không gian. Để biểu thị các điểm tham quan dọc theo chuyến tham quan, chúng tôi đã xây dựng một Composable có tên là InfoSphere. Composable này chứa một GltfModel của một quả cầu 3D nổi trong không gian và có thể tương tác để tiết lộ thông tin.

Khi sử dụng SDK Jetpack XR, chúng tôi có thể đặt các mô hình 3D cùng với giao diện người dùng Compose bằng SpatialBox và SceneCoreEntity. Chúng tôi cũng đã sử dụng InteractableComponent để phản hồi các lượt 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 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 điều bạn có thể làm với Android XR ngay hôm nay

Việc xây dựng ứng dụng XR Geospatial Tour cho thấy rằng rào cản gia nhập đối với trải nghiệm không gian trên quy mô toàn cầu thấp hơn bao giờ hết đối với nhà phát triển Android. Với Geospatial API hiện đã có ở dạng bản dùng thử trên Android XR, các ứng dụng của bạn có thể hiểu được 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 khả năng tạo sinh của Gemini, chúng tôi có thể tạo ra những trải nghiệm vừa hiểu được vị trí của người dùng vừa hiểu được những gì họ đang nhìn.

Để 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ý cho Chương trình xúc tác nhà phát triển Android XR, bao gồm XREAL Project Aura. Kể từ hôm nay, bạn có thể đăng ký để được dùng thử XREAL Project Aura hoặc bộ dụng cụ phát triển kính thông minh 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 nhau.

Tiếp tục đọc