@@ -36,9 +36,10 @@ class WebotsSimulationGymEnvironment(gym.Env):
3636 supervisor: the supervisor of the simulation
3737 """
3838
39- def __init__ (self , simulation_rank : int ):
39+ def __init__ (self , simulation_rank : int , vehicle_rank : int ):
4040 super ().__init__ ()
4141 self .simulation_rank = simulation_rank
42+ self .vehicle_rank = vehicle_rank
4243
4344 # this is only true if lidar_horizontal_resolution = camera_horizontal_resolution
4445 box_min = np .zeros ([2 , context_size , lidar_horizontal_resolution ], dtype = np .float32 )
@@ -50,21 +51,21 @@ def __init__(self, simulation_rank: int):
5051 if not os .path .exists ("/tmp/autotech" ):
5152 os .mkdir ("/tmp/autotech" )
5253
53- log (f"SERVER{ simulation_rank } : { simulation_rank = } " )
54+ log (f"SERVER{ simulation_rank } _ { vehicle_rank } : { simulation_rank } _ { vehicle_rank } " )
5455
55- os .mkfifo (f"/tmp/autotech/{ simulation_rank } toserver.pipe" )
56- os .mkfifo (f"/tmp/autotech/serverto{ simulation_rank } .pipe" )
56+ os .mkfifo (f"/tmp/autotech/{ simulation_rank } _ { vehicle_rank } toserver.pipe" )
57+ os .mkfifo (f"/tmp/autotech/serverto{ simulation_rank } _ { vehicle_rank } .pipe" )
5758
5859 # --mode=fast --minimize --no-rendering --batch --stdout
5960 os .system (f"""
6061 webots { __file__ .rsplit ('/' , 1 )[0 ]} /worlds/piste{ simulation_rank % n_map } .wbt --mode=fast --minimize --no-rendering --batch --stdout &
61- echo $! { simulation_rank } >>/tmp/autotech/simulationranks
62+ echo $! { simulation_rank } _ { vehicle_rank } >>/tmp/autotech/simulationranks
6263 """ )
63- log (f"SERVER{ simulation_rank } : { simulation_rank } toserver.pipe" )
64- self .fifo_r = open (f"/tmp/autotech/{ simulation_rank } toserver.pipe" , "rb" )
65- log (f"SERVER{ simulation_rank } : serverto{ simulation_rank } .pipe" )
66- self .fifo_w = open (f"/tmp/autotech/serverto{ simulation_rank } .pipe" , "wb" )
67- log (f"SERVER{ simulation_rank } : fifo opened :D and init done" )
64+ log (f"SERVER{ simulation_rank } _ { vehicle_rank } : { simulation_rank } _ { vehicle_rank } toserver.pipe" )
65+ self .fifo_r = open (f"/tmp/autotech/{ simulation_rank } _ { vehicle_rank } toserver.pipe" , "rb" )
66+ log (f"SERVER{ simulation_rank } _ { vehicle_rank } : serverto{ simulation_rank } _ { vehicle_rank } .pipe" )
67+ self .fifo_w = open (f"/tmp/autotech/serverto{ simulation_rank } _ { vehicle_rank } .pipe" , "wb" )
68+ log (f"SERVER{ simulation_rank } _ { vehicle_rank } : fifo opened :D and init done" )
6869 log ("-------------------------------------------------------------------" )
6970
7071 def reset (self , seed = 0 ):
@@ -77,19 +78,19 @@ def reset(self, seed=0):
7778 return obs , info
7879
7980 def step (self , action ):
80- log (f"SERVER{ self .simulation_rank } : sending { action = } " )
81+ log (f"SERVER{ self .simulation_rank } _ { self . vehicle_rank } : sending { action = } " )
8182 self .fifo_w .write (action .tobytes ())
8283 self .fifo_w .flush ()
8384
8485 # communication with the supervisor
8586 cur_state = np .frombuffer (self .fifo_r .read (np .dtype (np .float32 ).itemsize * (n_sensors + lidar_horizontal_resolution + camera_horizontal_resolution )), dtype = np .float32 )
86- log (f"SERVER{ self .simulation_rank } : received { cur_state = } " )
87+ log (f"SERVER{ self .simulation_rank } _ { self . vehicle_rank } : received { cur_state = } " )
8788 reward = np .frombuffer (self .fifo_r .read (np .dtype (np .float32 ).itemsize ), dtype = np .float32 )[0 ] # scalar
88- log (f"SERVER{ self .simulation_rank } : received { reward = } " )
89+ log (f"SERVER{ self .simulation_rank } _ { self . vehicle_rank } : received { reward = } " )
8990 done = np .frombuffer (self .fifo_r .read (np .dtype (np .bool ).itemsize ), dtype = np .bool )[0 ] # scalar
90- log (f"SERVER{ self .simulation_rank } : received { done = } " )
91+ log (f"SERVER{ self .simulation_rank } _ { self . vehicle_rank } : received { done = } " )
9192 truncated = np .frombuffer (self .fifo_r .read (np .dtype (np .bool ).itemsize ), dtype = np .bool )[0 ] # scalar
92- log (f"SERVER{ self .simulation_rank } : received { truncated = } " )
93+ log (f"SERVER{ self .simulation_rank } _ { self . vehicle_rank } : received { truncated = } " )
9394 info = {}
9495
9596 cur_state = np .nan_to_num (cur_state [n_sensors :], nan = 0. , posinf = 30. )
@@ -119,11 +120,11 @@ def step(self, action):
119120 if B_DEBUG :
120121 print ("Webots started" , file = open ("/tmp/autotech/logs" , "w" ))
121122
122- def make_env (rank : int ):
123+ def make_env (rank : int , rank_v : int ):
123124 log (f"CAREFUL !!! created an SERVER env with { rank = } " )
124- return WebotsSimulationGymEnvironment (rank )
125+ return WebotsSimulationGymEnvironment (rank , rank_v )
125126
126- envs = SubprocVecEnv ([lambda rank = rank : make_env (rank ) for rank in range (n_simulations )])
127+ envs = SubprocVecEnv ([lambda rank = rank , rank_v = rank_v : make_env (rank , rank_v ) for rank_v in range ( n_vehicles ) for rank in range (n_simulations )])
127128
128129 ExtractorClass = TemporalResNetExtractor
129130
0 commit comments