示例#1
0
文件: robot.py 项目: traker/robot
class Robot():
    '''
        classe qui rassemble l'ensemble des modules du robot
            les differente fonction principale du robot:
                exploration, decouverte du terrain
                patrouille de point en point
                deplacement d'un point a un autre ,a partir de la carte decouverte
                affchage de la carte complete du terrain
        
    '''
    def __init__( self ):
        self.config = ConfigParser.RawConfigParser()
        self.config.read( 'RobotConf.cfg' )
        self.board = pyfirmata.ArduinoMega( self.config.get( 'Arduino', 'device' ) )
        self.prop = propulsion.Propulsion( self.config, self.board )
        self.tourel = propulsion.Tourelle( self.config, self.board )
        self.vue = Vision( self.config, self.board )
        self.land = landmap.LandMap()
        self.accel = propulsion.Accel( self.config )
        self.pile_vision = core.Core()
        #self.pilevar = collections.deque()
        self.pile_move = core.Core()
        self.running = False
        self.orientation = 0.0
        self.x = 0.0
        self.y = 0.0
        self.stream = stream.HTTPServer( ( "", 8080 ), self.vue )


    def start( self ):
        self.running = True
        thread.start_new_thread( self.__cerveau__, () )
        thread.start_new_thread( self.__mouvement__, () )
        thread.start_new_thread( self.stream.serve_forever, () )

    def stop( self ):
        self.running = False

    def __mouvement__( self ):
        while self.running:
            if self.pile_move.pile.__len__() <= 0:
                time.sleep( 0.1 )
            else:
                self.pile_move.exec_next()

    def __cerveau__( self ):
        '''
            cerveau se compose de differente pile avec different priorite
        '''
        while self.running:
            if self.pile_vision.pile.__len__() <= 0:
                time.sleep( 0.1 )
            else:
                self.pile_vision.exec_next()

    def balayage( self, depart , arrive , pas=1 ):
        if depart <= arrive :
            lis = numpy.arange( depart, arrive, pas )
        else:
            lis = numpy.arange( arrive, depart, pas )
            lis = lis[::-1]
        listd = []
        self.tourel.depl_tour( depart )
        for i in lis:
            self.tourel.depl_tour( i )
            listd.append( ( i, self.vue.get_range() ) )
        return listd