UserPreferences

FuzzyPTZProgram


  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
 45 
 46 
 47 
 48 

# A Fuzzy Logic PTZ Vision Tracker
# Uses Python-integrated Vision System

from pyrobot.brain.fuzzy import *
from pyrobot.brain.behaviors import *

class BBB(BehaviorBasedBrain):
    def destroy(self):
        print "robot=", self.robot
        self.removeDevice("ptz0")

class Track(Behavior):
    def setup(self):
        # assumes that a camera device is already running!
        # we don't put it here, so that you can load whatever
        # type of camera you want: fake, blob, v4l, etc.
        self.camera = self.robot.camera[0]
        self.camWidth = self.camera.width
        self.camHeight = self.camera.height
    def update(self):
        # match a reddish color:
        self.camera.apply("match", 144, 78, 76)
        # super color red:
        self.camera.apply("superColor", 1, -1, -1, 0, 128)
        # blobify all red:
        blob = self.camera.apply("blobify", 0, 255, 255, 0, 1, 1, 1)[0]
        # returns x1, y1, x2, y2, area
        if blob[4] > 200:
            cx = (blob[0] + blob[2]) / 2
            cy = (blob[1] + blob[3]) / 2
            self.IF(Fuzzy(0, self.camWidth ) << cx, 'pan',   5.0, "pan left")
            self.IF(Fuzzy(0, self.camWidth ) >> cx, 'pan',  -5.0, "pan right")
            self.IF(Fuzzy(0, self.camHeight ) << cy, 'tilt',-5.0, "tilt down")
            self.IF(Fuzzy(0, self.camHeight ) >> cy, 'tilt', 5.0, "tilt up")

class MyState(State):
    def setup(self):
        self.add(Track(1, {'pan': 1, 'tilt': 1}))

def INIT(engine):
    ptz = engine.robot.startDevice("ptz");
    brain = BBB({'pan' : ptz.panRel,
                 'tilt': ptz.tiltRel,
                 'update' : engine.robot.update },
                engine)
    brain.add(MyState(1)) # make it active
    return brain