コード例 #1
0
ファイル: hamster_main.py プロジェクト: Morgan10E/CS123
def main(argv=None):
    # instantiate COMM object
    comm = RobotComm(1, -50) #maxRobot = 1, minRSSI = -50
    if comm.start():
        print 'Communication starts'
    else:
        print 'Error: communication'
        return

    # instanciate Robot
    robotList = comm.get_robotList()

    global gFrame
    gFrame = tk.Tk()
    gFrame.geometry('600x500')
    #gFrame.focus_set()
    #gFrame.bind('<KeyPress>', joystick)

    gRobotDraw = draw.RobotDraw(gFrame, tk)

    # create behaviors using set
    global gBehaviors
    gBehaviors = {}
    # gBehaviors[0] = color.Behavior("color", robotList)
    # gBehaviors[1] = sound.Behavior("sound", robotList)
    # gBehaviors[2] = motion.Behavior("motion", robotList, 10)
    # gBehaviors[3] = proxy.Behavior("proxy", robotList, 85, 0.01, gRobotDraw.get_queue())
    gBehaviors[0] = scanning.Behavior("scanning", robotList, 16.0, gRobotDraw.get_queue())

    # start behavior threads using list
    behavior_threads = []
    for i in range(0, len(gBehaviors)):
        gBehaviors[i].set_bQuit(False)
        behavior_threads.append(threading.Thread(target=gBehaviors[i].behavior_loop, name = gBehaviors[i].get_name()))

    for thread in behavior_threads:
        thread.daemon = True
        thread.start()

    gRobotDraw.start()
    gFrame.mainloop()

    for behavior in behavior_threads:
        print "joining... ", behavior.getName()
        behavior.join()
        print behavior.getName(), "joined!"

    for robot in robotList:
        robot.reset()

    comm.stop()
    comm.join()

    print("terminated!")
コード例 #2
0
ファイル: hamster_main.py プロジェクト: tediris/robo_location
def main(argv=None):

    paths = getPaths(1000, 600, 500, 200)
    drawList.append((500, 200))
    drawList.append((1500, 200))
    drawList.append((500, 800))
    drawList.append((1500, 800))

    # instantiate COMM object
    comm = RobotComm(2, -50) #maxRobot = 1, minRSSI = -50
    if comm.start():
        print 'Communication starts'
    else:
        print 'Error: communication'
        return

    # instantiate Robot
    robotList = comm.get_robotList()

    # create behaviors using set
    global gBehaviors
    gBehaviors = {}

    # start behavior threads using list
    behavior_threads = []
    behavior_threads.append(threading.Thread(target=command, args=(paths, robotList)))

    for thread in behavior_threads:
        thread.daemon = True
        thread.start()

    # start the cv thread
    main_thread()

    for behavior in behavior_threads:
        print "joining... ", behavior.getName()
        behavior.join()
        print behavior.getName(), "joined!"

    for robot in robotList:
        robot.reset()


    comm.stop()
    comm.join()

    print("terminated!")
コード例 #3
0
def main(argv=None):
    # instantiate COMM object
    comm = RobotComm(1, -50) #maxRobot = 1, minRSSI = -50
    if comm.start():
        print 'Communication starts'
    else:
        print 'Error: communication'
        return

    # instantiate Robot
    robotList = comm.get_robotList()

    # instantiate global variables gFrame and gBehavior
    settings.init()

    settings.gFrame = tk.Tk()
    settings.gFrame.geometry('600x500')

    gRobotDraw = draw.RobotDraw(settings.gFrame, tk)

    # create behaviors
    settings.gBehaviors[0] = scanning.Behavior("scanning", robotList, 4.0, gRobotDraw.get_queue())
    settings.gBehaviors[1] = collision.Behavior("collision", robotList, -50)

    gRobotDraw.start()
    settings.gFrame.mainloop()
    
    for behavior in behavior_threads:
        print "joining... ", behavior.getName()
        behavior.join()
        print behavior.getName(), "joined!"

    for robot in robotList:
        robot.reset()

    comm.stop()
    comm.join()

    print("terminated!")
