Sabtu, 27 Februari 2016

Robot Cerdas Berbasis Vision Menggunakan Mikroprosesor Raspberry Pi, Python, & OpenCV (Colour Tracking Object)



Citra digital dibentuk oleh kumpulan titik yang dinamakan piksel (picture element). Setiap pixel digambarkan sebagai sebuah kotak kecil. Setiap piksel mempunyai kordinat posisi. Berikut adalah contoh kordinat piksel dari webcam berukuran 640 x 480 yang digunakan untuk membuat robot vision. Kordinat ini dinyatakan oleh (X, Y), dimana X menyatakan posisi kolom, dan Y menyatakan posisi baris. Piksel pojok kiri atas mempunyai kordinat (0,0) dan piksel pada kanan bawah mempunyai kordinat (640, 480).
Gambar 1 Kordinat webcam berukuran 640 x 480 untuk gerak robot vision
Gambar diatas memperlihatkan sembilan kotak yang diberi label karakter. Tiap karakter dalam kotak tersebut akan digunakan untuk membuat sembilan kondisi gerak dari robot berdasarkan kordinat objek yang tereteksi oleh webcam (Keterangan: dapat dibuat jumlah kotak yang lebih banyak sehingga kondisi gerak robot yang dibuat juga menjadi lebih banyak). Berikut adalah contoh tabel kordinat objek yang terdeteksi yang bersesuaian dengan karakter kondisi gerak robot vision:


Tabel 1 Kondisi gerak robot vision berdasarkan kordinat objek yang terdeteksi
No
Sumbu X
Sumbu Y
Kondisi Gerak
1
426.67 - 640
0 - 240
Belok Kanan Sedang
2
426.67 - 640
240 - 480
Belok Kanan Curam
3
213.33-426.67
0 - 240
Maju Ke Depan
4
213.33- 426.67
240 - 480
Diam
5
0 - 213.33
0 - 160
Belok Kiri Sedang
6
0 - 213.33
240 - 480
Belok Kiri Curam



Gambar 2 Skema robot pengenal warna 
Untuk dapat membuat robot vision menggunakan GUI Python terdapat beberapa tahapan sebagai berikut:
Gambar 3 Tahapan metode pembuatan robot pengenal warna

Tahap pertama yang akan dibuat adalah membuat GUI (Graphical User Interface) untuk mendeteksi warna menggunakan algoritma pengolahan citra digital, setelah dilakukan pengujian dan berhasil barulah kemudian dibuat GUI untuk menggabungkan pengolahan citra video digital untuk mendeteksi objek dengan program untuk mengakses GPIO yang akan mengontrol gerak motor yang akan bergerak ke arah objek. Tahapan berikutnya adalah membuat hardware robot menggunakan berupa motor driver yang akan menggerakan motor DC.

Pemrograman Python Robot Vision

Pada pembahasan ini kita akan membuat GUI robot vision pendeteksi objek berwarna. GUI robot vision ini menggabungkan program pengolahan citra digital dan kontrol logika GPIO Raspberry Pi yang akan mengontrol aktuator motor DC. Prinsipnya adalah saat webcam menangkap citra objek, maka algoritma pengolahan citra akan mendeteksi kordinat posisi objek berdasarkan pusat warnanya, setelah itu kordinat tersebut di konversi sebagaimana di terlihat pada Tabel 18.1 menjadi logika yang kemudian akan dikirimkan oleh Python ke pin GPIO untuk menggerakan motor DC.

 Desain Rangkaian Robot Digital yang Dikendalikan Vision Webcam

Gambar 18.4 adalah desain lengkap robot digital yang dikendalikan GUI Vision menggunakan Raspberry Pi dan Webcam. Motor driver untuk motor DC terhubung dengan pin GPIO yaitu GPIO 14, 15, 23, dan 24.


Gambar 4 Desain robot Raspberry Pi yang dikendalikan Vision

