Selasa, 02 Juli 2013

Agent Dummy Simulasi Soccer 2D dengan Soccer Server



Agent2D yang dibahas pada artikel sebelumnya hanyalah sebuah contoh agent soccer 2D yang telah menerapkan algoritma tertentu sehingga pemain dapat berkoordinasi dalam membuat gol. Jika kita ingin membuat agent 2D sendiri, kita bisa mempelajari kode-kode tim soccer itu atau membuat sendiri dari awal dengan modal agent "dummy" atau agent sederhana yang hanya memiliki fungsi send/receive message ke server.



Protokol komunikasi client/server pada Soccer Server

Sebelumnya perlu dipelajari cara komunikasi client/server pada Soccer Server. Pemain/client harus mengirimkan request (send) pada server yang berisi aksi apa yang ingin ia lakukan, misalnya kick, turn, atau run, dan sebagainya. Server menerima pesan ini dan meng-update environment sesuai dengan perintah client tersebut.

Selain menerima request pemain, server juga secara aktif mengirimkan informasi sensor yang berisi data visual yang dirasakan pemain, misalnya posisi objek-objek tertentu di lapangan, atau data pemain seperti stamina dan kecepatan. Pesan sensor ini dikirim secara berkala tiap satu cycle (satuan interval waktu dalam soccerserver) dan pemain bisa mengirimkan maksimal satu request tiap satu cycle.

1.       Macam-macam request client ke server

Client perlu melakukan request untuk melakukan aksi-aksi pada pemainnya. Berikut ini adalah beberapa contoh request yang umum digunakan.

    a.       (init namaTeam(version 15))

Perintah init adalah perintah yang wajib dilakukan untuk menginisialisasi satu pemain pada team dengan nama “namaTeam”. Version menunjukkan nomor versi Soccer Server yang digunakan

    b.      (move x y)

Perintah move membuat pemain berpindah posisi pada posisi koordinat (x,y). Perintah ini khusus digunakan untuk menempatkan pemain di awal pertandingan atau menempatkan pemain secara cepat di luar waktu pertandingan

    c.       (turn n)

Perintah turn adalah perintah untuk membuat pemain berotasi sebanyak n derajat dari posisi awal

    d.      (dash n)

Perintah dash adalah perintah untuk membuat pemain berlari dengan power n

    e.      (kick n m)

Perintah kick akan membuat pemain menendang bola dengan power n ke arah derajat m. Kick baru bisa dieksekusi jika pemain dan bola berada pada jarak kickable_margin yang bervariasi antara pemain. Namun, umumnya kickable_margin adalah sebesar 0.7.

2.  Macam-macam pesan server ke client

Server mengirimkan berbagai pesan ke client pada tiap clycle. Berikut ini adalah beberapa contoh pesan server yang mungkin terjadi.

    a.       (init Side Unum PlayMode)

Pesan ini adalah pesan balasan dari server ke client setelah client mengirimkan perintah (init).

Side adalah sisi gawang pemain yang bisa berisi “l” untuk left atau “r” untuk right. Pesan ini beguna agar pemain bisa mendeteksi gawang lawan pada saat pertandingan.

Unum adalah nomor pemain yang bisa berisi angka 1 ~ 11

PlayMode adalah mode permainan

    b.      (hear Time Sender “Message”)

Pesan hear adalah pesan yang diterima oleh pemain dari coach, referee, atau self.

Time adalah waktu cycle saat pesan didapat.

Sender bisa berupa online_coach_left, online_coach_right, coach, referee, self.

“Message” berisi pesan yand diterima.

Pesan ini berguna untuk menandai waktu-waktu penting di pertandingan, misalnya kick_off atau pada saat terjadi goal sehingga pesan hear bisa diterima dan pemain bisa melakukan aksi yand diperlukan.

    c.       (see Time ObjInfo)

Pesan see adalah pesan yang berisi sensor yang dirasakan pemain. ObjInfo bisa berisi banyak pesan sensori dengan properti yang berbeda-beda. Contoh pesan yang terkandung dalam see adalah

    (b Distance Direction DistChange DirChange) yang menunjukkan lokasi bola relatif terhadap pemain.

    (g Location Distance Direction) menunjukkan lokasi goal lawan (left/right) dan jarak beserta derajat arah.

Dan lain-lain. Panduan pesan send dan receive bisa dilihat di referensi manual RoboCup Soccer Server yang bisa didapat di link ini. http://dangermouse.brynmawr.edu/pyrobot/tars/rcsoccersim.pdf

Langkah download dan konfigurasi
Pertama, agent dummy bisa ditemukan pada archive SServer versi 5.25 yang dapat ditemukan pada link berikut.

http://en.sourceforge.jp/projects/sfnet_sserver/downloads/rcssserver/OLD/sserver-5.25.tar.gz/

Setelah mendownload sserver-5/25 di atas, uncompress archive tersebut dan temukan folder sampleclient di dalamnya. Pada folder inilah agent dummy dapat ditemukan.

