Example #1
0
 def observe(self) -> np.ndarray:
     if not self.env.road:
         return np.zeros(
             (3, 3,
              int(self.horizon * self.env.config["policy_frequency"])))
     grid = compute_ttc_grid(self.env,
                             vehicle=self.observer_vehicle,
                             time_quantization=1 /
                             self.env.config["policy_frequency"],
                             horizon=self.horizon)
     padding = np.ones(np.shape(grid))
     padded_grid = np.concatenate([padding, grid, padding], axis=1)
     obs_lanes = 3
     l0 = grid.shape[1] + self.observer_vehicle.lane_index[
         2] - obs_lanes // 2
     lf = grid.shape[1] + self.observer_vehicle.lane_index[
         2] + obs_lanes // 2
     clamped_grid = padded_grid[:, l0:lf + 1, :]
     repeats = np.ones(clamped_grid.shape[0])
     repeats[np.array([0, -1])] += clamped_grid.shape[0]
     padded_grid = np.repeat(clamped_grid, repeats.astype(int), axis=0)
     obs_speeds = 3
     v0 = grid.shape[0] + self.observer_vehicle.speed_index - obs_speeds // 2
     vf = grid.shape[0] + self.observer_vehicle.speed_index + obs_speeds // 2
     clamped_grid = padded_grid[v0:vf + 1, :, :]
     return clamped_grid
Example #2
0
    def observe(self) -> np.ndarray:
            if not self.env.road:
                return np.zeros(self.space().shape)

            # Add ego-vehicle
            df = pd.DataFrame.from_records([self.observer_vehicle.to_dict()])[self.features]
            # Add nearby traffic
            # sort = self.order == "sorted"
            close_vehicles = self.env.road.close_vehicles_to(self.observer_vehicle,
                                                            self.env.PERCEPTION_DISTANCE,
                                                            count=self.vehicles_count - 1,
                                                            see_behind=self.see_behind)
            if close_vehicles:
                origin = self.observer_vehicle if not self.absolute else None
                df = df.append(pd.DataFrame.from_records(
                    [v.to_dict(origin, observe_intentions=self.observe_intentions)
                    for v in close_vehicles[-self.vehicles_count + 1:]])[self.features],
                              ignore_index=True)
            # Normalize and clip
            if self.normalize:
                df = self.normalize_obs(df)
            # Fill missing rows
            if df.shape[0] < self.vehicles_count:
                rows = np.zeros((self.vehicles_count - df.shape[0], len(self.features)))
                df = df.append(pd.DataFrame(data=rows, columns=self.features), ignore_index=True)
            # Reorder
            df = df[self.features]
            obs = df.values.copy()
            if self.order == "shuffled":
                self.env.np_random.shuffle(obs[1:])
            # Flatten
            
            if not self.env.road:
                return np.zeros((3, 3, int(self.horizon * self.env.config["policy_frequency"])))
            grid = compute_ttc_grid(self.env, vehicle=self.observer_vehicle,
                                    time_quantization=1/self.env.config["policy_frequency"], horizon=self.horizon)
            padding = np.ones(np.shape(grid))
            padded_grid = np.concatenate([padding, grid, padding], axis=1)
            obs_lanes = 3
            l0 = grid.shape[1] + self.observer_vehicle.lane_index[2] - obs_lanes // 2
            lf = grid.shape[1] + self.observer_vehicle.lane_index[2] + obs_lanes // 2
            clamped_grid = padded_grid[:, l0:lf+1, :]
            repeats = np.ones(clamped_grid.shape[0])
            repeats[np.array([0, -1])] += clamped_grid.shape[0]
            padded_grid = np.repeat(clamped_grid, repeats.astype(int), axis=0)
            obs_speeds = 3
            v0 = grid.shape[0] + self.observer_vehicle.speed_index - obs_speeds // 2
            vf = grid.shape[0] + self.observer_vehicle.speed_index + obs_speeds // 2
            clamped_grid = padded_grid[v0:vf + 1, :, :]
            return np.append(obs.flatten(),clamped_grid.flatten(),axis=0)
Example #3
0
 def observe(self):
     grid = compute_ttc_grid(self.env, time_quantization=1/self.env.config["policy_frequency"], horizon=self.horizon)
     padding = np.ones(np.shape(grid))
     padded_grid = np.concatenate([padding, grid, padding], axis=1)
     obs_lanes = 3
     l0 = grid.shape[1] + self.env.vehicle.lane_index[2] - obs_lanes // 2
     lf = grid.shape[1] + self.env.vehicle.lane_index[2] + obs_lanes // 2
     clamped_grid = padded_grid[:, l0:lf+1, :]
     repeats = np.ones(clamped_grid.shape[0])
     repeats[np.array([0, -1])] += clamped_grid.shape[0]
     padded_grid = np.repeat(clamped_grid, repeats.astype(int), axis=0)
     obs_velocities = 3
     v0 = grid.shape[0] + self.env.vehicle.velocity_index - obs_velocities // 2
     vf = grid.shape[0] + self.env.vehicle.velocity_index + obs_velocities // 2
     clamped_grid = padded_grid[v0:vf + 1, :, :]
     return clamped_grid