Example #1
0
 def step (self):
     """Overide step to handle retransmissions, could be made cleaner using
     simulated time."""
     InterNode.step (self)
     for r in self.robots:
         for prog in r.protos:
             prog.proto.sync ()
Example #2
0
 def __init__ (self, robot_class, robot_nb = 1,
         color_switch_set_pos = False):
     # Hub.
     self.hub = mex.hub.Hub (min_clients = 1 + robot_class.client_nb
             * robot_nb)
     self.forked_hub = utils.forked.Forked (self.hub.wait)
     # InterNode.
     InterNode.__init__ (self, robot_class.tick)
     def proto_time ():
         return self.node.date / self.node.tick
     # Robot instances.
     self.robots = [ robot_class (proto_time, 'robot%d' % i)
             for i in xrange (robot_nb) ]
     for r in self.robots:
         for prog in r.protos:
             prog.async = True
             def prog_read (f, mask, prog = prog):
                 try:
                     prog.proto.read ()
                     prog.proto.sync ()
                 except EOFError:
                     print "Connection closed"
                     self.tk.deletefilehandler (prog)
                     self.play_var.set (0)
                     self.play ()
             self.tk.createfilehandler (prog, READABLE, prog_read)
     # Add table.
     self.table_model = robot_class.table_model.Table ()
     self.table = robot_class.table_view.Table (self.table_view,
             self.table_model)
     self.obstacle = obstacle_model.RoundObstacle (150, 4)
     self.table_model.obstacles.append (self.obstacle)
     self.obstacle_beacon = obstacle_model.RoundObstacle (40, 5)
     self.table_model.obstacles.append (self.obstacle_beacon)
     self.obstacle_view = ObstacleWithBeacon (self.table, self.obstacle,
             self.obstacle_beacon)
     self.table_view.bind ('<2>', self.place_obstacle)
     # Add robots.
     for r in self.robots:
         r.link = r.robot_link.Bag (self.node, r.instance)
         r.model = r.robot_model.Bag (self.node, self.table_model, r.link)
         r.view = r.robot_view.Bag (self.table, self.actuator_view,
                 self.sensor_frame, r.model)
         # Color switch.
         def change_color (r = r):
             i = r.model.color_switch.state
             r.asserv.set_simu_pos (*r.robot_start_pos[i])
             if color_switch_set_pos:
                 r.asserv.set_pos (*r.robot_start_pos[i])
         r.model.color_switch.register (change_color)
         # Jack.
         if hasattr (r, 'jack'):
             r.model.jack.register (r.jack)
         # Beacon system.
         if hasattr (r.link, 'beacon'):
             r.link.beacon.position[0].register_to (self.obstacle)