Desain GUI Python Kalibrasi Pendeteksian Objek Berwarna
Berikut adalah tahapan pembuatan interface pendeteksian objek berwarna:
1. Susun rangkaian robot kontrol Raspberry Pi seperti Gambar 4.
2. Hubungkan Raspberry Pi dengan Power, dan berbagai device seperti webcam, monitor, keyboard dan mouse.
3. Untuk memulai OS Raspberry Pi, login: pi, password: raspberry, setelah terbuka, ketik kembali “startx”, maka Desktop Raspberry Pi akan muncul.
4.  Buka software Python 2, dan ketik program berikut:




import cv2.cv as cv     # import libarary openCV
import time
capture = cv.CaptureFromCAM(0)
cv.SetCaptureProperty(capture,3,640)
cv.SetCaptureProperty(capture,4,480)
time.sleep(2)

while True:
    img = cv.QueryFrame(capture)
    cv.Smooth(img,img,cv.CV_BLUR,3)
    hue_img = cv.CreateImage(cv.GetSize(img),8,3)
    cv.CvtColor(img,hue_img,cv.CV_BGR2HSV)
    threshold_img=cv.CreateImage(cv.GetSize(hue_img),8,1)
    cv.InRangeS(hue_img,(0,150,0),(5,255,255),threshold_img)
    storage = cv.CreateMemStorage(0)
    contour = cv.FindContours(threshold_img,storage,cv.CV_RETR_CCOMP,cv.CV_CHAIN_APPROX_SIMPLE)
    points = []
    while contour:
        rect = cv.BoundingRect(list(contour))
        # konversi koordinat objek menjadi karakter 
        if rect[0]>426.67 and rect[0]<640.0 and rect[1]>0.0 and rect[1]<240.0:
            print ('BELOK KANAN SEDANG')
        if rect[0]>426.67 and rect[0]<640.0 and rect[1]>240.0 and rect[1]<480.0:
            print ('BELOK KANAN CURAM')
        if rect[0]>213.33 and rect[0]<426.67 and rect[1]>0.0 and rect[1]<240.0:
            print ('MAJU KEDEPAN')
        if rect[0]>213.33 and rect[0]<426.67 and rect[1]>240.0 and rect[1]<480.0:
            print ('DIAM')
        if rect[0]>0.0 and rect[0]<213.33 and rect[1]>0.0 and rect[1]<240.0:
            print ('BELOK KIRI SEDANG')
        if rect[0]>0.0 and rect[0]<213.33 and rect[1]>240.0 and rect[1]<480.0:
            print ('BELOK KIRI CURAM')        
        contour = contour.h_next()
        size = (rect[2]*rect[3])
        if size > 100:
            pt1 = (rect[0],rect[1])
            pt2 = (rect[0]+rect[2],rect[1]+rect[3])
            cv.Rectangle(img,pt1,pt2,(38,160,60))
    cv.ShowImage("Colour Tracking",img)
    if cv.WaitKey(10)==27:
        break 



       5. Save program yang dibuat, misalkan kalibrasi_deteksi_objek.py pada Directory: /home/pi 
      6. Kita tidak dapat menjalankan program (running) secara langsung pada IDLE Python, karena untuk mengakses hardware GPIO Raspberry Pi hanya dapat dilakukan oleh super user (root). Oleh karena itu untuk menjalankan program (running) bukalah LXTerminal, kemudian ketik: sudo python kalibrasi_deteksi_objek.py. Setelah itu tekan “enter”maka akan muncul tampilan berikut dan sistem siap untuk dilakukan pengujian.

Gambar 5 Tampilan Python kalibrasi pendeteksi objek berwarna merah

Desain GUI Python Robot Vision Pendeteksi Objek Berwarna

Berikut adalah tahapan pembuatan interface robot vision pendeteksi objek berwarna:
      
      1. Susun rangkaian robot kontrol Raspberry Pi seperti Gambar 4.
     2. Hubungkan Raspberry Pi dengan Power, dan berbagai device seperti webcam, monitor, keyboard dan mouse.
      3. Untuk memulai OS Raspberry Pi, login: pi, password: raspberry, setelah terbuka, ketik kembali “startx”, maka Desktop Raspberry Pi akan muncul.
      4. Buka software Python 2, dan ketik program berikut:

