Mengontrol Proses Pemantauan Mega
Artikel ini menjelaskan cara mengontrol berbagai fungsi dan parameter dalam proses pemantauan Mega untuk memenuhi kebutuhan berbagai skenario aplikasi.
Sebelum Memulai
Alur kerja tracker
Alur kerja tracker adalah sebagai berikut:
flowchart LR
subgraph startup_graph[Memulai]
direction TB
sstart((session dimulai))
create[Dibuat secara asli]
load(Memuat target)
init_g[[Inisialisasi]]
end
subgraph init_graph[Inisialisasi]
direction TB
init_{Inisialisasi 6DoF berhasil<br>atau bukan 6DoF}
init[[Proses inisialisasi pelacakan lokal]]
localization_g[[Lokalisasi awal]]
end
subgraph localization_graph[Lokalisasi awal]
direction TB
localize__{Lokalisasi diaktifkan dan<br>melebihi interval permintaan}
localize[Lokalisasi cloud]
localize_{Terlokalisasi ke blok dan<br>blok telah dimuat}
tracking_g[[Pelacakan]]
end
subgraph tracking_graph[Pelacakan]
direction TB
tracking[[Pelacakan terus-menerus]]
localizet_{Lokalisasi diaktifkan dan<br>melebihi interval permintaan}
localize2[Lokalisasi cloud]
localize2_{Terlokalisasi ke blok dan<br>blok telah dimuat}
localization_g2[[Lokalisasi awal]]
end
subgraph stopping_graph[Berhenti]
direction TB
unload(Membuang target)
dispose[Dihancurkan secara asli]
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
Alur tersebut secara umum dibagi menjadi beberapa tahap:
- Memulai:
- Setelah session dimulai, tracker di lapisan asli akan dibuat.
- Setelah Start() target sendiri, target akan dimuat ke dalam tracker yang sesuai.
- Inisialisasi:
- Saat menggunakan 6DoF frame source, akan masuk ke proses inisialisasi pelacakan lokal.
- Saat menggunakan non-6DoF frame source, tahap inisialisasi akan dilewati dan langsung masuk ke tahap lokalisasi awal.
- Proses ini mungkin memakan waktu, tergantung pada kompleksitas adegan dan kemampuan performa perangkat, dan biasanya terkait dengan algoritma yang digunakan di lapisan bawah frame source.
- Dalam konfigurasi default, konten tahap ini tidak akan ditampilkan. Anda dapat mengontrol perilaku ini melalui opsi komponen ActiveController.
- Lokalisasi awal:
- Jika lokalisasi diaktifkan dan melebihi interval permintaan, tracker akan mengirim permintaan lokalisasi ke cloud.
- Setelah lokalisasi berhasil, jika blok yang sesuai dengan id yang dikembalikan oleh layanan lokalisasi telah dimuat, maka masuk ke tahap pelacakan; jika blok belum dimuat, maka terus menunggu hingga blok selesai dimuat dan menunggu permintaan lokalisasi berikutnya.
- Setelah lokalisasi gagal, tracker akan terus menunggu permintaan lokalisasi berikutnya.
- Proses ini mungkin memakan waktu, tergantung pada tingkat kemudahan adegan untuk dilokalisasi dan kondisi jaringan.
- Dalam konfigurasi default, konten tahap ini tidak akan ditampilkan. Anda dapat mengontrol perilaku ini melalui opsi komponen ActiveController.
- Jika lokalisasi diaktifkan dan melebihi interval permintaan, tracker akan mengirim permintaan lokalisasi ke cloud.
- Pelacakan:
- Tracker akan terus melacak blok saat ini.
- Jika lokalisasi diaktifkan dan melebihi interval permintaan, tracker akan mengirim permintaan lokalisasi ke cloud.
- Setelah lokalisasi berhasil, jika id yang dikembalikan oleh layanan lokalisasi tidak berubah, maka lanjut melacak; jika id berubah dan blok telah dimuat, maka beralih ke blok baru dan lanjut melacak; jika id berubah dan blok belum dimuat, maka terus menunggu hingga blok selesai dimuat dan menunggu permintaan lokalisasi berikutnya.
- Setelah lokalisasi gagal, tracker akan terus melacak blok saat ini dan menunggu permintaan lokalisasi berikutnya.
- Dalam konfigurasi default, hanya konten di bawah node target yang berada dalam status pelacakan (TargetController.IsTracked ==
true) yang akan ditampilkan. Anda dapat mengontrol perilaku ini melalui opsi komponen ActiveController.
- Berhenti:
- Setelah session berhenti, target akan dibuang dan tracker di lapisan asli akan dihancurkan.
Mengatur Tingkat Dukungan Perangkat
Properti MegaTrackerFrameFilter.MinInputFrameLevel dari MegaTrackerFrameFilter digunakan untuk menentukan tingkat perangkat minimum yang didukung oleh Mega.
![]()
Mega dapat berjalan pada hampir semua jenis sumber data frame, tetapi sumber data frame yang berbeda memiliki pengaruh yang berbeda terhadap efek pelacakan.
Secara default, Mega akan memilih sumber data frame dengan tingkat tertinggi yang didukung oleh perangkat untuk pelacakan. Sesi yang mendukung Mega dalam konfigurasi default telah dikonfigurasi dengan sumber data frame yang mendukung 6DoF dan 5DoF.
Untuk mendukung sumber data frame dengan tingkat tertentu saat Mega berjalan, diperlukan dua syarat:
- Sumber data frame yang diperlukan ada dalam kelompok sumber data frame opsional sesi.
- MegaTrackerFrameFilter.MinInputFrameLevel lebih besar atau sama dengan tingkat CameraTransformType dari sumber data frame yang diperlukan.
Misalnya, untuk mendukung pelacakan 3DoF dalam sesi default, diperlukan:
- Menambahkan ThreeDofCameraDeviceFrameSource ke kelompok sumber data frame sesi.
- Mengubah MegaTrackerFrameFilter.MinInputFrameLevel menjadi ThreeDof.
Sebagai contoh lain, untuk menghapus dukungan pelacakan 5DoF dalam sesi default, diperlukan:
- Menghapus InertialCameraDeviceFrameSource dari kelompok sumber data frame sesi.
- Mengubah MegaTrackerFrameFilter.MinInputFrameLevel menjadi SixDof (bahkan jika tidak diubah, karena tidak ada sumber data frame 5DoF, 5DoF tidak akan digunakan).
Jika tidak ada sumber data frame yang memenuhi syarat yang tersedia, penyusunan sesi akan gagal.
Memahami Status Sistem Saat Ini
Dalam konfigurasi sesi default, Pesan UI akan ditampilkan di layar, yang berisi informasi tentang status pelacakan Mega.
Ketika pemetaan berhasil, informasi layanan Mega akan berisi teks status Found; ketika pemetaan gagal, informasi layanan Mega akan berisi teks status NotFound.
Blok yang telah dimuat akan ditampilkan sebagai Block [scnObj=<objName>] (<trackingStatus>): <name> (<id>). Di mana <objName> adalah nama objek skenario yang sesuai dengan blok, <name> adalah nama blok, dan <id> adalah ID blok. trackingStatus mungkin berupa Tracking atau NotTracking, masing-masing menunjukkan apakah blok saat ini sedang dilacak.
![]()
Ketika pemetaan berhasil, informasi blok yang ditemukan tetapi belum dimuat akan ditampilkan sebagai Block [scnObj=?]: <name> (<id>).
![]()
Kiat
NotFound adalah status normal, dan status ini sering muncul selama seluruh proses kerja Mega. Saat status ini muncul, pelacakan masih berlanjut. Biasanya, tidak perlu melakukan penanganan khusus terhadap status NotFound dalam pengembangan aplikasi.
Anda dapat menggunakan acara MegaTrackerFrameFilter.LocalizationRespond untuk mendapatkan status pemetaan saat ini, sehingga dapat mengetahui apakah sistem saat ini telah menemukan target pelacakan.
Kode berikut menunjukkan cara menggunakan acara ini, serta cara penanganan status异常yang umum perlu diperhatikan oleh 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 membangkitkan, pengguna terminal perlu menunggu
}
if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
{
// Batas QPS terlampaui, ada kemungkinan pengguna terminal mengalami kegagalan pemetaan secara acak (kualitas pelacakan keseluruhan menurun)
// Biasanya, diperlukan pembayaran untuk meningkatkan batas QPS guna menjamin kualitas pelacakan pada jumlah pengguna saat ini
}
if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
{
// Token telah kedaluwarsa, hal ini hanya akan terjadi saat menggunakan antarmuka Token untuk mengakses layanan
// Untuk mengatasi masalah ini, aplikasi perlu meminta Token dari backend sendiri dan memanggil MegaTrackerFrameFilter.UpdateToken untuk memperbarui
}
}
Jika aplikasi sering mengalami status MegaTrackerLocalizationStatus.RequestTimeout, biasanya hal ini menunjukkan bahwa kondisi jaringan perangkat yang terhubung ke layanan tidak baik. Disarankan untuk mengoptimalkan lingkungan jaringan guna meningkatkan kualitas pelacakan. Dalam skenario di mana kondisi jaringan tidak dapat ditingkatkan, Anda dapat mempertimbangkan untuk menambah waktu batas permintaan.
Catatan
Tidak dapat memperoleh pose yang dikembalikan oleh pemetaan melalui acara ini.
Faktanya, pose yang dikembalikan oleh pemetaan tidak diperlukan dalam pengembangan aplikasi. EasyAR akan menghitung pose yang lebih akurat melalui algoritma lokal setelah pemetaan dikembalikan dan mengembalikannya kepada pengembang untuk digunakan. Pose tersebut sudah tercermin dalam transformasi blok, dapat merujuk ke Mendapatkan Hasil Eksekusi Sesi.
Pause dan Lanjutkan
Fitur pelacakan dan penentuan lokasi Mega dapat dipause dan dilanjutkan secara terpisah.
Pause Tracking
Set MegaTrackerFrameFilter.enabled to false to pause tracking.
By default, after tracking is paused, all content under the block nodes will be hidden.
Pause Localisasi
Anda dapat menghentikan localisasi dengan mengatur MegaTrackerFrameFilter.EnableLocalization menjadi false.
Peringatan
Menghentikan localisasi akan mempengaruhi kinerja pelacakan. Umumnya, tidak disarankan untuk mengubah pengaturan ini. Gunakan fitur ini di bawah panduan dukungan teknis EasyAR.
Jika localisasi dihentikan selama eksekusi aplikasi, pastikan untuk menyebutkan hal ini saat melaporkan masalah ke EasyAR.
Layanan dan Kontrol Permintaan
Anda dapat mengontrol perilaku permintaan layanan dengan mengubah parameter komponen MegaTrackerFrameFilter.
Jarak permintaan dan waktu habis
Pilih objek Mega Tracker di bawah session, lalu ubah opsi di bawah Request Time Parameters untuk mengatur jarak waktu permintaan layanan dan waktu habis.
![]()
Dalam skrip, Anda dapat mengubah MegaTrackerFrameFilter.RequestTimeParameters untuk mencapai efek yang sama.
Peringatan
Mengubah jarak permintaan akan mempengaruhi efek pelacakan. Umumnya tidak disarankan untuk diubah. Gunakanlah dengan panduan dukungan teknis EasyAR.
Jika jarak permintaan telah diubah selama eksekusi aplikasi, pastikan untuk menyebutkan hal ini saat melaporkan masalah ke EasyAR.
切换定位库
Gunakan MegaTrackerFrameFilter.SwitchEndPoint untuk beralih ke pustaka lokalisasi saat runtime. Saat menggunakan antarmuka ini, tampilan kamera dan sesi tidak akan terputus.
Topik terkait
- Praktik terbaik AR Session untuk Mega menjelaskan cara membuat dan mengkonfigurasi AR Session untuk Mega.
- Menambahkan target pelacakan Mega menjelaskan cara menambahkan blok target pelacakan Mega dan cara memuat model blok di editor Unity untuk membantu pengembangan.
- Menambahkan satu set sumber data frame menjelaskan cara mengubah grup sumber data frame sesi.
- Mendapatkan hasil eksekusi sesi menjelaskan cara mendapatkan hasil pelacakan komponen sesi.
- Pesan UI menjelaskan cara menggunakan pesan UI untuk menampilkan status sesi.