Table of Contents

Mengontrol proses tracking Mega

Dokumen ini menjelaskan cara mengontrol berbagai fungsi dan parameter dalam proses tracking Mega untuk memenuhi kebutuhan skenario aplikasi yang berbeda.

Sebelum mulai

Alur kerja tracker

Workflow tracker adalah sebagai berikut:

flowchart LR
  subgraph startup_graph[Mulai]
    direction TB
    sstart((session dimulai))
    create[Pembuatan native]
    load(Muat target)
    init_g[[Inisialisasi]]
  end
  
  subgraph init_graph[Inisialisasi]
    direction TB
    init_{Inisialisasi 6DoF berhasil<br>atau non-6DoF}
    init[[Proses inisialisasi tracking lokal]]
    localization_g[[Localization awal]]
  end

  subgraph localization_graph[Localization awal]
    direction TB
    localize__{Localization aktif dan<br>melampaui interval request}
    localize[Localization cloud]
    localize_{Terlokalisasi ke block dan<br>block telah dimuat}
    tracking_g[[Tracking]]
  end
  
  subgraph tracking_graph[Tracking]
    direction TB
    tracking[[Tracking berkelanjutan]]
  
    localizet_{Localization aktif dan<br>melampaui interval request}
    localize2[Localization cloud]
    localize2_{Terlokalisasi ke block dan<br>block telah dimuat}
    localization_g2[[Localization awal]]
  end

  subgraph stopping_graph[Berhenti]
    direction TB
    unload(Bongkar target)
    dispose[Penghancuran native]
    sstop([session berhenti])
  end

  sstart --> create --> load --> init_g
  init --> init_ --> |Yes| localization_g
  localize --> localize_ --> |Yes| tracking_g
  localize_ --> |No| localize__ --> |Yes| localize
  unload --> dispose --> sstop
  init_ --> |No| init

  tracking --> localizet_ --> |Yes| localize2 --> localize2_ --> |Yes| tracking
  localizet_ --> |No| tracking
  localize2_ --> |No| localization_g2

  startup_graph --> init_graph
  init_graph --> localization_graph
  localization_graph --> tracking_graph
  tracking_graph --> localization_graph
  tracking_graph --> stopping_graph

Prosesnya secara garis besar dibagi menjadi beberapa tahap:

  • Startup:
    • Setelah session dimulai, tracker di layer native akan dibuat.
    • Setelah Start() pada target sendiri, target akan dimuat ke tracker yang sesuai.
  • Initialization:
    • Saat menggunakan frame source 6DoF, proses inisialisasi local tracking akan dimulai.
    • Saat menggunakan frame source non-6DoF, tahap initialization akan dilewati dan langsung masuk ke tahap initial localization.
    • Proses ini mungkin memerlukan waktu, tergantung kompleksitas scene dan kemampuan performa perangkat, dan biasanya berkaitan dengan algoritme yang digunakan pada bagian bawah frame source.
    • Pada konfigurasi default, konten pada tahap ini tidak akan ditampilkan. Anda dapat mengontrol perilaku ini melalui opsi komponen ActiveController.
  • Initial localization:
    • Jika lokalisasi diaktifkan dan interval permintaan telah terlewati, tracker akan mengirim permintaan lokalisasi ke cloud.
      • Setelah lokalisasi berhasil, jika block yang sesuai dengan id yang dikembalikan layanan lokalisasi sudah dimuat, tracker akan masuk ke tahap tracking; jika block belum dimuat, tracker akan terus menunggu block selesai dimuat dan menunggu permintaan lokalisasi berikutnya.
      • Setelah lokalisasi gagal, tracker akan terus menunggu permintaan lokalisasi berikutnya.
    • Proses ini mungkin memerlukan waktu, tergantung kemudahan scene untuk dilokalisasi, kualitas pengambilan data dan pemetaan, serta kondisi jaringan.
    • Pada konfigurasi default, konten pada tahap ini tidak akan ditampilkan. Anda dapat mengontrol perilaku ini melalui opsi komponen ActiveController.
  • Tracking:
    • Tracker akan terus melacak block saat ini.
    • Jika lokalisasi diaktifkan dan interval permintaan telah terlewati, tracker akan mengirim permintaan lokalisasi ke cloud.
      • Setelah lokalisasi berhasil, jika id yang dikembalikan layanan lokalisasi tidak berubah, tracking akan dilanjutkan; jika id berubah dan block sudah dimuat, tracker akan berpindah ke block baru dan terus melacak; jika id berubah dan block belum dimuat, tracker akan terus menunggu block selesai dimuat dan menunggu permintaan lokalisasi berikutnya.
      • Setelah lokalisasi gagal, tracker akan terus melacak block saat ini dan menunggu permintaan lokalisasi berikutnya.
    • Pada konfigurasi default, hanya konten di bawah node target yang sedang dalam status tracking (TargetController.IsTracked == true) yang akan ditampilkan. Anda dapat mengontrol perilaku ini melalui opsi komponen ActiveController.
  • Stopping:
    • Setelah session berhenti, target di-unload, dan tracker di layer native akan dihancurkan.

Menyesuaikan level dukungan perangkat

Properti MegaTrackerFrameFilter.MinInputFrameLevel dari MegaTrackerFrameFilter digunakan untuk menentukan level minimum perangkat yang didukung Mega.

alt text

Mega dapat berjalan pada hampir semua jenis frame data source, tetapi setiap frame data source memberi dampak yang berbeda pada hasil tracking.

Secara default, Mega akan memilih frame data source dengan level tertinggi yang didukung perangkat untuk tracking. Session yang mendukung Mega pada konfigurasi default sudah dikonfigurasi dengan frame data source yang mendukung 6DoF dan 5DoF.

Untuk mendukung level frame data source tertentu saat Mega berjalan, dua syarat harus dipenuhi:

Misalnya, untuk mendukung tracking 3DoF pada session default, Anda perlu:

Contoh lain, untuk menghapus dukungan tracking 5DoF pada session default, Anda perlu:

Jika tidak ada frame data source yang memenuhi syarat, proses assembly session akan gagal.

Memahami status sistem saat ini

Pada konfigurasi default session, UI messages akan ditampilkan di layar dan berisi informasi tentang status tracking Mega.

Saat lokalisasi berhasil, informasi layanan Mega akan berisi teks status Found; saat lokalisasi gagal, informasi layanan Mega akan berisi teks status NotFound.

Block yang sudah dimuat akan ditampilkan sebagai Block [scnObj=<objName>] (<trackingStatus>): <name> (<id>). Di sini, <objName> adalah nama objek scene yang terkait dengan block, <name> adalah nama block, dan <id> adalah ID block. trackingStatus dapat berupa Tracking atau NotTracking, yang masing-masing menunjukkan apakah block saat ini sedang dilacak atau tidak.

alt text alt text

Saat lokalisasi berhasil, informasi block yang berhasil dilokalisasi tetapi belum dimuat akan ditampilkan sebagai Block [scnObj=?]: <name> (<id>).

alt text

Kiat

NotFound adalah status normal dan sering muncul selama seluruh proses kerja Mega. Saat status ini muncul, tracking tetap berlanjut. Biasanya, tidak perlu penanganan khusus untuk status NotFound dalam pengembangan aplikasi.

Anda dapat menggunakan event MegaTrackerFrameFilter.LocalizationRespond untuk memperoleh status lokalisasi saat ini dan mengetahui apakah sistem telah menemukan target pelacakan.

Kode berikut menunjukkan cara menggunakan event tersebut, serta cara menangani status abnormal umum yang perlu diperhatikan aplikasi:

private void Awake()
{
    megaTracker.LocalizationRespond += HandleLocalizationStatusChange;
}
        
private void HandleLocalizationStatusChange(MegaLocalizationResponse response)
{
    var status = response.Status;
    wakingUpCount = status == MegaTrackerLocalizationStatus.WakingUp ? wakingUpCount + 1 : 0;
    if (wakingUpCount >= 5)
    {
        // layanan sedang dibangunkan; pengguna akhir perlu menunggu
    }

    if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
    {
        // batas QPS terlampaui; beberapa pengguna akhir dapat gagal melakukan lokalisasi secara acak (kualitas tracking keseluruhan menurun)
        // biasanya perlu membayar untuk menaikkan batas QPS agar kualitas tracking tetap terjamin pada jumlah pengguna saat ini
    }

    if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
    {
        // Token kedaluwarsa; ini hanya terjadi saat mengakses layanan melalui antarmuka Token
        // untuk menyelesaikannya, aplikasi perlu meminta Token dari backend sendiri dan memanggil MegaTrackerFrameFilter.UpdateToken untuk memperbaruinya
    }
}

Jika aplikasi sering menemui status MegaTrackerLocalizationStatus.RequestTimeout, biasanya itu menandakan kondisi jaringan perangkat ke layanan kurang baik. Disarankan mengoptimalkan lingkungan jaringan untuk meningkatkan kualitas tracking. Pada skenario ketika kondisi jaringan tidak dapat diperbaiki, Anda dapat mempertimbangkan untuk menambah timeout permintaan.

Catatan

Anda tidak dapat memperoleh pose yang dikembalikan oleh lokalisasi melalui event ini.

Sebenarnya, pose hasil lokalisasi tidak diperlukan dalam pengembangan aplikasi. EasyAR akan menghitung pose yang lebih akurat melalui algoritme lokal setelah lokalisasi kembali dan memberikannya kepada developer. Pose ini sudah tercermin pada transform block, silakan lihat Mendapatkan hasil runtime session.

Jeda dan lanjut

Fungsi tracking dan lokalisasi Mega dapat dijeda dan dilanjutkan secara terpisah.

Menjeda tracking

Set MegaTrackerFrameFilter.enabled menjadi false untuk menjeda tracking.

Secara default, setelah tracking dijeda, semua konten di bawah node block akan disembunyikan.

Menjeda lokalisasi

Set MegaTrackerFrameFilter.EnableLocalization menjadi false untuk menjeda lokalisasi.

Peringatan

Menjeda lokalisasi akan memengaruhi hasil tracking, jadi umumnya tidak disarankan. Gunakan di bawah arahan dukungan teknis EasyAR.

Jika lokalisasi pernah dijeda selama aplikasi berjalan, pastikan Anda menyebutkannya saat melaporkan masalah ke EasyAR.

Kontrol layanan dan permintaan

Anda dapat mengontrol perilaku permintaan layanan dengan mengubah parameter komponen MegaTrackerFrameFilter.

Memilih library lokalisasi

Pilih objek Mega Tracker di bawah session, lalu ubah opsi di bawah Service untuk menyesuaikan library lokalisasi yang terhubung. Opsi ini harus diset sebelum session dimulai.

Pada konfigurasi default, Access Source adalah Global Config. Konfigurasi layanan menggunakan konfigurasi global, dan parameter layanan dapat diubah di Project Settings > EasyAR > Sense > Mega > Mega Block. Konfigurasi ini akan memengaruhi semua session yang menggunakan konfigurasi global tersebut.

alt text

Kiat

Konfigurasi layanan dapat diperoleh dari EasyAR Development Center.
Mega Config Detail

Jika Anda perlu menggunakan library lokalisasi yang berbeda di session yang berbeda, Anda dapat mengatur Access Source ke API Key, lalu mengubah parameter layanan di bawahnya.

alt text

Di script, Anda dapat mengubah MegaTrackerFrameFilter.ServiceAccessSource dan MegaTrackerFrameFilter.ServiceAccessData untuk mendapatkan efek yang sama.

Misalnya, kode berikut menunjukkan cara mengonfigurasi tracker agar terhubung ke layanan menggunakan parameter runtime sebelum session dimulai:

megaTracker.ServiceType = easyar.MegaApiType.Block;
megaTracker.ServiceAccessSource = easyar.MegaServiceAccessSourceType.APIKey;
megaTracker.ServiceAccessData = new easyar.APIKeyAccessData
{
    ServerAddress = serverAddress,
    APIKey = apiKey,
    APISecret = apiSecret,
    AppID = appID
};

Interval permintaan dan timeout

Pilih objek Mega Tracker di bawah session, lalu ubah opsi di bawah Request Time Parameters untuk menyesuaikan interval waktu dan timeout permintaan layanan.

alt text

Di script, Anda dapat mengubah MegaTrackerFrameFilter.RequestTimeParameters untuk mendapatkan efek yang sama.

Peringatan

Mengubah interval permintaan akan memengaruhi hasil tracking, jadi umumnya tidak disarankan. Gunakan di bawah arahan dukungan teknis EasyAR.

Jika interval permintaan pernah diubah selama aplikasi berjalan, pastikan Anda menyebutkannya saat melaporkan masalah ke EasyAR.

Mengganti library lokalisasi

Gunakan MegaTrackerFrameFilter.SwitchEndPoint untuk mengganti library lokalisasi saat runtime. Saat interface ini digunakan, tampilan kamera dan session tidak akan terputus.

Topik terkait