import cv2.cv as cv     # import libarary openCV
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.OUT)
GPIO.setup(3, GPIO.OUT)
GPIO.setup(14, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)

capture = cv.CaptureFromCAM(0)
cv.SetCaptureProperty(capture,3,640)
cv.SetCaptureProperty(capture,4,480)
time.sleep(2)

while True:
    img = cv.QueryFrame(capture)
    cv.Smooth(img,img,cv.CV_BLUR,3)
    hue_img = cv.CreateImage(cv.GetSize(img),8,3)
    cv.CvtColor(img,hue_img,cv.CV_BGR2HSV)
    threshold_img=cv.CreateImage(cv.GetSize(hue_img),8,1)
    cv.InRangeS(hue_img,(0,150,0),(5,255,255),threshold_img)
    storage = cv.CreateMemStorage(0)
    contour = cv.FindContours(threshold_img,storage,cv.CV_RETR_CCOMP,cv.CV_CHAIN_APPROX_SIMPLE)
    points = []
    while contour:
        rect = cv.BoundingRect(list(contour))

        # konversi koordinat objek menjadi logika GPIO
        if rect[0]>426.67 and rect[0]<640.0 and rect[1]>0.0 and rect[1]<240.0:
            print ('BELOK KANAN SEDANG')
            GPIO.output(2, False)
            GPIO.output(3, True)
            GPIO.output(14, False)
            GPIO.output(15, False)
        if rect[0]>426.67 and rect[0]<640.0 and rect[1]>240.0 and rect[1]<480.0:
            print ('BELOK KANAN CURAM')
            GPIO.output(2, False)
            GPIO.output(3, True)
            GPIO.output(14, True)
            GPIO.output(15, False)
        if rect[0]>213.33 and rect[0]<426.67 and rect[1]>0.0 and rect[1]<240.0:
            print ('MAJU KEDEPAN')
            GPIO.output(2, False)
            GPIO.output(3, True)
            GPIO.output(14, False)
            GPIO.output(15, True)
        if rect[0]>213.33 and rect[0]<426.67 and rect[1]>240.0 and rect[1]<480.0:
            print ('DIAM')
            GPIO.output(2, False)
            GPIO.output(3, False)
            GPIO.output(14, False)
            GPIO.output(15, False)
        if rect[0]>0.0 and rect[0]<213.33 and rect[1]>0.0 and rect[1]<240.0:
            print ('BELOK KIRI SEDANG')
            GPIO.output(2, False)
            GPIO.output(3, False)
            GPIO.output(14, False)
            GPIO.output(15, True)
        if rect[0]>0.0 and rect[0]<213.33 and rect[1]>240.0 and rect[1]<480.0:
            print ('BELOK KIRI CURAM')
            GPIO.output(2, True)
            GPIO.output(3, False)
            GPIO.output(14, False)
            GPIO.output(15, True)

        contour = contour.h_next()
        size = (rect[2]*rect[3])
        if size > 100:
            pt1 = (rect[0],rect[1])
            pt2 = (rect[0]+rect[2],rect[1]+rect[3])
            cv.Rectangle(img,pt1,pt2,(38,160,60))

    cv.ShowImage("Colour Tracking",img)
    if cv.WaitKey(10)==27:
        break



      5. Save program yang dibuat, misalkan robot_vision_raspi.py pada Directory: /home/p
6. Kita tidak dapat menjalankan program (running) secara langsung pada IDLE Python, karena untuk mengakses hardware GPIO Raspberry Pi hanya dapat dilakukan oleh super user (root). Oleh karena itu untuk menjalankan program (running) bukalah LXTerminal, kemudian ketik: sudo python robot_vision_raspi.py. Setelah itu tekan “enter”maka akan muncul tampilan berikut dan sistem siap untuk dilakukan pengujian.

Berikut adalah realisasi robot pengikut warna karya BOLABOT Techno Robotic Institute.

Gambar 6 Realisasi robot pengikut warna bolabot
Share:

4 komentar: