예제 #1
0
class Roobert:

    _hardwareDevices = None
    _faceGfx = None
    _speechOutput = None
    _camera = None

    _body_leds = None

    _ended = False
    _released = False

    showFace = True
    _lastFace = time.time() - 1000

    _rotate = 1

    def __init__(self):

        self._hardwareDevices = HardwareDevices.singleton()
        self._speechOutput = SpeechOutput(soundcard="plughw:1",
                                          voice="-vmb-de6")
        self._faceGfx = FaceGfx(self.showFace)
        self._camera = Camera()
        self._hardwareDevices.arms.SetArm(gesture=Arms._armHanging, left=True)
        self._hardwareDevices.arms.SetArm(gesture=Arms._armHanging, left=False)

    def Release(self):
        if (self._released == False):
            self._released = True
            print("shutting down roobert")

            # shut down other treads

            if (self._camera != None):
                self._camera.Release()

            if (self._faceGfx != None):
                self._faceGfx.Release()

            if (self._hardwareDevices != None):
                self._hardwareDevices.Release()

            self._ended = True

    def __del__(self):
        self.Release()
예제 #2
0
class Roobert:

    I2cIoExpanderPcf8574Adress = 0x38
    MotorLeftRightAdress = 0x0f
    MotorUpDownAdress = 0x3e
    sens_3d_servo_adress = 0x46

    _hardwareDevices = None

    FirstI2cIoExpanderPcf8574 = None
    _roomba = None
    _faceGfx = None
    _neckLeftRight = None
    _neckUpDown = None
    _speechOutput = None
    _camera = None

    _body_leds = None

    _ended = False
    _released = False

    showFace = True
    _lastFace = time.time() - 1000

    _rotate = 1

    def __init__(self):

        self._hardwareDevices = HardwareDevices.singleton()

        self.FirstI2cIoExpanderPcf8574 = I2cIoExpanderPcf8574(
            self.I2cIoExpanderPcf8574Adress, useAsInputs=True)
        endStop = self.FirstI2cIoExpanderPcf8574

        self._neckUpDown = NeckUpDown(
            I2cIoExpanderPcf8574(self.MotorUpDownAdress, useAsInputs=False),
            endStop)
        self._neckUpDown.targetPos = int(self._neckUpDown.MaxSteps * 0.85)

        self._neckLeftRight = NeckLeftRight(self.MotorLeftRightAdress, endStop)
        self._neckLeftRight.targetPos = int(self._neckLeftRight.MaxSteps *
                                            0.25)

        self._speechOutput = SpeechOutput()

        self._faceGfx = FaceGfx(self.showFace)

        self._body_leds = self._hardwareDevices.body_leds

        self._camera = Camera()

    def Release(self):
        if (self._released == False):
            self._released = True
            print("shutting down roobert")

            # shut down other treads

            if (self._camera != None):
                self._camera.Release()

            if (self._faceGfx != None):
                self._faceGfx.Release()

            if (self._neckUpDown != None):
                self._neckUpDown.Release()
            if (self._neckLeftRight != None):
                self._neckLeftRight.Release()

            if (self._hardwareDevices != None):
                self._hardwareDevices.Release()

            self._ended = True

    def Update(self):
        if (self.showFace == True):
            self._faceGfx.speaking = self._speechOutput.speaking

    def RandomHeadMovement(self):
        if (self._neckLeftRight.targetReached == True):
            movementArea = int(self._neckLeftRight.MaxSteps / 2)
            self._neckLeftRight.targetPos = randrange(0, movementArea)
        if (self._neckUpDown.targetReached == True):
            movementArea = int(self._neckUpDown.MaxSteps / 2)
            self._neckUpDown.targetPos = randrange(0, movementArea)

    def Greet(self):
        print("greetings!")
        self._speechOutput.Speak("Guten Tag.")
        self._speechOutput.Speak("Mein Name ist Robert")
        self._hardwareDevices.hand_arm_right.gestureGreet()
        while (self._speechOutput.speaking == True):
            time.sleep(1)
        self._speechOutput.Speak("Ich freue mich, Sie kennen zu lernen")
        self._hardwareDevices.hand_arm_right.gesturePointForward()
        while (self._speechOutput.speaking == True):
            time.sleep(1)
        self._hardwareDevices.hand_arm_right.home()

    def drive_avoiding_obstacles(self):
        #print (self._sens3d.nearest)
        if (self._sens3d.nearest > 40):
            self._roomba.move(3)
            #time.sleep(0.5)
        else:
            if (self._sens3d.x_weight < 0.45):
                self._roomba.rotate(-20)
            else:
                if (self._sens3d.x_weight > 0.55):
                    self._roomba.rotate(20)
                else:
                    self._roomba.rotate(180 * self._rotate)
                    self._rotate = self._rotate * -1

    def RotateDemoForPhoto(self):
        self._hardwareDevices.hand_arm_right.gesturePointForward()
        #self._hardwareDevices.roomba.rotate(10);

    def FollowFace(self):
        faceX = self._camera.posXFace
        faceY = self._camera.posYFace
        timeSinceLastFace = time.time() - self._lastFace
        if (faceX != -1 and faceY != -1):
            # oh, there is a face
            if (timeSinceLastFace > 60):
                # see a face after a long time: say hello!
                start_new_thread(self.Greet, ())
                #self.Greet()
                a = 0

            self._lastFace = time.time()
            self._camera.ResetFace()
            diffX = (faceX - 0.5)
            diffY = (faceY - 0.5)
            if (math.fabs(diffX) > 0.1):
                self._neckLeftRight.targetPos = self._neckLeftRight.targetPos - int(
                    diffX * 100)
            if (math.fabs(diffY) > 0.1):
                self._neckUpDown.targetPos = self._neckUpDown.targetPos - int(
                    diffY * 100)

            self._faceGfx.SetEyePos(faceX, faceY)
        else:
            # there is no face
            if (timeSinceLastFace > 20):
                # long time no face seen
                self._faceGfx.SetEyePos(0.5, 0.5)

    def __del__(self):
        self.Release()