예제 #1
0
 def run(self):
     global Count,ALPHA,BETA,HeadMoveExitFlagGlobal,GetColumnFlag,StateChangeExitFlagGlobal,Weight
     print "Creating ALVideoDevice proxy to ", self.IP
     nameId, camProxy = GetImgRemote.getCamID(self.IP, self.PORT, time.strftime('%X'))  # please change the string if can't capture images
     cv2.namedWindow('img')
     #cv2.namedWindow('imgSource')
     WINDOWNAME = 'AdjustColor'
     cv2.namedWindow(WINDOWNAME)
     cv2.resizeWindow(WINDOWNAME, 640, 480)
     FindObject.creatTrackbar(WINDOWNAME, nothing)
     while True:
         #time.sleep(0.1)
         t1=time.clock()
         img = GetImgRemote.getimages(nameId, camProxy)
         cv2.imshow("imgSource", img)
         color = FindObject.getTrackbarValue(WINDOWNAME)
         if GetColumnFlag is False:
             newimg, CenterP, Count,Weight = FindObject.FindCoordinate(img, color)
         else:
             newimg, CenterP, Count,Weight,GarbageCenter = FindObject.FindGarbage(img,color)
         if Count > 0:
             #print CenterP[0][0], CenterP[0][1]
             # self.memory.insertData("directionSearch", 0)
             alpha, beta = Focus.FocusObject(CenterP)
             #print "alpha=", alpha
             #print "beta=", beta
             if GetColumnFlag is False:
                 Focus.headMove(self.IP, self.PORT, [alpha, beta])
                 ALPHA = alpha
                 BETA = beta
             else:
                 alpha1, beta1 = Focus.FocusObject(GarbageCenter)
                 Focus.headMove(self.IP, self.PORT, [alpha1, beta1])
             ALPHA=alpha
             BETA=beta
         if Count <= 0:
           #  self.memory.insertData("directionSearch", 0)
             ALPHA = None
             BETA = None
         cv2.imshow("img", newimg)
         key=cv2.waitKey(1)
         t2 = time.clock()
         #print 'vision time:', t2 - t1
         if HeadMoveExitFlagGlobal == True:
             break
         if key == 27:
             Focus.headRest(self.IP, self.PORT)
             self.motion.rest()
             HeadMoveExitFlagGlobal = True
             StateChangeExitFlagGlobal = True
     sentence = "I stop the Head Move!"
     self.tts.say(str(sentence))
     Focus.headRest(self.IP,self.PORT)
예제 #2
0
파일: FSM.py 프로젝트: nickkonidaris/rcrc
    def execute(self, prev_state_name, inputs):
        global last_focus
        ns=DomeOpenState.execute(self, prev_state_name, inputs)
        if ns != '': return ns
            

        try:
            cmd = GXN.Commands()
            
            positions = numpy.arange(14.0, 14.8, 0.1)
            filenames = []
            
            rc_camera.object = "Focus Loop"        
            cmd.gofocus(13)
            rc_camera.shutter = "normal"
            for position in positions:
                cmd.gofocus(position)
                try:
                    expose(15)
                except:
                    return "restart_detector_software"
                filenames.append(rc_camera.filename)
            
            log.info("FN: %s" % str(filenames))
            fpos, fposs, metrics = Focus.rc_focus_check(filenames)
            
            log.info("In the range of: %s" % positions)
            log.info("Metrics: %s" % metrics)
            log.info("Best focus is %f" % fpos)
            last_focus = [datetime.now(), fpos]
            cmd.gofocus(fpos)
            cmd.close()
        except:
            cmd.close()
            return "focus_failed"
        
        return "exposure_handler"
예제 #3
0
import sys
import HsiMod
import Focus
import math
from PIL import Image
import numpy as np

inputFile = sys.argv[1]
outputFile = 'output.jpg'
inputImage = Image.open(inputFile)
pixelsMatrix = HsiMod.toMatrix(inputImage)
pixelsMatrix = HsiMod.hsiMod(pixelsMatrix,(0,2,1))

pixelsMatrix = Focus.focusSimulation(pixelsMatrix,inputImage.size)

outdata = HsiMod.toData(pixelsMatrix)
outputImage = Image.new('RGB',inputImage.size)
outputImage.putdata(outdata)

outputImage.save(outputFile,'JPEG',quality=100,optimize=True)
예제 #4
0
파일: tccv3.py 프로젝트: UWMRO/TCC
 def getFocus(self,event):
     Focus.getFocus(self,event)
예제 #5
0
파일: tccv3.py 프로젝트: UWMRO/TCC
 def setfocus(self,event):
     Focus.setfocus(self,event)
예제 #6
0
파일: tccv3.py 프로젝트: UWMRO/TCC
 def focusIncNeg(self,event):
     Focus.focusIncNeg(self,event)
예제 #7
0
파일: tccv3.py 프로젝트: UWMRO/TCC
 def focusIncPlus(self,event):
     Focus.focusIncPlus(self,event)
예제 #8
0
파일: tccv3.py 프로젝트: JagdeepSing/TCC
 def getFocus(self, event):
     Focus.getFocus(self, event)
예제 #9
0
파일: tccv3.py 프로젝트: JagdeepSing/TCC
 def setfocus(self, event):
     Focus.setfocus(self, event)
예제 #10
0
파일: tccv3.py 프로젝트: JagdeepSing/TCC
 def focusIncNeg(self, event):
     Focus.focusIncNeg(self, event)
예제 #11
0
파일: tccv3.py 프로젝트: JagdeepSing/TCC
 def focusIncPlus(self, event):
     Focus.focusIncPlus(self, event)
예제 #12
0
    def run(self):
        global Count, ALPHA, BETA, STATE,HeadMoveExitFlagGlobal,StateChangeExitFlagGlobal,GetColumnFlag,Weight
        while True:
            #time.sleep(5)
            #根据不同状况改变state的值
            # GetColumnFlag = True
            if StateChangeExitFlagGlobal == True:
                break
            if GetColumnFlag is False:
                if Count > 0 and self.ReachableFlag is False:
                    self.state = STATE['COLUMN_UNREACHABLE']
                elif Count > 0 and self.ReachableFlag is True:
                    self.state = STATE['COLUMN_REACHABLE']
                elif Count <= 0 and self.ReachableFlag is False:
                    self.state = STATE['COLUMN_LOST']
            else:
                if self.TurnBodyFlag is False:
                    #通过TurnBodyFlag标志位使COLUMN_GETED只执行一次
                    self.state = STATE['COLUMN_GETED']
                    self.TurnBodyFlag = True
                    #标志位初始化
                    self.ReachableFlag = False
                    self.SpeakReachableFlag = True
                    self.SpeakFindFlag = True
                else:
                    if Count > 0 and self.ReachableFlag is False:
                        self.state = STATE['GARBAGE_UNREACHABLE']
                    elif Count > 0 and self.ReachableFlag is True:
                        self.state = STATE['GARBAGE_REACHABLE']
                    elif Count <= 0 and self.ReachableFlag is False:
                        self.state = STATE['GARBAGE_LOST']

            # self.state = STATE['GARBAGE_UNREACHABLE']
            #依据不同的state进行不同的策略
            if self.state == STATE['COLUMN_LOST']:
                time.sleep(2)
                print 'LOST'
                Move.Columnlost(self.IP, self.PORT,self.ReachableFlag)
            elif self.state == STATE['COLUMN_UNREACHABLE']:
                print 'COLUMN_UNREACHABLE'
                print 'Count ALPHA BETA', Count, ALPHA, BETA
                if self.SpeakFindFlag is True:
                    self.SpeakFindFlag = False
                    sentence = "The garbage is in my view"
                    self.tts.say(str(sentence))
                if ALPHA is not None and BETA is not None:
                    # Torso_X, Torso_Y, ColumnAglY,Height = Focus.calculateDistance(ALPHA, BETA, self.IP, self.PORT
                    #                                                        ,250)# 最后一个参数为目标物与地面的高度 单位mm
                    # print 'Column: Torso_X Torso_Y ColumnAglY',Torso_X, Torso_Y, ColumnAglY
                    Torso_X, Torso_Y, Height ,ColumnAglY= FindObject.CalculateDistanceNew(Weight, ALPHA, BETA, self.IP, self.PORT,0.0232)
                    self.ReachableFlag = WalkEngine.WalkToObject(Count,Torso_X, Torso_Y, ColumnAglY, self.IP, self.PORT
                                                                 ,170)# 最后一个参数为stopDistance 单位mm

                    # self.ReachableFlag=True#调试用
            elif self.state == STATE['COLUMN_REACHABLE']:
                time.sleep(3)           #调整一下,以防Torso_X偏差太大
                if ALPHA is not None and BETA is not None:
                    Torso_X, Torso_Y ,Height,ColumnAglY= FindObject.CalculateDistanceNew(Weight, ALPHA, BETA, self.IP, self.PORT,0.0232)
                    if Torso_X <170 and Torso_X>0 and Torso_Y>=-10.0 and Torso_Y <= 80 :
                            if self.SpeakReachableFlag is True:
                                self.SpeakReachableFlag = False
                                sentence = "I have reached the garbage!"
                                self.tts.say(str(sentence))
                                print 'REACHABLE!'
                            print 'grasp for ',self.graspCount,'time'
                            self.graspCount+=1
                            print 'Torso_X',Torso_X
                            print 'Torso_Y',Torso_Y
                            print 'Height',Height
                            self.armControl.armStretch()
                            self.armControl.grasp(Torso_X,Torso_Y,Height)    #微调手臂位置
                            commandAngles=self.motion.getAngles("LHand",False) #name,useSensors 不用传感器
                            sensorAngles =self.motion.getAngles("LHand",True)  #name,useSensors 用传感器
                            print commandAngles
                            print sensorAngles
                            vel=commandAngles[0]/sensorAngles[0]
                            print 'vel:' ,vel
                            if vel<0.96:
                                GetColumnFlag = True
                    else:
                        self.ReachableFlag=False
                        print 'TorsoXY is not right in REACHABLE!'
                        print 'Torso_X', Torso_X
                        print 'Torso_Y', Torso_Y
            elif self.state == STATE['COLUMN_GETED']:
                sentence = "I get the Garbage!"
                self.tts.say(str(sentence))
                self.armControl.armsBack()
               #  HeadMoveExitFlagGlobal=True
               #  StateChangeExitFlagGlobal=True
               #后退两步防止撞到桌子
                x = -0.08
                y = 0
                theta=0
                self.motion.moveTo(x, y, theta)
                # time.sleep(2)
            elif self.state == STATE['GARBAGE_LOST']:
                # time.sleep(2)
                print 'LOST GARBAGE!'
                Move.Garbagelost(self.IP, self.PORT,Count)
            elif self.state == STATE['GARBAGE_UNREACHABLE']:
                print 'GARBAGE_UNREACHABLE'
                if self.SpeakFindFlag is True:
                    self.SpeakFindFlag = False
                    sentence = "The garbage can is in my view!"
                    self.tts.say(str(sentence))
                #time.sleep(1)
                if ALPHA is not None and BETA is not None:
                    print 'Count ALPHA BETA', Count, ALPHA, BETA
                    Torso_X, Torso_Y, Height, ColumnAglY= FindObject.CalculateDistanceNew(Weight,ALPHA, BETA, self.IP, self.PORT,0.107)# 最后一个参数为物体直径
                    print 'Garbage: Torso_X Torso_Y ColumnAglY Height', Torso_X, Torso_Y, ColumnAglY,Height
                    self.ReachableFlag = WalkEngine.WalkToGarbage(Count,Torso_X, Torso_Y, ColumnAglY, self.IP, self.PORT,
                                                                  200)  # 最后一个参数为stopDistance 单位mm
            elif self.state == STATE['GARBAGE_REACHABLE']:
                if self.SpeakReachableFlag is True:
                    self.SpeakReachableFlag = False
                    sentence = "I have reached the garbage can!"
                    self.tts.say(str(sentence))
                    print 'Garbage can REACHABLE!'
                time.sleep(2)
                # time.sleep(1)
                if ALPHA is not None and BETA is not None:
                    Torso_X, Torso_Y, Height, ColumnAglY= FindObject.CalculateDistanceNew(Weight, ALPHA, BETA, self.IP,
                                                                                           self.PORT,0.107)
                    if Torso_X < 200 and Torso_X>0 and Torso_Y>=-40.0 and Torso_Y < 80:
                        if self.SpeakReachableFlag is True:
                            self.SpeakReachableFlag = False
                            sentence = "I have reached the garbage can!"
                            self.tts.say(str(sentence))
                            print 'Garbage can REACHABLE!'
                        print 'loose for ', self.graspCount, 'time'
                        self.graspCount += 1
                        print 'Torso_X', Torso_X
                        print 'Torso_Y', Torso_Y
                        print 'Height', Height

                        self.armControl.armOut()
                        self.armControl.loose(Torso_X,Torso_Y,Height)
                        self.armControl.armsBack()
                        self.tts.say("I succeed!")
                        Focus.headRest(self.IP, self.PORT)
                        self.motion.rest()
                        HeadMoveExitFlagGlobal = True
                        StateChangeExitFlagGlobal = True
                    else:
                        self.ReachableFlag = False
                        print 'TorsoXY is not right in REACHABLE!'
                        print 'Torso_X', Torso_X
                        print 'Torso_Y', Torso_Y
예제 #13
0
                        self.armControl.armOut()
                        self.armControl.loose(Torso_X,Torso_Y,Height)
                        self.armControl.armsBack()
                        self.tts.say("I succeed!")
                        Focus.headRest(self.IP, self.PORT)
                        self.motion.rest()
                        HeadMoveExitFlagGlobal = True
                        StateChangeExitFlagGlobal = True
                    else:
                        self.ReachableFlag = False
                        print 'TorsoXY is not right in REACHABLE!'
                        print 'Torso_X', Torso_X
                        print 'Torso_Y', Torso_Y
time.sleep(1)
threads=[]
IP="127.0.0.1"
PORT=9559
Focus.Initialize(IP, PORT)
# Create new threads
headMove = HeadMove(1, "HeadMove",IP,PORT)
headMove.start()
threads.append(headMove)
stateChange = StateChange(2,"StateChange",IP,PORT)
stateChange.start()
threads.append(stateChange)

# Start Threads
for t in threads:
    t.join()
print 'all thread have stopped!'