DANANG SATRIYO WIBOWO 5105109516
PENDAHULUAN Latar Belakang: Perkembangan bidang robotik Perkembangan bidang mobile device / smartphone Tujuan: Mobile Robot gabungan antara robot dan smartphone Navigasi menghindari rintangan
PENDAHULUAN Batasan Masalah: Perangkat :
Nokia 5800 Xpress Music, Symbian S60 5th PC, Windows 7 Lego Mindstorm NXT 2.0
Pegolahan Citra Digital: sederhana Python :
Python versi 2.7 PyS60 versi 2.0
Gambaran Umum Sistem XML-RPC
Jaringan nirkabel
Smartphone
Bluetooth
Lego NXT
Smartphone-Mobile Robot
PC
Mobile Robot, Master-Slave Tanpa menggunakan Bahasa NXT-G
Master
Slave
Blok Diagram Komunikasi NXT
Python S60 RFCOMM Python pada S60 hanya
support dengan RFCOMM RFCOMM serupa dengan TCP RFCOMM : emulator RS-232 serial
Blok Diagram Komunikasi PyS60 dengan NXT NXT S60 Embeded System Firmware
PyS60 RFCOMM S60 5th Smartphone BT HW/Driver
BT HW/Driver Bluetooth
Logical Layer Komunikasi PyS60 dengan NXT S60 NXT Command Protocol NXT General Protocol RFCOMM S60 5th Physical
NXT Command Protocol General Protocol SPP Physical
General Protocol NXT 2 byte tambahan didepan Untuk menentukan panjang data yang akan diterima Menggunakan little-endian
2 Byte tambahan Panjang Data, LSB
Panjang Data, MSB
Data
Implementasi pada PyS60 def send(self, data): length_data=len(data) byte0 = length_data & 0xFF byte1 = (length_data >> 8) & 0xFF packet=chr(byte0) + chr(byte1)+data self.sock.send(packet) return True
Implementasi pada Py S60 def recv(self): data = self.sock.recv(2) byte0 = ord(data[0]) byte1 = ord(data[1]) plen = byte0 + (byte1 << 8) data = self.sock.recv(plen) return data
Command Protocol NXT
Byte 0 : Tipe Command /perintah Byte 1 : Command /perintah Byte 2-N: Data tambahan Terdapat 5 tipe Commmand: Direct command, dengan reply System command, dengan reply Reply command Direct command, tanpa reply
System command, tanpa reply Byte 0
Byte 1
Byte 2
Byte 3
Byte N
Command Type class CommandType(object): DirectCommand SystemCommand ReplyCommand DirectCommandWithoutReply SystemCommandWithoutReply
= 0x00 = 0x01 = 0x02 = 0x80 = 0x81
System Command class SystemCommand(object):
GetFirmwareVersion SetBrickName GetDeviceInfo
= 0x88 = 0x98 = 0x9B
Direct Command class DirectCommand(object): StartProgram StopProgram PlaySoundFile PlayTone SetOutputState SetInputMode GetOutputState GetInputValues ResetInputScaledValue MessageWrite ResetMotorPosition GetBatteryLevel StopSoundPlayBack KeepAlive lsGetStatus lsWrite lsRead GetCurrentProgramName MessageRead
=0x00 =0x01 =0x02 =0x03 =0x04 =0x05 =0x06 =0x07 =0x08 =0x09 =0x0A =0x0B =0x0C =0x0D =0x0E =0x0F =0x10 =0x11 =0x13
XML-RPC Response time terlalu besar : 35 detik Resources S60 terbatas Belum ada support dari PyS60
Protokol Pengganti
TCP
XML-RPC menggunakan socket TCP Turunan
SimpleXMLRPCServer Mengimplementasikan Class BaseRequestHandler
class BaseRequestHandler: def __init__(self, request, client_address, server): self.request = request self.client_address = client_address self.server = server try: self.setup() self.handle() self.finish() finally: sys.exc_traceback = None # Help garbage collection def setup(self): pass def handle(self): pass def finish(self): pass
XML-RPC menggunakan socket TCP Implementasikan Class BaseRequestHandler class danXMLRPCRequestHandler(SocketServer.BaseRequestHandler): def handle(self): self.data = self.request.recv(1024).strip() while 0: if self.request: response = self.request.recv(1024) if not response: break self.data+=response
response = self.server._marshaled_dispatch( self.data,getattr(self, '_dispatch', None)) self.request.send(response)
XML-RPC menggunakan socket TCP requestHandler diarahkan ke
danXMLRPCRequestHandler def __init__(self, addr, requestHandler=SimpleXMLRPCRequestHandler , logRequests=True, allow_none=False, encoding=None):
def __init__(self, addr, requestHandler=danXMLRPCRequestHandler,logReq uests=True,allow_none=False,encoding=None):
XML-RPC dengan TCP SOCKET Response time kecil Jauh lebih kecil
dibandingkan XML-RPC standart
Frame-Grabber pada kamera S60 Memanfaatkan fungsi Viewfinder
pada PyS60 Fungsi take photo, response lambat Fungsi take photo, menggunakan autofokus dan flash Kompresi : save JPEG file Dikirim sebagai binary file JPEG
Pengolahan Citra Digital menggunakan OpenCV Data binari di-encoding Noise Reduction: Gaussian
Blur Warp Perspective (matrix 3x3) Sidefill dari arah bawah
a=rintangan terdekat sebelah kiri
Robot Movement
b=rintangan terdekat tengah
c=rintangan terdekat sebelah kanan
Perhitungan 3 area Kunci utama : rintangan
area b Power & Rotasi dapat diatur
c > limit * 4
Maju, full speed
c > limit * 3
Maju, 80%speed
c<=limit*4
c<=limit*3 c > limit * 1.5
b>a & b>c
Maju, 80%speed
B<=a or b<=a c>a
c<=limit*1.5
c<=a c > limit * 0.5
c<=a
c<=limit*0.5 c>a c<=a putar kiri
c>a
putar kanan
Serong kanan Serong kiri
Belok kanan Belok kiri
Uji Coba a.
Response Time pada Fungsi Sederhana
b.
XML-RPC Server untuk Frame-Grabber
Grafik A
Gambar B
c.
Transformasi Perspektif
4 titik kordinat
Hasil transformasi
Gambar 1
Gambar 2
Gambar 3
Gambar 4
Evaluasi Permukaan arena : refleksi panjang benda 2 kali
lipat Pencahayaan bayangan terlihat jelas Tidak ada mapping – arah : perlu sensor kompas Bentuk mekanik robot Sulit Bermanuver Sebaiknya menggunakan Tribot Pergerakan bolak-balik motor : Deviasi Tinggi Sudut Kamera S60 kecil
PENUTUP Kesimpulan : Sensor-sensor dan aktuator telah diubah menjadi servis pada xml-rpc Telah dibangun XML-RPC diatas socket TCP pada S60 Telah dibangun aplikasi frame-grabber pada s60 yang bisa diakses dengan WiFi Telah diimplementasikan robot dapat menghindari rintangan
PENUTUP Saran: Sensor tambahan. Misalnya HiTechnic NXT Angle Sensor Smartphone dengan prosesor lebih cepat. Kamera resolusi tinggi. Dan sensor Kompas. GUI Implementasi Kecerdasan Buatan Stereo Kamera Lingkungan cahaya cukup terang