Simulasi dan Pemodelan Fisika-Mekanika Menggunakan Perangkat Lunak Open Source Indar Sugiarto1 1
Jurusan Teknik Elektro, Fakultas Teknologi Industri, Universitas Kisten Petra, Surabaya, Indonesia
[email protected]
Abstrak. Pembuatan simulasi dan pemodelan untuk pelajaran fisika, terutama mekanika, akan memberikan daya tarik tersendiri karena visualisasi yang diberikan dapat membantu siswa untuk lebih memahami tentang pelajaran tersebut. Masalahnya adalah bagaimana membuat sebuah simulasi dari pemodelan yang robust untuk sebuah sistem mekanika tanpa harus mengimplementasikan algoritma yang dibutuhkan secara manual dengan menuliskan perintah-perintah dalam bahasa pemrograman tertentu. Dalam paper ini akan dijelaskan salah satu alternatif pembuatan program simulasi untuk pemodelan sistem mekanika menggunakan pustaka (library) yang tersedia dalam dunia OpenSource. Pustaka yang digunakan dan dijelaskan dalam paper ini yaitu ODE (Open Dynamic Engine). Dengan menggunakan ODE, pengguna dapat memasukkan parameter-parameter seperti massa, titik berat, posisi, orientasi, tensor inersia, friksi, join, dan sebagainya untuk memodelkan sebuah sistem fisik dan mensimulasikan tabrakan yang mungkin terjadi jika lebih dari satu obyek bergerak bersamaan (collision detection). Dengan menggunakan ODE, sebuah sistem fisik yang kompleks sekalipun dapat dimodelkan dengan sempurna. Hasil pemodelan oleh ODE kemudian dapat ditampilkan secara visual dalam bentuk tiga dimensi menggunakan perangkat lunak visualisasi seperti OGRE (Object-oriented Graphics Rendering Engine) dan Irrlicht yang ditulis dengan bahasa pemrograman C++ dan dapat dipilih untuk diimplementasikan menggunakan teknologi Direct3D ataupun OpenGL. Kata kunci: Physics Modeling, Open Dynamic Engine, Open Source
1. Pendahuluan/Pengantar Di era pembelajaran yang berpusat pada siswa (student centered learning) dan berorientasi pada kompetensi saat ini, kebutuhan akan model peraga visual yang dapat menarik minat siswa untuk belajar lebih komprehensif terasa semakin meningkat. Banyaknya perangkat-perangkat lunak simulasi dan pemodelan PAL (Physics Abstraction Layer) seperti PhysX, Box2D, Bullet, Havok, Tokamak, dan Newton Game Dyanmics menunjukkan bahwa pemodelan sistem-sistem fisika sekarang dapat dengan mudah dilakukan tanpa harus menguasai dunia algoritma dan pemrograman dengan sedemikian dalam [1]. Namun sayang program-program di atas bukan open source yang dapat diperoleh secara gratis, melainkan harus membeli lisensi agar bisa menggunakannya. Para peneliti dalam bidang rekayasa (engineering) seringkali juga diperhadapkan pada permasalahan klasik dalam hal pemodelan dan simulasi, yaitu bagaimana memodelkan dan mensimulasikan sebuah sistem fisik seakurat dan sedetil mungkin sehingga menyerupai kondisi realitanya [2]. Tantangan dan permasalahan di atas dapat dijawab dengan menggunakan program simulator fisika dan dinamika yang bernama Open Dynamic Engine (ODE) [4]. Meskipun saat ini baru menginjak versi 0.5, namun ODE sudah banyak digunakan dalam beberapa aplikasi penelitian dan juga game-game 3D profesional. Rutin-rutin dalam ODE dibuat dengan menggunakan bahasa pemrograman C++.
BSS_226_1_1 - 5
Gambar 1. Sebuah contoh pemodelan sistem fisika yang bisa dilakukan menggunakan ODE dan OGRE
Salah satu kekuatan ODE yang menonjol adalah solusi terhadap permasalahan Linear Complementary Problem (LCP) menggunakan teknik Lagrange Multiplier yang banyak muncul pada sistem dinamis yang melibatkan fenomena gesekan dan tumbukan [3]. Paper ini bertujuan untuk memberi gambaran awal tentang ODE, fitur-fitur yang dimiliki, metode implementasinya, dan bagaimana menggabungkannya dengan simulator grafis untuk membuat sebuah aplikasi visual 3D.
2. Konsep ODE Kegunaan utama ODE adalah untuk mensimulasikan interaksi dinamika antar benda-benda dalam sebuah kerangka ruang berdasarkan konsep dinamika benda tegar (rigid body). ODE bukanlah program yang dapat menampilkan gambar / grafis, tetapi hanyalah pustaka yang berisi rutin-rutin untuk perhitungan gerakan sebuah benda berikut interaksinya dengan benda-benda lain dalam kerangka ruang yang sama berdasarkan hukum fisika, utamanya mekanika klasik (Newtonian mechanics). ODE sendiri tersusun atas dua komponen utama, yaitu komponen simulasi dinamika benda tegar (rigid body dynamics simulation engine) dan komponen pendeteksi tumbukan (collision detection engine). Hasil-hasil perhitungan oleh ODE selanjutnya digunakan oleh program-program simulator grafis untuk menghasilkan efek visual. Beberapa simulator grafis yang memanfaatkan fungsionalitas ODE diantaranya: OGRE (Object-oriented Graphics Rendering Engine), Irrlicht, Webots, Player Project, dll [5] – [7]. Sintaks yang digunakan oleh ODE sama dengan bahasa pemrograman C++ dan bisa berinteraksi dengan programprogram yang dibuat dengan ANSI-C. Di dalam ODE dikenal beberapa obyek dasar yang parameter-parameternya melambangkan besaran fisik dari sebuah sistem dinamik. Obyek-obyek dasar tersebut adalah: world, body, geom, space, dan joint. Body adalah sebuah obyek program untuk menyatakan sebuah benda tegar padat (solid rigid body). Body secara default tidak memiliki bentuk bangun tertentu. Tetapi untuk mempermudah pengguna, ODE menyediakan beberapa bentuk bangun dasar seperti kubus, prisma, silinder, bola, dan kapsul. Parameterparameter sebuah body adalah sebagai berikut: - Vektor posisi dari titik referensinya (biasanya pusat massanya), dinyatakan dalam sebuah vektor p’ = [px py pz] - Kecepatan linier dari titik referensinya, dinyatakan dalam vektor v’ = [vx vy vz] = [dpx/dt dpy/dt dpz/dt] - Orientasi dari body, yang bisa dinyatakan dalam matrix rotasi R (3x3) atau vektor quaternion q’ = [qs qx qy qz] - Kecepatan sudut ω’ = [ωx ωy ωz], yang menunjukkan perubahan orientasi body sepanjang waktu - Massa - Tensor inersia, berupa matrix 3x3 yang berisi informasi bagaimana massa dari sebuah body terdistribusi seputar pusat massa dari body tersebut.
BSS_226_1_2 - 5
World adalah sebuah kelas yang terdiri dari (dan mengikat) obyek-obyek body (secara dinamis maupun statis) bersama dengan variabel gaya dan waktu. Pada dasarnya, simulasi fisika menggunakan ODE bekerja dengan cara mengubah (memajukan) variabel waktu dari world dengan step tertentu dan kemudian meng-update state dari masing-masing body di dalam world yang bersangkutan berdasarkan hukum mekanika dan melibatkan gaya yang ada/didefinisikan dalam world tersebut. Berikut adalah contoh program untuk membuat sebuah simulasi dasar yang berisi sebuah obyek body berbentuk kubus. dWorldID world = dWorldCreate(); // Create a body dBodyID body = dBodyCreate(_world); dMass mass; dMassSetBox(&mass,1,1,1,1); dMassAdjust(&mass,0.2f); dBodySetMass(body,&mass); dBodySetPosition(body,0,6,0); Pada contoh di atas, obyek kubus dibuat bermassa 0.2 satuan dan karena kita tidak menentukan tensor inersianya, maka ODE mengasumsikan bahwa massa dari obyek kubus tersebut terdistribusi secara homogen. Geom adalah parameter yang digunakan untuk merepresentasikan bentuk geometri dari sebuah obyek body untuk dipakai dalam algoritma pendeteksi tumbukan. Jadi setelah sebuah obyek body dibuat, dia harus diberi parameter geom supaya bisa disimulasikan jika bertumbukan dengan obyek body lainnya. Space adalah sebuah obyek yang mengikat satu atau lebih geom menjadi satu kesatuan dan mengatur / mengendalikan algoritma pendeteksi tumbukan. Dengan kata lain, geom dan space adalah abstraksi dari body dan world. Berikut ini adalah kelanjutan dari skrip contoh sebelumnya supaya obyek body yang berbentuk kubus dapat disimulasikan jika terjadi tumbukan dengan obyek body lainnya. dSpaceID space = dHashSpaceCreate(0); // Create a geom. dGeomID geom = dCreateBox(space,1,1,1); // Bind together our previously created body and the geom dGeomSetBody(geom,body); Pada skrip di atas, obyek body diikat dengan sebuah geom. Jika sebuah geom tidak memiliki representasi body, maka geom tersebut bersifat statis. Cara seperti ini digunakan untuk menciptakan sebuah “lantai” (ground plane) dan “dinding” (wall plane) untuk membatasi gerak dari obyek-obyek body. Sebuah obyek body bisa diikat dengan obyek body yang lain sehingga menjadi sebuah persendian, rantai, ataupun interaksi lainnya. Obyek-obyek body berinteraksi satu sama lain bukan hanya karena bergerak dan terjadi tumbukan, tetapi juga karena yang satu dikaitkan dengan yang lain. Contoh praktisnya adalah sebuah lengan robot yang terdiri dari beberapa segmen yang saling dihubungkan dengan menggunakan joint. Ada beberapa tipe joint standar yang dimiliki oleh pustaka ODE. Pengguna juga dapat menciptakan sendiri joint yang sesuai dengan kebutuhan simulasi dari si pengguna. Gambar berikut menunjukkan joint bawaan dalam pustaka ODE.
BSS_226_1_3 - 5
Gambar 2. Struktur joint standar ODE: ball-socket (kiri), hinge (tengah) dan slider (kanan).
Beberapa joint bisa diikat dalam satu kesatuan yang disebut joint group. Tipe data dJointGroup digunakan untuk mengasosikan sebuah kelas dengan beberapa obyek joint. Kegunaan joint group adalah untuk memastikan bahwa hukum-hukum mekanika telah diaplikasikan pada masing-masing joint di dalam group tersebut dan mengurangi terjadi joint error. Berikut ini adalah beberapa joint group yang bisa dibuat di dalam ODE.
Gambar 3. Beberapa joint bisa dirangkai dalam satu kerangka simulasi yang disebut joint group.
3. Visualisasi Grafis Hasil Pemodelan ODE Fungsi utama dari ODE adalah untuk melakukan komputasi numerik terhadap model sebuah sistem fisik. Itu sebabnya program-program seperti ODE dalam dunia pemodelan dan game disebut juga sebagai physic processing unit (PPU) atau physics engine. Untuk menampilkan hasil simulasi ODE, pengguna dapat menggunakan pemrograman native Direct3D maupun OpenGL, atau menggunakan program grafis 3D seperti OGRE dan Irrlicht. Jika menggunakan OGRE, sudah terdapat wrapper yang disebut OgreODE yang memudahkan pengguna dalam mengkolaborasikan antara ODE dan OGRE. Saat ini belum wrapper yang secara khusus menjembatani antara ODE dengan Irrlicht. Yang perlu diperhatikan saat menggunakan OGRE bersama ODE adalah bahwa ODE menerapkan metode scene graph untuk membuat animasinya. Seperti telah dijelaskan sebelumnya bahwa di dalam ODE terdapat obyek world yang juga memiliki variabel waktu. Variabel waktu dalam obyek world dapat dibuat memiliki step yang kecil dan harus disesuaikan dengan timing yang digunakan oleh OGRE. ODE bisa juga digunakan untuk menambah fungsionalitas dari program aplikasi spesifik, misalnya di bidang robotika. Simulator Player Project dan Webots adalah contoh dimana pengguna dapat menambahkan rutin-rutin ODE untuk melakukan simulasi tumbukan ataupun fenomena mekanika yang lain. Player Project adalah simulator robot yang termasuk open source dan cukup banyak digunakan oleh kalangan akademisi dan pendidikan. Sedangkan Webots, meskipun tidak menggunakan lisensi model GPL (General Public License) melainkan proprietary dari Cyberbotics Ltd, tetapi bisa digunakan oleh kalangan akademik (peneltian dan pendidikan). Webots secara intensif menggunakan ODE untuk mensimulasikan hukum-hukum fisika mekanika dan salah satu robot populer yang dapat disimulasi dengan Webots adalah robot AIBO milik Sony Corp.
4. Kesimpulan BSS_226_1_4 - 5
ODE adalah salah satu physics engine yang banyak digunakan dalam aplikasi-aplikasi simulasi dan pemodelan fisika yang membutuhkan derajat akurasi dan presisi yang tinggi sementara proses kalkulasinya dilakukan hampir real time. Dengan menggunakan ODE, sebuah sistem fisik yang kompleks sekalipun dapat dimodelkan dengan sempurna. Salah satu fungsi ODE yang paling sering digunakan adalah untuk menganalisa fenomena tumbukan antara obyek-obyek benda tegar yang bergerak atau efek rantai dan persendian dari beberapa obyek benda tegar. Hasil kalkulasi oleh ODE kemudian dapat divisualisasikan dengan menggunakan program-program simulasi grafis seperti OGRE dan Irrlicht atau digunakan dalam program-program simulasi tertentu, misalnya simulator Player Project dan Webots yang digunakan untuk mensimulasikan robot. Paper ini menjelaskan dasar simulasi dan pemodelan sistem mekanika menggunakan ODE. Dengan menggunakan ODE, pengguna dapat memasukkan parameterparameter seperti massa, titik berat, posisi, orientasi, tensor inersia, friksi, join, dan sebagainya untuk memodelkan sebuah sistem fisik dan mensimulasikan tabrakan yang mungkin terjadi jika lebih dari satu obyek bergerak bersamaan (collision detection). Kemampuan pemrograman C++ dibutuhkan untuk dapat menggunakan ODE dengan baik.
Daftar pustaka [1] Matt Brinton, Brett Shelton, Jon Scoresby (2007), Explanatory Physics Learning Using Open Source Technologies, Open Education Conference. [2] Thomas Y. Yeh, Petros Faloutsos, Glenn Reinman (2006), Accelerating Real-Time Physics Simulation by Leveraging High-Level Information, MICRO. [3] David Baraff (1989), Analytical methods for dynamic simulation of non-penetrating rigid bodies, Computer Graphics, 23(3):223–232. [4] ODE website (http://www.ode.org) [5] OGRE website (http://www.ogre3d.org) [6] Player Project website (http://playerstage.sourceforge.net) [7] Webots website (http://www.cyberbotics.com)
BSS_226_1_5 - 5