Jetpack XR-এর জন্য ARCore ব্যবহার করে ভূ-স্থানিক ভঙ্গি নিয়ে কাজ করুন

প্রযোজ্য এক্সআর ডিভাইস
এই নির্দেশিকা আপনাকে এই ধরনের এক্সআর ডিভাইসগুলির জন্য অভিজ্ঞতা তৈরি করতে সাহায্য করে।
এআই চশমা

Jetpack XR-এর জন্য ARCore-এ থাকা Geospatial API-এর সাহায্যে, আপনার অ্যাপ Google Street View দ্বারা আচ্ছাদিত যেকোনো এলাকায় দূর থেকে কন্টেন্ট সংযুক্ত করতে পারে এবং বিশ্বব্যাপী AR অভিজ্ঞতা তৈরি করতে পারে। Geospatial API ডিভাইসের সেন্সর এবং GPS ডেটা ব্যবহার করে ডিভাইসের পরিবেশ শনাক্ত করে, তারপর ব্যবহারকারীর ডিভাইসের সঠিক অবস্থান নির্ধারণ করার জন্য সেই পরিবেশের শনাক্তযোগ্য অংশগুলোকে Google-এর Visual Positioning System (VPS) দ্বারা প্রদত্ত একটি লোকালাইজেশন মডেলের সাথে মিলিয়ে নেয়। এই API ব্যবহারকারীর স্থানীয় স্থানাঙ্ককে VPS থেকে প্রাপ্ত ভৌগোলিক স্থানাঙ্কের সাথে একত্রিত করার কাজটিও করে, যাতে আপনি একটি একক স্থানাঙ্ক ব্যবস্থার মধ্যে কাজ করতে পারেন।

ARCore API সক্রিয় করুন

আপনার অ্যাপে ভিজ্যুয়াল পজিশনিং সিস্টেম (VPS) ব্যবহার করার আগে, আপনাকে প্রথমে একটি নতুন বা বিদ্যমান গুগল ক্লাউড প্রজেক্টে ARCore API সক্রিয় করতে হবে। এই পরিষেবাটি জিওস্পেশিয়াল অ্যাঙ্করগুলির হোস্টিং, স্টোরিং এবং রিজলভিংয়ের জন্য দায়ী।

অতিরিক্ত লাইব্রেরি নির্ভরতা যোগ করুন

জিওস্পেশিয়াল এপিআই ব্যবহার করার জন্য কিছু অতিরিক্ত লাইব্রেরি নির্ভরতা প্রয়োজন। এগুলো আপনার অ্যাপের build.gradle.kts ফাইলে যোগ করুন:

গ্রুভি

dependencies {
  // ... Other required dependencies for the Jetpack XR SDK
  implementation "com.google.android.gms:play-services-location:21.3.0"
}

কোটলিন

dependencies {
  // ... Other required dependencies for the Jetpack XR SDK
  implementation("com.google.android.gms:play-services-location:21.3.0")
}

প্রয়োজনীয় অনুমতি অনুরোধ করুন

Jetpack XR-এর সাথে ARCore-এ Geospatial API ব্যবহার করতে, আপনার অ্যাপকে নিম্নলিখিত রানটাইম অনুমতিগুলির জন্য অনুরোধ করতে হবে:

অ্যাপের অনুমতি ঘোষণা করুন

রানটাইমে এই অনুমতিগুলো অনুরোধ করার আগে, আপনাকে আপনার অ্যাপের ম্যানিফেস্টে সেগুলো ঘোষণা করতে হবে:

<manifest ... >
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest>

অনুমতির জন্য অনুরোধ করুন

প্রয়োজনীয় অনুমতিগুলো ঘোষণা করার পর, আপনার অ্যাপকে অবশ্যই রানটাইমে সেগুলোর জন্য অনুরোধ করতে হবে। আপনার অ্যাপের কেন এই অনুমতিগুলো প্রয়োজন, তা অবশ্যই ব্যাখ্যা করবেন

ব্যবহারকারীর সঠিক অবস্থান নির্ণয় করতে না পারলে জিওস্পেশিয়াল এপিআই কাজ করতে পারে না। এই কারণে, রানটাইমে লোকেশন পারমিশন অনুরোধ করার জন্য নির্দেশিকা অনুসরণ করুন, যাতে আপনার অ্যাপকে ACCESS_FINE_LOCATION এবং ACCESS_COARSE_LOCATION উভয় পারমিশনই প্রদান করা যায়।

একটি সেশনে প্রবেশ করুন

একটি Jetpack XR রানটাইম Session মাধ্যমে ভূ-স্থানিক তথ্য অ্যাক্সেস করুন, যা আপনার অ্যাপকে অবশ্যই তৈরি করতে হবে

সেশনটি কনফিগার করুন

XR সেশনগুলিতে ডিভাইস পোজ তথ্য ডিফল্টরূপে সক্রিয় থাকে না। আপনার অ্যাপকে ডিভাইস পোজ তথ্য পুনরুদ্ধার করার অনুমতি দিতে, সেশনটি কনফিগার করুন এবং GeospatialMode.VPS_AND_GPSDeviceTrackingMode.LAST_KNOWN উভয় মোড সেট করুন:

