Simulasi Pergerakan Robot 3D dengan Komando Deteksi Citra Pergerakan Tangan dengan Opencv dan Microsoft XNA
Niko Purwanto Putra NRP 5108 100 511
Pendahuluan • Trend Control Deteksi Citra. • Simulasi adalah suatu proses peniruan dari sesuatu yang nyata beserta keadaan sekelilingnya. • OpenCV adalah library pengolah citra dengan menggunakan bahasa C. • Microsoft XNA adalah sebuah framework yang berjalan pada C#.
Perumusan Masalah Permasalahan yang diangkat dalam perancangan dan pembuatan implementasi tugas akhir ini meliputi : • Bagaimana mengenali pola tangan pada OpenCV. • Bagaimana membuat kontrol realtime simulasi robot 3D menggunakan Microsoft XNA • Menghubungkan hasil deteksi citra pengontrolan dalam simulasi secara realtime
Tujuan Menggabungkan simulasi robot 3D dengan control deteksi citra tangan menggunakan Library OpenCV dan Framework Microsoft XNA.
Manfaat • Pengembangan Game Real Time menggunakan Deteksi Citra • Pengembangan Simulasi dalam perancangan Robot • Pengembangan Game 3D multi machine
Dasar Teori OpenCV OpenCV didesain untuk komputasional yang efisien dan lebih fokus pada aplikasi real-time. Salah satu tujuan OpenCV untuk menyajiakan penggunaan yang mudah infrastruktur komputer vision
Dasar Teori EmguCV EmguCV adalah cross platfrom .net wrapper untuk Library intel OpenCV pengolah citra. Yang memperbolehkan fungsi OpenCV dipanggil didalam .net bahasa yang cocok seperti C#, VB, VC++,ironPython dan lain-lain.
Dasar Teori Framework XNA Platform XNA dan kemampuan untuk membuat aplikasi pada Xbox360 menjadi kemajuan yang sangat nyata pada dunia pemrograman game. Platform XNA berlanjut untuk berkembang, dengan direleasenya XNA 3.0, pengembang XNA mempunyai kemampuan untuk membuat game untuk microsoft zune mp3 player.
Perancangan Deteksi Citra
Start
Obyek yang nantinya akan dideteksi adalah citra tangan. Deteksi warna kulit
Deteksi kontur tangan
Deteksi jari
Finish
Perancangan Simulasi Robot 3D Intro Intro adalah awal Screen pembuka pada simulasi. Terdapat dua gambar yang akan diload pada Intro.
Start
Intro 1
Intro 2
Finish
Perancangan Simulasi Robot 3D Main Menu screen Main Menu Screen adalah tampilan utama dengan 4 tombol yang tersedia.
Perancangan Simulasi Robot 3D Help screen Screen Help adalah Screen bantuan tentang bagaimana cara mengontrol robot yang berada didalam simulasi dengan komando deteksi tangan
Start
Main Menu Screen
Help Screen
Finish
Perancangan Simulasi Robot 3D Credits screen Credits screen adalah Screen yang berisi tentang nama-nama kontributor game.
Start
Main Menu Screen
Credit Screen
Finish
Perancangan Pengontrolan Robot 3D secara RealTime Pengontrolan pada robot dilakukan secara realtime. Apabila tangan sudah terdeteksi maka Posisi tangan tersebut akan disinkronisasikan dengan movement pada robot 3D.
Implementasi Sistem operasi dan beberapa tools yang digunakan dalam membangun aplikasi ini adalah : •Sistem operasi Microsoft Windows VISTA •Framework Microsoft XNA •Microsoft Visual Studio 2008 SP1 •Game Engine TorqueX 3D •OpenCV dengan wrapper emguCV
Implementasi Implementasi Deteksi Citra
Untuk mendeteksi citra tangan yang dilakukan terlebih dahulu adalah Mencari range warna kulit dari tangan
hsv_min = new Hsv(0, 45, 0); hsv_max = new Hsv(20, 255, 255); YCrCb_min = new Ycc(0, 131, 80); YCrCb_max = new Ycc(255, 185, 135);
Implementasi Implementasi Deteksi Citra
Kemudian mencari kontur tangan dari range warna kulit yang terdeteksi
Contour
contours = skin.FindContours(Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_LIST, storage); Contour biggestContour = null;
Implementasi Implementasi Deteksi Citra
Apabila terdeteksi kontur tangan yang lebih besar maka Kontur tersebut dijadikan variabel selanjutnya Result1 = contours.Area; if (Result1 > Result2) { try { Result2 = Result1; biggestContour = contours; } catch { storage.Clear(); } } contours = contours.HNext;
Implementasi Implementasi Deteksi Citra
Selanjutnya adalah mendeteksi jari-jari tangan dengan menentukan : •StartPoint •DepthPoint •StartdepthLine
Implementasi Implementasi Simulasi 3D Intro
Implementasi Implementasi Simulasi 3D Start Screen
Implementasi Implementasi Simulasi 3D Main Menu Screen
Implementasi Implementasi Simulasi 3D Credits Screen
Implementasi Implementasi Simulasi 3D Play Screen obyek yang akan diload yang berada pada folder data\models\robot\orange_player.dts
T3DTSRenderComponent componentRender = new T3DTSRenderComponent(); componentRender.ShapeName = @"data\models\robot\orange_player.dts"; componentRender.SceneGroupName = "PlayerObject"; objPlayer.Components.AddComponent(componentRender);
Implementasi Implementasi Simulasi 3D Physic engine Untuk physic engine obyek player diset dengan grafitasi sebesar 25 bertipe float. Massanya sebesar 300. Pergeseran kinetik dan static sebesar 0.5 bertipe float
componentPhysics.SceneGroupName = "PlayerObject"; //tambahan componentPhysics.RenderCollisionBounds = false; componentPhysics.ResolveCollisions = true; CollisionSphereShape css1 = new CollisionSphereShape(); css1.Radius = 0.65f; css1.Center = new Vector3(0f, -0.2f, 0.65f); componentPhysics.CollisionBody.AddCollisionShape(css1); CollisionSphereShape css2 = new CollisionSphereShape(); css2.Radius = 0.65f; css2.Center = new Vector3(0f, 0f, 1.85f); componentPhysics.CollisionBody.AddCollisionShape(css2); componentPhysics.RotationScale = 0; componentPhysics.GravityScale = 25f; componentPhysics.Mass = 300; componentPhysics.RigidManager = rigidManager; RigidMaterial rm = new RigidMaterial(); rm.Restitution = 0.5f; rm.KineticFriction = 0.5f; rm.StaticFriction = 0.5f; componentPhysics.RigidMaterial = rm; objPlayer.Components.AddComponent(componentPhysics); //akhir tambahan
Implementasi Implementasi Simulasi 3D Play Screen
Implementasi Implementasi Pengontrolan secara RealTime Movement Untuk bergerak maju pada obyek player maka untuk velocity forward diberikan nilai 0.5 bertipe float, sedangkan untuk bergerak mundur maka forward dikalikan dengan negatif 0.5 bertipe float
if (Game.Instance.JumlahTangan==1) { rotX = 0f; ma = 0.5f; } if (Game.Instance.JumlahTangan == 2) { rotX = 0f; ma = -0.5f; } if (Game.Instance.JumlahTangan == 5 || Game.Instance.JumlahTangan == 0) { rotX = 0f; ma = 0f; } Matrix playerTranslationMatrix = _playerSceneComponent.Transform; Vector3 right = MatrixUtil.MatrixGetRow(0, ref playerTranslationMatrix); Vector3 forward = MatrixUtil.MatrixGetRow(1, ref playerTranslationMatrix); Vector3 vel = ((forward * ma) + (right * 0)) * _moveSpeed; _rigidComponent.Velocity = vel;
Implementasi Implementasi Pengontrolan secara RealTime Rotasi untuk rotasi kekanan maka nilai rotX=0.5 bertipe float sedangkan kesamping kanan nilai rotX bernilai negatif -0.5 bertipe float. if (Game.Instance.JumlahTangan == 3) { ma = 0f; rotX = 0.5f; } if (Game.Instance.JumlahTangan == 4) { ma = 0f; rotX = -0.5f; } rotX = (float)Math.Pow(Math.Abs(rotX), Math.E) * (rotX > 0.0f ? 1.0f : -1.0f); _playerAngle = (_playerAngle - (_turnSpeed * dt * rotX)) % (2.0f * (float)Math.PI); SceneGroup.Rotation = Quaternion.CreateFromYawPitchRoll(0.0f, 0.0f, _playerAngle);
Uji Coba dan Evaluasi Uji coba aplikasi ini dilakukan dengan menggunakan satu komputer, spesifikasi komputer adalah : • Menggunakan OS Windows Vista • Processor Intel Pentium Core 2 Duo @2.20Ghz · RAM 4GB
Uji Coba dan Evaluasi Uji Coba Deteksi Citra Test Case ID RD 1 RD 2 RD 3 RD 4 RD 5
Scenario / Condition
Scenario 1 – komando Posisi tangan angka 1. Scenario 2 – komando Posisi tangan angka 2. Scenario 3– komando Posisi tangan angka 3 Scenario 4 – komando Posisi tangan angka 4. Scenario 5 – komando Posisi tangan angka 5.
Posisi Tangan Angka 1 Angka 2 Angka 3 Angka 4 Angka 5
Result
Player bergerak maju. Player bergerak mundur. Player hadap kekanan. Player hadap kekiri. Player Diam
Uji Coba dan Evaluasi Uji Coba Waktu Test Case ID RD 1 RD 2 RD 3 RD 4 RD 5
Scenario / Condition
Scenario 1 – komando Posisi tangan angka 1. Scenario 2 – komando Posisi tangan angka 2. Scenario 3– komando Posisi tangan angka 3 Scenario 4 – komando Posisi tangan angka 4. Scenario 5 – komando Posisi tangan angka 5.
Posisi Tangan Angka 1 Angka 2 Angka 3 Angka 4 Angka 5
Result
0.0027 millisecond 0.0022 millisecond 0.0016 millisecond 0.0011 millisecond 0.0016 millisecond
Kesimpulan •Didalam uji coba ini OpenCV dapat mendeteksi Posisi tangan sehingga Simulasi Robot 3D dapat dikontrol dengan deteksi citra tangan. •Pengontrolan dilakukan secara Real Time dalam arti gerakan tangan yang dideteksi dapat direspon dalam waktu yang cepat. •Perpindahan jeda waktu antara perubahan gerakan tangan yang bisa dideteksi oleh aplikasi relative sangat kecil dengan satuan microsecond.