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 ()
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)