// Define the configuration object to enable Geospatial features.
val newConfig = Config(
    // Set the GeospatialMode to VPS_AND_GPS.
    geospatial = GeospatialMode.VPS_AND_GPS,
    // Set the DeviceTrackingMode to LAST_KNOWN.
    deviceTracking = DeviceTrackingMode.LAST_KNOWN
)
// Apply the configuration to the session.
try {
    when (val configResult = session.configure(newConfig)) {
        is SessionConfigureSuccess -> {
            // The session is now configured to use the Geospatial API.
        }
        else -> {
            // Handle other configuration errors (e.g., missing library dependencies).
        }
    }
} catch (e: UnsupportedOperationException) {
    // Handle configuration failure if the mode is not supported.
}

GeospatialMode.VPS_AND_GPS মোডটি ডিভাইসের ভূ-স্থানিক অবস্থান নির্ভুলভাবে নির্ধারণ করতে ভিজ্যুয়াল পজিশনিং সিস্টেম (VPS) এবং গ্লোবাল পজিশনিং সিস্টেম (GPS) উভয় ডেটা ব্যবহার করে।

সব XR ডিভাইস GeospatialMode.VPS_AND_GPS এবং DeviceTrackingMode.LAST_KNOWN মোড সমর্থন করে না। যদি Session.configure() সফল হয়, তাহলে ডিভাইসটি এই মোডগুলো সমর্থন করে।

ডিভাইসের ডেটা ব্যবহারের অনুমতি দিতে ব্যবহারকারীকে অনুরোধ করুন।

যেসব অ্যাপ Jetpack XR-এর জন্য ARCore-এর সাথে Geospatial API ব্যবহার করে, সেগুলোকে অবশ্যই ব্যবহারকারীর ডিভাইস থেকে ডেটা ব্যবহারের অনুমতি ও স্বীকৃতির জন্য একটি প্রম্পট দেখাতে হবে। আরও তথ্যের জন্য ব্যবহারকারীর গোপনীয়তার শর্তাবলী দেখুন।

ভূ-স্থানিক বস্তুটি প্রাপ্ত করুন

সেশনটি কনফিগার করা হয়ে গেলে, Geospatial.getInstance(session) ব্যবহার করে Geospatial অবজেক্টটি সংগ্রহ করুন:

// Get the Geospatial instance for the current session.
val geospatial = Geospatial.getInstance(session)

Geospatial অবজেক্টটি শুধুমাত্র তখনই ব্যবহার করা উচিত যখন এর স্টেট State.RUNNING থাকে। আপনি Geospatial.state StateFlow<Geospatial.State> ব্যবহার করে এর স্টেট পর্যবেক্ষণ করতে পারেন।

VPS-এর প্রাপ্যতা যাচাই করুন

যেহেতু জিওস্পেশিয়াল এপিআই একটি জিওস্পেশিয়াল পোজ নির্ধারণ করতে ভিপিএস এবং জিপিএস-এর একটি সমন্বয় ব্যবহার করে, তাই ডিভাইসটি যখনই তার অবস্থান নির্ণয় করতে পারে, তখনই এপিআইটি উপলব্ধ থাকে। জিপিএস-এর নির্ভুলতা কম এমন এলাকাগুলিতে, যেমন অভ্যন্তরীণ স্থান এবং ঘনবসতিপূর্ণ শহুরে পরিবেশে, এপিআইটি উচ্চ-নির্ভুল পোজ তৈরি করতে ভিপিএস কভারেজের উপর নির্ভর করে।

সাধারণ পরিস্থিতিতে, আপনি আশা করতে পারেন যে VPS প্রায় ৫ মিটার অবস্থানগত নির্ভুলতা এবং ৫ ডিগ্রি ঘূর্ণনগত নির্ভুলতা প্রদান করবে। কোনো একটি অবস্থানে VPS কভারেজ আছে কিনা তা আপনি Geospatial.checkVpsAvailability(latitude, longitude) সাসপেন্ড ফাংশনটি ব্যবহার করে পরীক্ষা করতে পারেন। এই কলটি একটি অ্যাসিঙ্ক্রোনাস অপারেশন এবং এর জন্য সেশনটিকে GeospatialMode.VPS_AND_GPS মোডে কনফিগার করার প্রয়োজন হয় না।

নিম্নলিখিত কোডটি দেখায় কিভাবে একটি নির্দিষ্ট অক্ষাংশ এবং দ্রাঘিমাংশ থেকে ভিপিএস-এর প্রাপ্যতা পরীক্ষা করতে হয়:

// You can query the GPS to get the current device's location.
val latitude = 37.422
val longitude = -122.084

