TUTORIAL PERANCANGAN SISTEM EMBEDDED BERBASIS STATECHART:STUDI KASUS PADA LINE FOLLOWER MOBILE ROBOT (Embedded Systems Design Principles: From Drawing to Coding, rev 0, mei 2009)
Oleh : Iwan Setiawan Automatic Control Lab, Electrical Engineering of UNDIP http://iwan.blog.undip.ac.id
[email protected]
Tutorial Perancangan Sistem Embedded Berbasis Statechart: Studi Kasus Pada Line Follower Mobile Robot http://iwan.blog.undip.ac.id
[email protected]
Kata Pengantar Saat ini, tutorial yang membahas robot mobile penjejak garis banyak kita jumpai dalam buku, paper atau pun dari berbagai sumber di internet. Tetapi jika anda cermati, algoritma atau strategi kontrol robot mobile yang dibahas umumnya disajikan dalam bentuk kode program secara langsung. Mungkin saja algoritmanya relative canggih, tetapi apakah anda akan cepat paham dengan algoritma tersebut?, Penulis tidak yakin anda akan cepat menangkap ide yang ingin diungkap oleh si penyusun algoritma. Hal ini dikarenakan kode program-walaupun ditulis dalam bahasa tingkat tinggi (seperti C, Basic, atau Pascal) bagi manusia tetap merupakan bahasa yang tidak alamiah, tidak manusiawi! (untuk lebih jelasnya silahkan anda baca Design of Embedded Control System Using Statechart: One Picture is Worth a Thousand of Words !) Tulisan ini pada dasarnya tidak semata-mata membahas robot mobile (apalagi mengulang materi robot mobile yang mudah anda jumpai di internet). Robot mobile penjejak garis yang diusung dalam tulisan ini hanyalah merupakan studi kasus yang penulis gunakan untuk mengilustrasikan betapa sederhana, sistematis, mudah dipahami dan menyenangkannya perancangan sistem embedded dengan menggunakan Statechart. Dalam tulisan ini akan dijelaskan langkah perancangan dari mulai Thinking, Drawing sampai Coding yang nantinya dapat juga digunakan dalam perancangan sistem kontrol yang lebih luas. Semoga bermanfaat.
2
Tutorial Perancangan Sistem Embedded Berbasis Statechart: Studi Kasus Pada Line Follower Mobile Robot http://iwan.blog.undip.ac.id
[email protected]
Problem Robot Mobile Penjejak Garis Sebelum melakukan proses perancangan perangkat lunak pengontrolan lewat diagram Statechart, kita terlebuh dulu harus paham dengan tujuan serta spesifikasi sistem yang akan dirancang. Berikut adalah tujuan serta spesifikasi yang dijadikan studi kasus dalam tulisan ini: ¾ Tujuan Perancangan: Robot mobile yang nanti dibangun akan mampu menjejak garis hitam pada bidang warna putih (atau sebaliknya: garis putih pada bidang warna hitam). Dalam hal ini, garis digunakan oleh robot sebagai panduan atau landmark dalam bernavigasi (jika anda ingin mengetahui permasalahan navigasi secara umum silahkan baca artikel: Navigation Problem: Where Am I, Where Am I going, How do I get There di alamat url: http://iwan.blog.undip.ac.id) ¾ Spesifikasi Perangkat keras robot: •
Agar robot mobile memiliki kemampuan bermanuver tinggi dan dapat dikontrol relative mudah, sistem kemudi yang digunakan dalam studi kasus ini adalah jenis diferensial : Robot memiliki dua roda utama yang digerakan oleh sistem penggerak (motor DC) tersendiri dan satu buah kastor sebagai roda penyeimbang.
•
Untuk dapat mendeteksi garis (membedakan warna), dalam studi kasus ini digunakan photosensor yang bekerja berdasarkan prinsip pemantulan cahaya: bidang warna gelap cenderung memantulkan cahaya relative sedikit dibandingkan bidang warna cerah. Agar pergerakan robot mobile relative halus, jumlah photosensor yang digunakan sebanyak 8 buah: 4 buah photosensor digunakan untuk mengetahui status posisi robot samping kiri relative terhadap garis, dan 4 buah photosensor sisanya digunakan untuk mengetahui status posisi robot samping kanan relative terhadap garis. Dalam studi kasus ini, informasi garis yang dijejak oleh robot akan bernilai 1 sedangkan informasi bidang (misal lantai) akan bernilai 0 (lihat Gambar 1)--Hal tersebut dapat dilakukan baik lewat rekayasa rangkaian sensor maupun lewat software (operasi pembalikan bit).
Gambar 1. Informasi garis yang diperoleh robot lewat photosensor
•
Untuk kepentingan perancangan perangkat lunak, empat buah photosensor sebelah kiri dan empat buah sensor sebelah kanan robot dikoneksikan pada PORT microcontroller yang berbeda. Didalam perangkat lunak, informasi kedua status sisi robot tersebut
3
Tutorial Perancangan Sistem Embedded Berbasis Statechart: Studi Kasus Pada Line Follower Mobile Robot http://iwan.blog.undip.ac.id
[email protected]
disimpan dalam dua buah variabel bertipe integer tak bertanda, misal variabel left digunakan untuk menyimpan 4 buah informasi photosensor sebelah kiri robot dan variabel right digunakan untuk menyimpan 4 buah informasi photosensor sebelah kanan robot. Gambar 2 dan 3 berikut berturut-turut memperlihatkan contoh interkoneksi serta hubungan status photosensor dengan kedua nilai variabel left dan right
Gambar 2. Interkoneksi Sensor
Gambar 3. Hubungan status bit dengan nilai variabel left dan right
4
Tutorial Perancangan Sistem Embedded Berbasis Statechart: Studi Kasus Pada Line Follower Mobile Robot http://iwan.blog.undip.ac.id
[email protected]
Perancangan software pengontrolan Sederhana Berdasarkan spesifikasi diatas, sekarang kita pada dasarnya sudah dapat merancang sistem pengontrolan robot mobile penjejak garis. Algoritma dapat dibangun berdasarkan informasi posisi robot saat ini relative terhadap garis yang dijejaknya. Untuk lebih jelasnya anda perhatikan beberapa kemungkinan posisi robot mobile terhadap garis seperti nampak pada gambar 4 dibawah:
Gambar 4. Beberapa posisi robot mobil pada garis
Maka berdasarkan gambar 4 diatas, algoritma pengontrolan dapat mengambil bentuk seperti berikut ini: if (left==right) { //mobot go straight } if (left
right) { //mobot turn right }
Permasalahan yang muncul dengan strategi kontrol diatas adalah jika satu saat robot kehilangan jejak garis (misal karena belokannya terlalu tajam atau karena robot bergerak terlalu cepat), apakah robot harus bergerak ke arah kiri atau arah kanan ?--lihat ilustrasinya pada gambar 5 berikut:
5
Tutorial Perancangan Sistem Embedded Berbasis Statechart: Studi Kasus Pada Line Follower Mobile Robot http://iwan.blog.undip.ac.id [email protected]
Gambar 5. Robot berada di luar garis
Gambar 6. Sejumlah keadaan posisi robot mobile untuk setiap saat
6
Tutorial Perancangan Sistem Embedded Berbasis Statechart: Studi Kasus Pada Line Follower Mobile Robot http://iwan.blog.undip.ac.id [email protected]
Perancangan software pengontrolan Berbasis StateChart ¾ Thinking Ketika satu saat robot berada di luar garis (dalam hal ini diindikasikan oleh pembacaan kedua variabel left dan right yang bernilai 0), maka agar robot bergerak kearah yang benar, robot tersebut harus memiliki ”memori”. Untuk setiap saat, robot harus mengetahui ”sedang dimanakah saya?, apakah saya sedang di track yang benar, apakah saya terlalu kiri dari garis?, apakah saya berada diluar garis sebelah kiri?, apakah saya berada di luar garis sebelah kanan?”. Untuk lebih jelasnya anda perhatikan gambar 6. Jika robot mengetahui posisinya saat ini, maka pengontrolan pada dasarnya dapat dilakukan secara sederhana, berikut adalah contoh robot berpikir dengan logika yang benar: Jika saya berada di tengah garis maka saya akan bergerak lurus, jika saya sekarang di sebelah kiri garis maka saya akan bergerak kearah kanan, jika saya ada disebelah kiri garis tiba-tiba garisnya menghilang maka saya akan berbelok tajam kearah kanan, dan seterusnya, dan seterusnya. ¾ Drawing (and Thinking)
Gambar 7. Diagram statechart pada robot mobile penjejak garis
Setelah anda menetahui dan paham dengan berbagai kemungkinan posisi robot serta apa yang harus dilakukan oleh robot jika ada pada suatu keadaan tertentu, maka anda sekarang sudah dapat melakukan proses drawing. Dalam hal ini kemungkinan-kemungkinan posisi robot (state) anda gambarkan dalam bentuk kotak dengan ujung agak bundar (atau dapat juga digambar sebagai bulatan), transisi dari satu keadaan ke keadaan lain anda gambar kan sebagai tanda panah, dimana kondisi penyebab transisi tersebut anda tulis diatas tanda panah, sedangkan pengontrolan
7
Tutorial Perancangan Sistem Embedded Berbasis Statechart: Studi Kasus Pada Line Follower Mobile Robot http://iwan.blog.undip.ac.id [email protected]
robotnya itu sendiri misal robot belok kanan, robot lurus dan seterusnya pada dasarnya adalah bentuk activity, dalam hal ini anda tulis didalam state (lingkaran) Gambar 7 memperlihatkan representasi logika pengontrolan robot dalam bentuk Statechart yang digunakan dalam studi kasus ini secara relative lengkap. Walaupun anda mungkin sebelumnya belum mengenal Statechart, tetapi diagram pada gambar 7 nampaknya sangat intuitive dan mudah dipahami sehingga penulis yakin anda akan cepat paham dengan apa yang dikehendaki oleh gambar tersebut. ¾ Coding Setelah diagram Statechart diperoleh, maka langkah selanjutnya adalah coding. Untuk kasus ini ada dua buah fungsi yang perlu kita realisasisan dari statechart tersebut : 1. Fungsi transisi state : fungsi ini merepresentasikan kemungkingan-kemungkinan transisi state yang dapat terjadi untuk sebuah kondisi tertentu (lihat gambar 7) //fungsi statechart void transisi_state() {
switch(state) { case INIT
: if(right==left) state CENTER if(rightleft) state = LEFT; break;
case CENTER
: if(rightleft) state = LEFT; break;
case RIGHT
: if(right==0) state= OUT_RIGHT; if(right>= left) state= CENTER; break;
case LEFT
: if(left==0) state = OUT_LEFT; if(right<= left) state = CENTER; break;
case OUT_RIGHT: if(right!=0) state = RIGHT; break; case OUT_LEFT : if(left!=0) state = LEFT; break; default : break; } }
8
Tutorial Perancangan Sistem Embedded Berbasis Statechart: Studi Kasus Pada Line Follower Mobile Robot http://iwan.blog.undip.ac.id [email protected]
2. Fungsi activity: Fungsi ini merepresentasikan apa yang dikerjakan oleh robot ketika berada pada keadaan posisi terntentu (lihat gambar 7) //fungsi activity dalam state void activity() { if(state== CENTER) go_straight(); if(state== RIGHT) turn_left(); if(state== LEFT) turn_right(); if(state== OUT_RIGHT) turn_left_sharp(); if(state== OUT_LEFT) turn_right_sharp(); }
Didalam program utama, selanjutnya kita panggil atau jadwal kedua fungsi tersebut, misal setiap 50 ms sekali. Berikut adalah cuplikan program utama pengontrolan sistem robot penjejak garis //program utama enum{INIT, CENTER, RIGHT, LEFT, OUT_RIGHT, OUT_LEFT}; #define right PINA&0x0f #define left PINB&0x0f unsigned char state; ….. main() { //inisialisasi hardware dan variabel lain yang diperlukan init_hardware(); … state=INIT; //inisialisasi state awal while(1) { //panggil fungsi state_mobot dan activity_in_state disini (misal setiap 50 ms) if(timer_soft ==50) { transisi_state(); activity (); } } }
Mudah Bukan ? Catatan-catatan Penting •
Agar program yang anda susun terstruktur, maka sebelum mendefinisikan fungsi-fungsi pergerakan robot high level, yaitu seperti go_straight(), turn_left(), turn_right() turn_left_sharp(), dan turn_right_sharp(), anda sebaiknya membuat atau mendefinisikan terlebih dulu sistem kontrol robot yang bersifat lebih low level.
9
Tutorial Perancangan Sistem Embedded Berbasis Statechart: Studi Kasus Pada Line Follower Mobile Robot http://iwan.blog.undip.ac.id [email protected]
Misal, Karena semua fungsi high level secara teknis nantinya akan memanipulasi besaran PWM untuk setiap roda, maka buat terlebih dulu fungsi pemanipulasian PWM untuk masing-masing roda, misal prototype yang digunakan: Void set_wheel_speed(int pwm_motor_kiri, int pwm_motor_kanan); //pwm 0-100%
Dengan anggapan anda telah mendefiniskan detail dari fungsi diatas, maka nantinya fungsi high level secara langsung dapat memanggil fungsi low level tersebut. Berikut adalah contoh yang dapat anda gunakan: go_straight() { set_wheel_speed(100, 100); //pwm 0-100% : max } turn_left() { set_wheel_speed(70, 90); //pwm 0-100% } Khusus untuk algoritma untuk berbelok (misal turn_left(), turn_right(), dst), logika kontrol yang diimplementasikan didalamnya dapat saja bersifat batch, artinya besar kecepatan putar belok ditentukan juga oleh selisih besar variabel left dan right. •
Agar desain perangkat keras lebih efisien, sensor dapat dihubungkan dengan satu buah port (dengan catatan interkoneksi harus anda ubah --lihat ilustrasinya pada gambar 8)
Gambar 8. Interkoneksi Sensor pada satu port yang sama
10
Tutorial Perancangan Sistem Embedded Berbasis Statechart: Studi Kasus Pada Line Follower Mobile Robot http://iwan.blog.undip.ac.id [email protected]
•
Diagram perancangan dapat anda kembangkan lebih lanjut, disesuaikan dengan problem yang dihadapi: misal jika robot yang anda rancang ingin dapat mendeteksi persimpangan (lihat gambar 9), serta juga ingin melakukan aksi tertentu, maka dalam perancangan anda harus menerapkan konsep event dan action (dalam studi kasus ini kedua konsep tersebut tidak diperlukan)
Gambar 9. Persimpangan garis
Bahan Bacaan 1. BrucePowerDouglas” State Machines and StateChart”, i-Logix 2. Edward Carryer “Event Driven Programming”, Standford University 2005 3. Priyank Patil “Line Following Robot” K.J. Somaiya Collage of Eng., Bombay India
11