Simulasi Pergerakan Robot
3D
dengan
Komando Deteksi Citra
Pergerakan Tangan
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
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
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
StartDeteksi warna kulit Deteksi kontur tangan Deteksi jari Finish
Perancangan
Simulasi Robot 3D
Intro
Start Intro 1 Intro 2 Finish
Intro adalah awal Screen pembuka pada simulasi. Terdapat dua gambar yang akan diload pada Intro.
Perancangan
Simulasi Robot 3D
Main Menu screen
Main Menu Screen adalah tampilan utama dengan 4 tombol yang tersedia.
Perancangan
Simulasi Robot 3D
Help screen
Start Main Menu
Screen Help Screen Finish
Screen Help adalah Screen bantuan tentang bagaimana cara
mengontrol robot yang berada didalam simulasi dengan komando deteksi tangan
Perancangan
Simulasi Robot 3D
Credits screen
Start Main Menu
Screen Credit Screen Finish
Credits screen adalah Screen yang berisi tentang nama-nama kontributor game.
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
Implementasi
Implementasi Deteksi Citra
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);
Untuk mendeteksi citra tangan yang dilakukan terlebih
dahulu adalah Mencari range warna kulit dari tangan
Implementasi
Implementasi Deteksi Citra
Kemudian mencari kontur tangan dari range warna kulit
yang terdeteksi
Contour<Point> contours =
skin.FindContours(Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_LIST, storage);
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
Implementasi
Implementasi Simulasi 3D
Implementasi
Implementasi Simulasi 3D
Implementasi
Implementasi Simulasi 3D
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
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
Untuk physic engine obyek player diset dengan grafitasi sebesar 25 bertipe float. Massanya sebesar 300. Pergeseran kinetik dan static sebesar 0.5 bertipe float
Implementasi
Implementasi Simulasi 3D
Implementasi
Implementasi Pengontrolan secara RealTime
Movement
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;
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
Implementasi
Implementasi Pengontrolan secara RealTime
Rotasi
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);
untuk rotasi kekanan maka nilai rotX=0.5 bertipe float sedangkan kesamping kanan nilai rotX bernilai negatif -0.5 bertipe float.
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
Test Case ID
Scenario / Condition Posisi Tangan
Result
RD 1 Scenario 1 – komando Posisi tangan angka 1.
Angka 1 Player bergerak maju.
RD 2 Scenario 2 – komando Posisi tangan angka 2.
Angka 2 Player bergerak mundur.
RD 3 Scenario 3– komando Posisi tangan angka 3
Angka 3 Player hadap kekanan. RD 4 Scenario 4 – komando Posisi
tangan angka 4.
Angka 4 Player hadap kekiri.
RD 5 Scenario 5 – komando Posisi tangan angka 5.
Angka 5 Player Diam
Uji
Coba
dan
Evaluasi
Test Case ID
Scenario / Condition Posisi Tangan
Result
RD 1 Scenario 1 – komando Posisi tangan angka 1.
Angka 1 0.0027 millisecond RD 2 Scenario 2 – komando Posisi
tangan angka 2.
Angka 2 0.0022 millisecond RD 3 Scenario 3– komando Posisi
tangan angka 3
Angka 3 0.0016
millisecond RD 4 Scenario 4 – komando Posisi
tangan angka 4.
Angka 4 0.0011 millisecond RD 5 Scenario 5 – komando Posisi
tangan angka 5.
Angka 5 0.0016 millisecond