コード例 #4
0
ファイル: final_main.py プロジェクト: jaredywhip/Robot_Escape
def main():
      
    comm = RobotComm(gVars.gMaxRobotNum,-70) #maxRobot, minRSSI
    comm.start()
    print 'Bluetooth starts'
    #instanciate robot list and GUI root
    gVars.grobotList = comm.get_robotList()
    gVars.m = tk.Tk() #root
    drawQueue = Queue.Queue(0)
  
    #creating the GUI canvas
    canvas_width = 700 # half width
    canvas_height = 300  # half height
    rCanvas = tk.Canvas(gVars.m, bg="white", width=canvas_width*2, height=canvas_height*2)
    
    #create the prisoner vitual robot 
    prisoner = pris_bot.Prisoner(comm, rCanvas)
    
    # visual elements of the virtual robot 
    poly_points = [0,0,0,0,0,0,0,0]
    prisoner.vrobot.poly_id = rCanvas.create_polygon(poly_points, fill='orange') #robot
    prisoner.vrobot.prox_l_id = rCanvas.create_line(0,0,0,0, fill="red") #prox sensors
    prisoner.vrobot.prox_r_id = rCanvas.create_line(0,0,0,0, fill="red")
    prisoner.vrobot.floor_l_id = rCanvas.create_oval(0,0,0,0, outline="white", fill="white") #floor sensors
    prisoner.vrobot.floor_r_id = rCanvas.create_oval(0,0,0,0, outline="white", fill="white")
    
    update_pvrobot_thread = threading.Thread(target=prisoner.update_virtual_robot)
    update_pvrobot_thread.daemon = True
    update_pvrobot_thread.start()
    
    #create the prisoner vitual robot 
    guard = guard_bot.Guard(comm, rCanvas)
    
    # visual elements of the virtual robot 
    poly_points = [0,0,0,0,0,0,0,0]
    guard.vrobot.poly_id = rCanvas.create_polygon(poly_points, fill='green') #robot
    guard.vrobot.prox_l_id = rCanvas.create_line(0,0,0,0, fill="red") #prox sensors
    guard.vrobot.prox_r_id = rCanvas.create_line(0,0,0,0, fill="red")
    guard.vrobot.floor_l_id = rCanvas.create_oval(0,0,0,0, outline="white", fill="white") #floor sensors
    guard.vrobot.floor_r_id = rCanvas.create_oval(0,0,0,0, outline="white", fill="white")
  
    update_gvrobot_thread = threading.Thread(target=guard.update_virtual_robot)
    update_gvrobot_thread.daemon = True
    update_gvrobot_thread.start()
    
    #create the virtual worlds that contains the virtual robot
    vWorld = draw.virtual_world(drawQueue, prisoner.vrobot, guard.vrobot, rCanvas, canvas_width, canvas_height)
    
    #objects in the world
    rect_slider = [-150, 160, -60, 120]
    rect_l1 = [-150, 0, -110, 120]  #left 1
    rect_l2 = [-112, -100, -110, -5]  #left 2 (paper flap)
    rect_b1 = [-250, -105, 265, -100]  #back wall
    rect_r1 = [260, -100, 265, 200]    #right 1
    rect_f1 = [-110, 100, -40, 105]    #front 1
    rect_f2 = [40, 100, 260, 105]    #front 2
    rect_lh = [-250, -100, -245, 210] #left hallway wall
    rect_rh = [-150, 160, -145, 210]
    vWorld.add_obstacle(rect_l1)
    vWorld.add_obstacle(rect_l2)
    vWorld.add_obstacle(rect_b1)
    vWorld.add_obstacle(rect_r1)
    vWorld.add_obstacle(rect_f1)
    vWorld.add_obstacle(rect_f2)
    vWorld.add_obstacle(rect_lh)
    vWorld.add_obstacle(rect_rh)
    vWorld.add_obstacle(rect_slider)
    
    #create boundary for decoy box starting position
    vWorld.add_boundary([50,0,170,80])
    
    #start thread to draw the virtual world
    draw_world_thread = threading.Thread(target=GUI.draw_virtual_world, args=(vWorld, prisoner, guard))
    draw_world_thread.daemon = True
    draw_world_thread.start()
  
    graphics = GUI.VirtualWorldGui(vWorld, gVars.m)
    
    #create FSM for guard
    guard_fsm = guard_FSM.EventFsm()
    print "Guard: Created the guard state machine. \n"
    guard_FSM.build_states(guard_fsm, vWorld, guard)
    guard_fsm.set_start("init")
    guard_fsm.set_current("init")
    
    #start thread to monitor events in guard FSM
    guard_event_thread = threading.Thread(target=guard_FSM.monitor_events,  args=(guard_fsm,))
    guard_event_thread.daemon = True
    guard_event_thread.start()
    
    #start thread to run guard FSM
    guard_fsm_thread = threading.Thread(target=guard_fsm.run)
    guard_fsm_thread.daemon = True
    guard_fsm_thread.start()
    
    #create FSM for prisoner
    pris_fsm = pris_FSM.EventFsm()
    print "Prisoner: Ceated the prisoner state machine. \n"
    pris_FSM.build_states(pris_fsm, vWorld, prisoner, guard_fsm)
    pris_fsm.set_start("init")
    pris_fsm.set_current("init")
  
    #start thread to monitor events in prisoner FSM
    pris_event_thread = threading.Thread(target=pris_FSM.monitor_events,  args =(pris_fsm, prisoner, guard_fsm))
    pris_event_thread.daemon = True
    pris_event_thread.start()
    
    #start thread to run prisoner FSM
    pris_fsm_thread = threading.Thread(target=pris_fsm.run)
    pris_fsm_thread.daemon = True
    pris_fsm_thread.start()
    
    rCanvas.after(200, graphics.updateCanvas, drawQueue)
    gVars.m.mainloop()
    
    print "Cleaning up"
    
    #reset robot list and join active threads
    for robot in gVars.grobotList:
        robot.reset()
    comm.stop()
    comm.join()
    if pris_event_thread.isAlive():
        pris_event_thread.join(.5)
    if pris_fsm_thread.isAlive():    
        pris_fsm_thread.join(.5)
    if guard_event_thread.isAlive():
        guard_event_thread.join(.5)
    if guard_fsm_thread.isAlive():    
        guard_fsm_thread.join(.5) 
    if draw_world_thread.isAlive():
        draw_world_thread.join(.5)

    print "Goodbye."