// Use the geospatial instance to check VPS availability for a specific location.
val result = geospatial.checkVpsAvailability(latitude, longitude)
when (result) {
    is VpsAvailabilityAvailable -> {
        // VPS is available at this location.
    }
    is VpsAvailabilityErrorInternal -> {
        // VPS availability check failed with an internal error.
    }
    is VpsAvailabilityNetworkError -> {
        // VPS availability check failed due to a network error.
    }
    is VpsAvailabilityNotAuthorized -> {
        // VPS availability check failed due to an authorization error.
    }
    is VpsAvailabilityResourceExhausted -> {
        // VPS availability check failed due to resource exhaustion.
    }
    is VpsAvailabilityUnavailable -> {
        // VPS is not available at this location.
    }
}

গুগল ক্লাউডের ARCore API-এর সাথে যোগাযোগের জন্য আপনার অ্যাপটিকে অবশ্যই সঠিকভাবে সেট আপ করতে হবে; অন্যথায়, আপনার অ্যাপটি একটি VpsAvailabilityNotAuthorized ফলাফল পাবে।

ডিভাইসের পোজকে ভূ-স্থানিক পোজ-এ রূপান্তর করুন

এআই গ্লাসকে অবস্থান-সচেতন ডেটার সাথে ইন্টারঅ্যাক্ট করতে এবং তা তৈরি করতে সক্ষম করার জন্য আপনি একটি ডিভাইস পোজকে জিওস্পেশিয়াল পোজে রূপান্তর করতে পারেন। এই পাইপলাইনটি ডিভাইসটির স্থানীয় স্থানাঙ্ক ব্যবস্থায় থাকা বর্তমান অবস্থান এবং অভিমুখকে (ডিভাইস পোজ) বিশ্বব্যাপী স্বীকৃত স্থানাঙ্কে অনুবাদ করে।

এটি আপনাকে সাহায্য করতে পারে:

  • স্থায়ী AR কন্টেন্ট তৈরি করুন, যেখানে ব্যবহারকারীর স্থাপন করা ভার্চুয়াল বস্তুটি পরবর্তীতে পুনরুদ্ধারের জন্য একটি গ্লোবাল লোকেশনে নির্ভুলভাবে অ্যাঙ্কর করা থাকে।
  • মানচিত্রে ব্যবহারকারীর অবস্থান ক্রমাগত আপডেট করার মাধ্যমে অবস্থান-ভিত্তিক অভিজ্ঞতা চালু করুন, যা রিয়েল-টাইম নেভিগেশন বা জিও-ফেন্সড গেমপ্লে সক্ষম করবে।
  • অবস্থান-সম্পর্কিত অ্যাপ্লিকেশন লজিক সক্রিয় করার জন্য ব্যবহারকারীর সুনির্দিষ্ট বাস্তব প্রেক্ষাপট নির্ধারণ করুন।

Geospatial.createGeospatialPoseFromPose() ব্যবহার করে একটি ডিভাইস পোজকে জিওস্পেশিয়াল পোজ-এ রূপান্তর করতে:

// Get the current device Pose from the AR Session's state.
val devicePose = ArDevice.getInstance(session).state.value.devicePose

// Convert the device Pose into a GeospatialPose.
when (val result = geospatial.createGeospatialPoseFromPose(devicePose)) {
    is CreateGeospatialPoseFromPoseSuccess -> {
        val geoPose = result.pose
        val lat = geoPose.latitude
        val lon = geoPose.longitude
        val alt = geoPose.altitude
        // Orientation is in the EUS (East-Up-South) coordinate system.
        val orientation = geoPose.eastUpSouthQuaternion
    }
    is CreateGeospatialPoseFromPoseNotTracking -> {
        // Geospatial is not currently tracking.
    }
}

একটি ভূ-স্থানিক পোজকে ডিভাইস পোজ-এ রূপান্তর করুন

এআই গ্লাসে প্রাসঙ্গিক ও অবস্থান-সচেতন অভিজ্ঞতা প্রদানে সহায়তা করার জন্য আপনি একটি জিওস্পেশিয়াল পোজকে ডিভাইস পোজে রূপান্তর করতে পারেন। এই রূপান্তরটি বাস্তব-জগতের স্থানাঙ্ক দ্বারা সংজ্ঞায়িত তথ্য—যেমন কোনো ল্যান্ডমার্কের অবস্থান, একটি নেভিগেশন পথ, বা স্থায়ী এআর কন্টেন্ট—ব্যবহারকারীর গ্লাসের সুনির্দিষ্ট ভিজ্যুয়াল স্পেসে রূপান্তরিত করে।

Geospatial.createPoseFromGeospatialPose() ব্যবহার করে একটি জিওস্পেশিয়াল পোজকে ডিভাইস পোজ-এ রূপান্তর করতে:

// Convert a GeospatialPose (lat/long/alt) back to a device-space Pose.
when (val result = geospatial.createPoseFromGeospatialPose(geoPose)) {
    is CreatePoseFromGeospatialPoseSuccess -> {
        val devicePose: Pose = result.pose
        // devicePose is now ready to be used relative to the tracking origin.
    }
    is CreatePoseFromGeospatialPoseNotTracking -> {
        // Geospatial is not currently tracking.
    }
}