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

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

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

ARCore API সক্ষম করুন

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

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

Geospatial 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>

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

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

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

একটি সেশন অ্যাক্সেস করুন

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

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

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

// Define the configuration object to enable Geospatial features.
val newConfig = session.config.copy(
  // Set the GeospatialMode to VPS_AND_GPS.
  geospatial = Config.GeospatialMode.VPS_AND_GPS
  // Set the DeviceTrackingMode to LAST_KNOWN.
  deviceTracking = Config.DeviceTrackingMode.LAST_KNOWN
)

// Apply the configuration to the session.
try {
    when (val configResult = session.configure(newConfig)) {
        is SessionConfigureGooglePlayServicesLocationLibraryNotLinked -> {
            // This case generally indicates a missing library dependency.
        }
        is SessionConfigureSuccess -> {
            // The session is now configured to use the Geospatial API.
        }
        else -> {
            // Catch-all for other configuration errors returned using the result class.
        }
    }
} catch (e: UnsupportedOperationException) {
    // Handle configuration failure. For example, if the specific mode is not supported on the current device or API version.
}

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
var geospatial = Geospatial.getInstance(session)

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

ভিপিএসের প্রাপ্যতা পরীক্ষা করুন

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

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

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

// You can query the GPS to get the current device's location and check if it has VPS
val latitude = getLatitudeFromGPS()
val longitude = getLongitudeFromGPS()

// Must be called from a coroutine.
val result = geospatial.checkVpsAvailability(latitude, longitude)
if (result is VpsAvailabilityAvailable) {
  // VPS is available
} else if (result is VpsAvailabilityUnavailable) {
  // VPS is not available
}

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

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

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

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

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

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

// Get the current device Pose from the AR Session's state
// This is the device's position and orientation relative to the AR tracking origin.
val devicePose = ArDevice.getInstance(session).state.value.devicePose

// Convert the device Pose into a GeospatialPose
when (val geospatialPoseResult = geospatial.createGeospatialPoseFromPose(devicePose)) {
    is CreateGeospatialPoseFromPoseSuccess -> {
        val currentGeospatialPose = geospatialPoseResult.pose
        val horizontalAccuracy = geospatialPoseResult.horizontalAccuracy
        // ... use pose and accuracy
     val latitude = currentGeospatialPose.latitude
     val longitude = currentGeospatialPose.longitude
    // The orientation is stored as a Quaternion in the EUS (East-Up-South) system. The EUS coordinate system has X+ pointing east, Y+ pointing up, and Z+ pointing south. True North is aligned with the -Z axis.
     val eusQuaternion = currentGeospatialPose.eastUpSouthQuaternion

    }
    is CreateGeospatialPoseFromPoseNotTracking -> {
        // Geospatial is not currently tracking
    }
}

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

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

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

when (val poseResult = geospatial.createPoseFromGeospatialPose(geospatialPose)) {
    is CreatePoseFromGeospatialPoseSuccess -> {
        val devicePose = poseResult.pose
    // devicePose is now ready to be used
    }
    is CreatePoseFromGeospatialPoseNotTracking -> {
        // Geospatial is not currently tracking
    }
}