Abstrak— Augmented reality saat ini adalah sebuah teknologi yang digunakan secara luas di berbagai bidang, seperti permainan digital, hiburan, periklanan, bahkan pendidikan. Teknologi augmented reality saat ini terbatas pada memunculkan objek virtual pada lingkungan nyata dua dimensi. Munculnya objek pada augmented reality juga masih tergantung pada posisi marker, sehingga interaksi antara objek virtual dan lingkungan nyata masih sangat terbatas. Pada pengerjaan tugas akhir ini solusi yang ditawarkan adalah dengan menggunakan kamera kedalaman untuk memberikan interaksi objek virtual pada augmented reality pada lingkungan nyata dimensi tiga. Interaksi ini dimungkinkan dikarenakan solusi yang ditawarkan menggunakan algoritma iterative closest point untuk mendapatkan rekonstruksi dimensi tiga dari lingkungan nyata dan dapat melakukan camera tracking, sehingga interaksi yang terbatas pada adanya marker dapat dihilangkan.
Kata Kunci—Augmented reality, Kinect.
I. PENDAHULUAN
UGMENTED reality adalah sebuah teknologi yang saat
ini sudah digunakan pada bidang yang sangat luas, seperti permainan digital, hiburan, periklanan bahkan pendidikan. Munculnya objek pada augmented reality juga masih tergantung pada posisi marker, sehingga interaksi antara objek virtual dan lingkungan nyata masih terbatas.
Pada penelitian sebelumnya dengan judul “fixed point
augmented reality menggunakan Kinect”[1], telah didapatkan
hasil berupa sistem augmented reality yang mampu menghilangkan keterbatasan interaksi terhadap marker, namun posisi kamera harus statis. Pada tugas akhir ini solusi yang ditawarkan adalah sebuah sistem augmented reality yang di dalamnya terdapat fungsi camera tracking yang mampu menghitung posisi relatif kamera terhadap lingkungan nyata, sehingga posisi kamera dapat bergerak secara bebas.
II. DESAINSISTEMDANIMPLEMENTASI
Gambar 1 merupakan desain dari sistem secara keseluruhan. Sistem terbagi atas dua program utama, yaitu program untuk melakukan rekonstruksi dimensi tiga dan program untuk menjalankan fungsi augmented reality.
A. Rekonstruksi Dimensi Tiga
Rekonstruksi dimensi tiga dari objek nyata menggunakan kamera Kinect dan menggunakan perangkat lunak dengan bantuan pustaka Kinect Fusion dari Kinect SDK. Proses rekonstuksi dimensi tiga terdiri dari lima bagian utama[2].
1) Pengambilan data kedalaman dari kinect
Pada penggunaan kamera Kinect, data kedalaman dapat diaktifkan dengan cara mengaktifkan fungsi DepthStream pada pustaka Kinect SDK. Data kedalaman yang digunakan pada aplikasi ini memiliki resolusi 320 x 240 piksel. Resolusi kecil diambil agar pemrosesan data kedalaman dapat dilakukan dengan cepat, dikarenakan permrosesan data kedalaman dengan ukuran yang besar memerlukan sumber daya yang sangat besar.
2) Konversi Depth Map
Data yang didapatkan dari Kinect sebenarnya adalah data dua dimensi yang berada dalam koordinat gambar. Dalam konversi ini, data dalam koordinat gambar akan dirubah menjadi data dalam data tiga dimensi pada koordinat kamera yang disebut sebagai vertice. Konversi diperlukan karena data yang dapat diproses untuk tahap selanjutnya adalah datayang memiliki data x, y, dan z.
Proses konversi dapat dilakukan dengan menggunakan perhitungan matematis dengan memperhitungkan parameter intrinsik dari kamera Kinect.
3) Menghitung Point Normal
Langkah selanjutnya adalah menghitung arah normal dari setiap titik yang ada pada depth map. Tujuan dari perhitungan point normal ini adalah untuk mengetahui arah orientasi normal dari suatu titik terhadap titik-titik yang ada di
Raycasting Pada Augmented Reality
Dimensi Tiga
Wahyu Setyo Budi, Supeno Mardi Susiki Nugroho, dan Christyowidiasmoro
Jurusan Teknik Elektro, Fakultas Teknologi Industri, Institut Teknologi Sepuluh Nopember (ITS) Jl. Arief Rahman Hakim, Surabaya 60111
E-mail: [email protected], [email protected], [email protected]
A
sekelilingnya. Arah ini nantinya akan disimpan pada setiap titik yang ada.
4) Camera Tracking
Iterative Closest Point (ICP) adalah sebuah algoritma yang
digunakan untuk alignment dua buah bentuk dimensi tiga. ICP menghitung posisi kamera pada setiap depth frame dengan cara melakukan alignment antara frame yang diproses dengan
frame sebelumnya. Pada tahap ini, frame yang diproses
dengan frame sebelumnya tidak boleh memiliki jarak yang sangat jauh. Hal ini disebabkan karena algoritma Iterative
Closest Point menggunakan metode penghitungan jarak
terdekat antara kedua titik untuk mencari korespondensi. Perbedaan yang jauh akan membuat algoritma ini gagal mencari korespondensi karena kesalahan estimasi yang akhirnya menghasilkan galat yang sangat besar. Ilustrasi algoritma ICP dalam melakukan proses alignment dari dua buah depth map dapat dilihat pada gambar 2.
Dengan menggunakan algoritma ICP pada pustaka Kinect Fusion, luaran yang didapatkan adalah parameter ekstrinsik dari kamera yaitu berupa matrix 4x4 [3].
5) Volumetric Integration [2]
Pustaka Kinect fusion menggunakan volumetric surface
representation sebagai representasi dari rekonstruksi dimensi
tiga dari objek nyata. Integrasi dari depth data terhadap volume dilakukan pada setiap frame secara terus menerus sampai program dihentikan. Proses integrasi menggunakan
running average untuk mengurangi noise. Pada saat kamera
bergerak memindai lingkungan nyata, lubang yang ada pada volume akan terisi. Volume akan menjadi lebih detail ketika kamera mendekati lingkungan nyata dan mendapatkan depth
data dengan resolusi yang lebih tinggi. B. Aplikasi Augmented Reality
Setelah proses rekonstruksi dimensi tiga, beberapa data akan digunakan oleh aplikasi augmented reality sebagai data masukan. Proses ini terbagi menjadi empat bagian utama.
1) Atur Parameter Kamera
Pada proses sebelumnya telah didapatkan parameter ekstrinsik dari kamera yaitu berupa matrix 4x4 pada persamaan 1. [ 𝑚1 𝑚5 𝑚2 𝑚6 𝑚9 𝑚13 𝑚10 𝑚14 𝑚3 𝑚7 𝑚4 𝑚8 𝑚11 𝑚15 𝑚12 𝑚16 ] (1) Persamaan 1 didekomposisi sehingga menjadi parameter yang digunakan pada aplikasi Augmented reality yang menggunakan Microsoft XNA Game Studio. Beberapa parameter yang diperlukan adalah posisi kamera (persamaan 2), target kamera (persamaan 3), pitch (persamaan 4), roll (peramaan 5), dan yaw (persamaan 6). Pada saat inisiasi awal, semua parameter tersebut bernilai nol.
[ 𝑥 𝑦 𝑧 ] = − [𝑚1 𝑚5 𝑚9 𝑚2 𝑚3 𝑚6 𝑚7 𝑚10 𝑚11 ] 𝑇 ∗ [ 𝑚13 𝑚14 𝑚15 ] (2) [ 𝑥 𝑦 𝑧 ] = [ 𝑚1 𝑚5 𝑚9 𝑚2 𝑚3 𝑚6 𝑚7 𝑚10 𝑚11 ] 𝑇 ∗ [ 0 0 1 ] (3) 𝑝𝑖𝑡𝑐ℎ = 𝑎𝑡𝑎𝑛2(𝑚7, 𝑚11) 𝑟𝑎𝑑 (4) 𝑟𝑜𝑙𝑙 = 𝑎𝑡𝑎𝑛2(𝑚2, 𝑚1) 𝑟𝑎𝑑 (5) 𝑦𝑎𝑤 = 𝑎𝑡𝑎𝑛2 (−𝑚3, √𝑚72+ 𝑚112) 𝑟𝑎𝑑 (6) 2) Render Data RGB
Kamera Kinect menangkap gambar RGB dengan kecepatan sebesar 30 fps. Untuk keperluan augmented reality, gambar yang ditangkap oleh kamera Kinect harus ditampilkan pada bagian program kedua. Streaming video ini nantinya akan digambar pada XNA sebagai sebuah texture yang berada pada sebuah persegi panjang di depan kamera. Video tersebut akan selalu diperbarui pada setiap frame.
3) Render Objek Virtual
Pada augmented reality ini, program akan memunculkan objek virtual pada lingkungan nyata. Posisi dari keluarnya objek virtual telah ditentukan sebelumnya pada satu koordinat x, y, z.
Pada program ini, objek virtual akan selalu berada pada posisi yang sama walaupun posisi kamera bergerak. Posisi objek virtual yang selalu berada pada posisi yang tetap walaupun terjadi pergerakan kamera dapat dilihat pada gambar 3.7 a dan 3.7 b. Pada gambar tersebut posisi objek virtual yang berupa teko selalu berada pada posisi yang sama walaupun kamera bergeser.
Sebelum render objek virtual dilakukan, proses yang sebelumnya dilakukan adalah inisiasi parameter kamera pada
Microsoft XNA Game Studio dengan menggunakan parameter
yang didapatkan dari algoritma ICP pada proses sebelumnya. Setelah itu proses yang selanjutnya dilakukan adalah proses render data RGB sebagai texture. Setelah kedua proses tersebut selesai dilakukan, proses yang selanjutnya dilakukan adalah melakukan render objek virtual sesuai dengan posisi yang sudah ditentukan sebelumnya (0, 0, 1.5f).
4) Depth Masking
Tahapan selanjutnya adalah melakukan depth masking pada
augmented reality. Depth masking memberikan efek interaksi
kedalaman antara objek nyata dan objek virtual. Hasil dari depth masking dapat terlihat pada gambar 4. pada gambar 4 sebagian objek virtual berada di belakang objek nyata.
Depth masking ini dilakukan dengan mendapatkan depth map dari rekonstruksi dimensi tiga dari sudut pandang kamera
saat itu. Untuk mendapatkan depth map dari sudut pandang kamera digunakan metode raycasting. Metode raycasting dilakukan dengan memancarkan sinar dari posisi tertentu, pada kasus ini dari posisi kamera, dan semua titik yang
terkena cahaya nantinya akan diambil dan digunakan sebagai
depth masking pada augmented reality.
Gambar 5 Ilustrasi raycast
Gambar 5 adalah ilustrasi raycasting. Titik berwarna kuning adalah sumber raycast yang berupa kamera dan garis kuning adalah ilustrasi cahaya yang diarahkan ke rekonstruksi dimensi tiga. Render Depth Masking jeda = maxJeda? Set maxJeda Set jeda Reset jeda Increment Jeda Selesai Mulai Update data Depth Masking (Raycasting) Render data RGB Render Objek Virtual Inisiasi kamera pada XNA Parameter kamera dari ICP A A
Gambar 6 Alur Render Depth Masking
Gambar 6 adalah alur render setelah depth masking diaktifkan. Bagan dengan warna biru menunjukkan proses mendapatkan data dan render depth masking. Data yang didapatkan dari proses raycasting digunakan pada augmented
reality sebagai depth masking. Proses ini dilakukan setelah
proses render data RGB dan objek virtual selesai. Pada proses raycsting terdapat jeda yang diatur tiap beberapa
frame sesuai dengan maxJeda. Saat hitungan jeda masih di
bawah nilai maxJeda, maka data yang digunakan sebagai
depth masking adalah data hasil raycast sebelumnya. Ketika
jeda sama dengan maxJeda, maka proses raycasting baru dilakukan. Hal ini dapat menghemat sumber daya yang digunakan untuk menjalankan sistem, sehingga performa sistem dapat meningkat.
(a) (b)
Gambar 3 (a) dan (b) Hasil render objek virtual dari sudut pandang berbeda.
III. HASILPENGUJIAN
Pengujian dari software dan hardware yang telah diimplementasikan untuk mengetahui apakah fungsi dari sistem yang direncanakan telah bekerja sesuai dengan rancangan.
Tabel 1 Spesifikasi komputer
Komponen Spesifikasi
Sistem Operasi Windows 7 Ultimate 64-bit
Processor Intel Core ™ i7 CPU @2.2 GHz (4CPUs)
Memory 4096MB RAM
Versi DirectX DirectX 11
Versi DxDiag 8.15.10.2626 64-bit Unicode
Display Adapter Name NVIDIA GeForce GT 640M Total Display Memory 2GB
Spesifikasi komputer yang digunakan dalam pengujian ini ditampilkan pada Tabel 1.
A. Pengujian Dengan Benda Sederhana
Dari sistem yang telah dibuat dilakukan analisa untuk dapat menentukan performa dari aplikasi yang dibuat pada beberapa skenario yang mungkin dihadapi. Skenario pertama yang dibuat adalah sebuah lingkungan nyata yang sangat sederhana, yaitu sebuah sebuah kubus dengan sisi yang rata. Lingkungan nyata pada pengujian ini dapat dilihat pada gambar 7.
Gambar 7 Lingkungan nyata pengujian
Pada pengujian ini, kotak diletakkan sejauh 1 meter di depan kamera. Pemilihan lokasi ini berada pada jarak ideal penangkapan data kedalaman Kinect, yaitu 0.8 m – 4 m. pengujian diawali dengan memunculkan objek virtual berupa teko di belakang posisi kotak. Langkah selanjutnya adalah menggerakkan kamera dengan beberapa macam gerakan dan melihat posisi objek virtual. Ilustrasi dari pengujian pertama dapat dilihat pada gambar 7.
Gambar 8. Ilustrasi pengujian
Dari pengujian yang dilakukan, didapatkan beberapa hasil. Hasil dari pengujian pertama dapat dilihat pada tabel 2.
Tabel 2 Hasil pengujian pada benda sederhana
No Hasil Pengujian
1
2
3
Dari hasil pada tabel 2. Posisi awal objek virtual adalah pada baris nomor 1. Baris selanjutnya menunjukkan perubahan posisi dan target kamera. Dari hasil pengujian terlihat bahwa posisi objek tetap berada pada posisi semula walaupun kamera dirubah posisi dan targetnya. Pada pengujian terlihat bahwa depth masking memiliki performa yang terlihat cukup baik meskipun masih terdapat celah antara objek virtual dan objek nyata. Celah ini ditandai dengan warna merah pada gambar.
B. Pengujian Dengan Benda Tak Beraturan
Skenario yang digunakan saat ini adalah melakukan pengujian pada lingkungan nyata yang memiliki sebuah objek nyata dengan bentuk yang tak beraturan. Objek dengan bentuk tak beraturan yang dimaksud adalah objek yang bidangnya tidak merupakan bagian dari model bangun ruang dimensi tiga primitiv (kubus, balok, limas, dll). Tujuan dilakukan pengujian ini adalah untuk melihat seberapa handal sistem dalam memberikan depth map yang tepat pada objek yang bentuk bidangnya tidak beraturan. Ilustrasi dari pengujian kali ini dapat dilihat pada gambar 9.
Gambar 9 Ilustrasi pengujian
Pengujian diawali dengan memunculkan objek virtual berupa teko di belakang posisi benda nyata. Percobaan dilakukan beberapa kali dengan menggunakan objek nyata yang berbeda untuk melihat kemampuan sistem jika pada lingkungan nyata terdapat objek nyata dengan bentuk tidak beraturan. Hasil dapat dilihat pada tabel 3.
Dari hasil pengujian terhadap beberapa benda dengan bentuk yang tidak beraturan terlihat bahwa depth masking tidak berjalan sempurna, ada beberapa area yang memiliki oleh depth masking yang tidak sempurna dan tidak sesuai dengan lingkungan nyata. Area yang seharusnya ditandai oleh kurva merah merupakan area yang kesalahan dalam depth
masking. Hal ini dikarenakan kemampuan kamera Kinect yang
kurang presisi. Dari hasil juga terlihat bahwa semakin rumit bentuk objek nyata, semakin besar galat pada depth masking. Galat yang paling besar dapat dilihat pada percobaan dengan objek nyata nomor 5 pada table 3. Pada area yang ditandai warna merah seharusnya gambar objek virtual yang ditutupi objek nyata dapat terlihat dari celah objek nyata, namun objek nyata dikenali sebagai objek pejal dan tidak terdapat lubang, sehingga objek virtual tertutup penuh. Hal ini diakibatkan karena Kinect tidak memiliki presisi yang tinggi, sehingga
data rekonstruksi dimensi tiga yang digunakan sebagai depth
masking tidak memiliki detail yang baik.
C. Pengujian Pengaruh Nilai Jeda Depth Masking Terhadap Performa Sistem
Pada pengujian ini parameter yang akan diukur adalah hubungan antara performa dan kualitas depth masking. Fitur
depth masking membutuhkan sumber daya yang besar,
sehingga membuat performa dari sistem menurun. Dalam Tabel 3 Hasil pengujian pada benda tak beraturan
No Hasil Pengujian 1 2 3 4 5
pengujian ini performa sistem diukur dengan besarnya frame
per second yang dapat diraih.
Untuk membuat performa sistem naik dapat dilakukan dengan memberikan jeda pada fitur depth masking. Depth masking tidak diperbarui pada setiap frame, namun diberikan jeda beberapa frame sebelum depth masking diperbarui. Tindakan ini dapat membuat performa sistem meningkat, namun ada waktu jeda antara video streaming dan depth
masking. Hasil pengujian dapat dilihat pada gambar 10.
Gambar 10. Grafik hasil pengujian pemberian jeda depth
masking
Pengujian ini akan mencari nilai jeda yang optimal agar performa sistem dapat naik, namun tidak memberikan jeda update depth masking yang terlalu lama. Dari hasil pengujian ini didapatkan bahwa pengaruh depth masking terhadap performa sistem cukup besar, yaitu terjadi penurunan rata-rata performa sistem sebesar 7.29 fps atau sebesar 51.19% dari performa sistem. Pada pengujian ini pemberian jeda sebesar 3
frame jeda untuk update depth mask memberikan hasil yang
paling optimal. Jika jeda update depth frame di atas 3 frame, maka jeda update depth frame akan bernilai lebih dari 0.5 detik. Jeda selama 0.5 detik adalah nilai yang masih dapat diterima pada pengujian berdasarkan pengamatan visual.
D. Pengujian dan Analisa Pada Objek Virtual Bergerak
Skenario yang digunakan pada pengujian kali ini adalah dengan menggunakan objek virtual yang bergerak sesuai dengan jalur gerakan yang sudah ditentukan sebelumnya. Pada lingkungan nyata terdapat sebuah kubus dengan sisi yang rata. Pada saat inisiasi, objek virtual berada pada posisi (-.5f, 0, 1.5f). Koordinat ini menempatkan objek virtual berada di belakang objek nyata (pada sumbu z) jika ditinjau dari posisi inisiasi kamera. Pada pengujian sistem kali ini, objek virtual bergerak searah sumbu x dengan kecepatan 0.003f per frame. Tujuan dari pengujian ini adalah untuk melihat seberapa handal sistem dalam menangani objek virtual yang terus bergerak pada saat sistem sedang berjalan.
Gambar 11 (a) Jalur pergerakan objek virtual (b) setelah pergerakan kamera
Hasil pengujian dapat dilihat pada gambar 11 a. Pada saat inisiasi awal, pesawat berada di sebelah kanan dari objek nyata yang berupa kubus. Pada saat program berjalan, objek
virtual bergerak searah sumbu x mengikuti garis. Garis
berwarna hijau adalah garis yang menunjukkan posisi objek
virtual tidak tertutup oleh depth masking, sedangkan garis
merah adalah koordinat dimana objek virtual tertutup oleh
depth masking. Dari hasil pengujian terlihat bahwa pada
beberapa koordinat objek virtual yang seharusnya tertutup oleh depth masking ternyata tidak tertutupi oleh depth
masking, begitu juga sebaliknya.
Gambar 11 b adalah hasil sistem ketika posisi kamera berubah. Ketika kamera bergerak terlihat bahwa objek virtual tetap berada pada jalur yang sama seperti saat posisi kamera belum bergerak (gambar 11 a). hal ini menunjukkan bahwa sistem berjalan dengan cukup baik pada kasus objek virtual yang bergerak jika ditinjau pada konsistensi posisi objek
virtual terhadap pergerakan kamera.
E. Pengujian Kecepatan Pergerakan Kamera
Skenario yang digunakan pada pengujian ini adalah dengan menggerakkan kamera pada kecepatan tertentu. Dari hasil pengujian sebelumnya diketahui bahwa performa sistem cukup rendah dengan performa maksimal sebesar 14.24 fps. Dengan performa yang rendah, kecepatan pergerakan kamera tidak bisa terlalu tinggi dikarenakan akan mengakibatkan kegagalan dalam proses camera tracking. Tujuan dari pengujian ini adalah untuk mengetahui kecepatan kamera yang dapat diterima sebagai masukan sistem tanpa terjadi kegagalan
camera tracking.
Pada pengujian ini, di lingkungan nyata terdapat sebuah kubus dengan sisi yang rata dengan jarak 1 meter di depan kamera. Fitur fepth masking diaktifkan dengan menggunakan jeda sebesar 3 frame. Kamera digerakkan searah dengan sumbu x sejauh 50 cm. Hasil pengujian dapat dilihat pada tabel 4.5.
Dari pengujian didapatkan hasil bahwa keberhasilan camera
tracking sebesar 100% dapat diraih dengan kecepatan
pergerakan kamera sebesar 0,1 m/detik. 14.24 6.95 7.61 8.26 8.99 9.374 10.82 0.072 0.144 0.263 0.484 0.667 0.821 0.924 0 5 10 15 tanpa depth mask 0 1 3 5 7 9 FPS Jeda Frame
Tabel 4.5 Hasil pengujian kecepatan pergerakan kamera
No Kecepatan (m/detik) Percobaan
Presentase Keberhasilan (%) 1 2 3 4 5 1 0,250 x x x x v 20 2 0,167 x x v x v 60 3 0,125 v v x v v 80 4 0,100 v v v v v 100 5 0,083 v v v v v 100
IV. KESIMPULANDANSARAN
A. Kesimpulan
Berdasarkan pada hasil perancangan, simulasi dan pengujian dari keseluruhan sistem dalam Tugas Akhir ini, maka diperoleh kesimpulan sebagai berikut:
1. Dengan adanya pergerakan kamera, objek virtual tetap berada pada posisi seharusnya.
2. Pengujian performa menunjukkan bahwa pengaruh fitur depth mask terhadap performa sistem cukup tinggi. Saat fitur ini diaktifkan dengan jeda 0 frame terjadi penurunan performa sebesar 7.29 fps dari 14.24 fps menjadi 6.95 fps atau sebesar 51.19% dari performa sistem.
3. Nilai jeda antara depth masking yang paling optimal berdasarkan hasil pengamatan adalah sebesar 3 frame dengan performa sistem sebesar 8.26 fps dan perbaharuan visual depth masking adalah 0.484 detik. Peningkatan performa sistem yang terjadi dengan penggunaan nilai ini adalah sebesar 1.31 fps atau 18.85% jika dibandingkan dengan tanpa penggunaan jeda.
4. Kecepatan pergerakan kamera sebesar 0,1 m/detik adalah kecepatan kamera maksimum dengan keberhasilan camera tracking sebesar 100%.
B. Saran
Penelitian selanjutnya sebaiknya menambahkan fitur
segmentasi pada rekonstruksi dimensi tiga sebagai posisi
keluarnya objek virtual. Dengan fitur tersebut munculnya dapat dibangun sebuah smart terrain yang bersifat adaptif terhadap kondisi lingkungan nyata.
DAFTARPUSTAKA
[1] Ashari, Riska Wahyu. “Fixed Point Augmented Reality Menggunakan
Kinect”. Publikasi Tugas Akhir. Surabaya: Institut Teknologi Sepuluh
Nopember, 2013.
[2] Izadi, Zahram. “KinectFusion: Real-time 3D Reconstruction and
Interaction Using a Moving Depth Camera”. Microsoft Research.
Cambridge University, 2011.
[3] Colas, Francis. “Iterative Closest Point Algorithm”. [Presentation] Zurich : ETHZurich, 2011.