1.       Pada folder sserver, lakukan perintah ./configure

$ cd
$ ./configure


Pada ./configure di atas, lakukan konfigurasi yang diperlukan. Untuk alamat lib X11 bisa ditemukan di direktori

/usr/lib/X11/x11perfcomp

Isilah konfigurasi lainnya dengan setting default (cukup tekan enter tanpa memasukkan konfigurasi tertentu).

2.       Setelah ./configure, masuklah ke folder sampleclient dan lakukan make

$ cd
$ make


Perintah make akan melakukan kompilasi client.c dan client.h yang berada pada folder sampleclient. Setelah make berhasil dijalankan, maka akan ada file executable yang bernama client

3.       chmod client

Sebelum client bisa dieksekusi, lakukan chmod pada file tersebut

$ chmod +x client


4.       Setelah itu, maka agent dummy siap dijalankan. Untuk menjalankan agent ini, buka rcsoccersim pada sebuah terminal

$ rcsoccersim


5.       Lalu, pada terminal lain, jalankan client dengan perintah

$ ./client


Jika perintah di atas dijalankan, maka terminal akan dipenuhi dengan pesan server pada client sehingga mempersulit kita dalam memasukkan perintah yang kita inginkan. Untuk membuat client menuliskan outputnya ke file lain, maka jalankan perintah di bawah ini sebagai ganti dari perintah di atas.

$ ./client > ~/log.txt


Lokasi “~/log.txt” bisa diganti dengan lokasi manapun. Log.txt akan digunakan sebagai tempat server menuliskan message pada client.

6.       Setelah itu, terminal akan menunggu perintah dari user untuk melakukan langkah selanjutnya. Rcsoccersim tidak akan menampilkan apapun karena tim belum terdaftar sebelum user mengetikkan perintah tertentu.

Untuk memberi nama team, perintah yang harus diketikkan adalah

$ (init namateam(version 15))

Setelah perintah init, maka seorang player bisa memasuki lapangan.Untuk memindahkan player ke posisi tertentu, diperlukan perintah move. Misalnya player 1 ditempatkan pada koordinat (-5, 0), maka perintahnya adalah

$ (move -5 0)


Perintah move digunakan untuk memindahkan player secara cepat dan biasanya dilakukan pada saat sebelum pertandingan atau setelah terjadi gol agar player tidak memakan waktu lama untuk berpindah.

Perintah-perintah lain adalah kick, turn, dan dash.

Modifikasi sampleclient client.c

Kode client.c bisa dimodifikasi dengan tujuan untuk memberikan algoritma pada pemain agar tidak bergantung dari inputan user dari terminal.Client.c memiliki beberapa fungsi penting yang ada di dalamnya, yaitu send_message, receive_message, dan message_loop.

Fungsi send_message bertujuan untuk mengirimkan perintah client pada server.Hal ini berarti perintah-perintah pada langkah sebelumnya dikirimkan melalui fungsi ini.Fungsi receive_message berfungsi untuk mendapatkan respon balasan atau pesan berulang dari server.Pesan dari server berisi pesan-pesan penting seperti posisi pemain, posisi bola, dan posisi gawang yang diperlukan client untuk memutuskan pergerakan selanjutnya.

Fungsi message_loop terus menerus dieksekusi secara berulang dan memadukan receive_message dan send_message di dalamnya sehingga client terus menerus berkomunikasi dengan server.

Nah, kalo ada yang tertarik mau bikin agent 2D pake bahasa C, mungkin bisa mencoba ngoding dengan agent sampleclient ini. Contohnya, pertama diperlukan perintah (init) di awal client tersebut dieksekusi. Oleh karena itu, pada fungsi main, ditambahkan

send_message("(init teamsaya(version 15))",sock);

tepat sebelum message_loop dieksekusi.

Setelah itu, diperlukan move untuk memindahkan satu pemain ke lapangan. Perintah ini bisa diletakkan di dalam message_loop dengan catatan pesan ini harus dieksekusi tidak lebih dari satu kali.

send_message("(move -5 0)", sock);

Perintah-perintah lain bisa dituliskan dengan format serupa.

Catatan penting untuk ngoding agent 2D ini adalah pemain tidak bisa memulai pertandingan sebelum kick-off berlangsung. Kick-off bisa dilakukan dari program Soccer Server (menekan menu kick-off) atau dengan drop-ball di lapangan. Pada saat kick-off, server mengirimkan pesan ke client yang akan ditangkap oleh fungsi receive_message.

Kick-off dikirimkan dengan format "hear", sehingga mungkin perlu ditambahkan fungsi untuk melihat pesan hear secara terus-menerus. Jika deteksi hear kick-off bernilai true, maka pemain bisa langsung memasuki mode permainan (bisa dash, turn, kick).

Selain hear, pesan yang penting adalah pesan "see" untuk melihat dimana bola berada. Dari pesan see yang didapat inilah pemain harus bisa menentukan apakah dia akan kick, dash, atau turn. :D

0 comments:

Posting Komentar