def reset(self, ego_vehicle: carla.Vehicle): if self._early_stop_monitor: self._early_stop_monitor.close() timeout_s = (FRAMES_BEFORE_MANUVEUR + FRAMES_AFTER_MANUVEUR) * DT self._early_stop_monitor = EarlyStopMonitor(ego_vehicle, timeout_s=timeout_s) self._route = random.choice(self._routes) min_speed, max_speed = self._speed_range_mps range_size = max_speed - min_speed speed_mps = min_speed + np.random.random() * range_size column_ahead_of_ego_m = np.random.randint(*self._env_vehicle_column_ahead_range_m) cmds = self._setup_controllers(self._start_lane_waypoint.transform.location, speed_mps, self._route, column_ahead_of_ego_m) ego_speed_mps = min_speed + np.random.random() * range_size t = Transform.from_carla_transform(self._start_lane_waypoint.transform) velocity = (t.orientation * ego_speed_mps).to_vector3(0).as_carla_vector3d() cmds.append(carla.command.ApplyTransform(ego_vehicle.id, transform=self._start_lane_waypoint.transform)) cmds.append(carla.command.ApplyVelocity(ego_vehicle.id, velocity)) if cmds: self._client.apply_batch_sync(cmds, do_tick=False) self._lane_alignment_monitor.reset() self._progress_monitor = LaneChangeProgressMonitor(self._world_map, start_lane_ids=self._start_lane_ids, target_lane_ids=self._target_lane_ids, lane_change_command=self._cmd_for_changing_lane)
def reset(self, ego_vehicle: carla.Vehicle): if self._carla_sync: self._carla_sync.close() self._carla_sync = RealTrafficVehiclesInCarla(self._client, self._world) if self._early_stop_monitor: self._early_stop_monitor.close() session_names = self._dataset.session_names if self._place_name: session_names = [ n for n in session_names if self._place_name.lower() in n ] epseed = os.environ.get("epseed") if epseed: epseed = int(epseed) random.seed(epseed) session_name = random.choice(session_names) # Another random is used inside ego_id, timestamp_start_s, timestamp_end_s = self._recording.reset( session_name=session_name, seed=epseed) self._sampled_dataset_excerpt_info = dict( episode_seed=epseed, session_name=session_name, timestamp_start_s=timestamp_start_s, timestamp_end_s=timestamp_end_s, original_veh_id=ego_id, ) env_vehicles = self._recording.step() other_vehicles = [v for v in env_vehicles if v.id != ego_id] self._carla_sync.step(other_vehicles) opendd_ego_vehicle = self._recording._env_vehicles[ego_id] opendd_ego_vehicle.set_end_of_trajectory_timestamp(timestamp_end_s) self._chauffeur = Chauffeur(opendd_ego_vehicle, self._recording.place.roads_utm) ego_vehicle.set_transform( opendd_ego_vehicle.transform_carla.as_carla_transform()) ego_vehicle.set_velocity( opendd_ego_vehicle.velocity.as_carla_vector3d()) self._current_progress = 0 trajectory_carla = [ t.as_carla_transform() for t in opendd_ego_vehicle.trajectory_carla ] self._trajectory = Trajectory(trajectory_carla=trajectory_carla) timeout_s = (timestamp_end_s - timestamp_start_s) * 1.5 timeout_s = min(timeout_s, self._recording._timestamps[-1] - timestamp_start_s) self._early_stop_monitor = EarlyStopMonitor( ego_vehicle, timeout_s=timeout_s, trajectory=self._trajectory, max_trajectory_distance_m=MAX_DISTANCE_FROM_REF_TRAJECTORY_M)
def reset(self, vehicle: carla.Vehicle): if self._ngsim_vehicles_in_carla: self._ngsim_vehicles_in_carla.close() self._ngsim_vehicles_in_carla = RealTrafficVehiclesInCarla(self._client, self._world) if self._early_stop_monitor: self._early_stop_monitor.close() timeout_s = (FRAMES_BEFORE_MANUVEUR + FRAMES_AFTER_MANUVEUR) * DT self._early_stop_monitor = EarlyStopMonitor(vehicle, timeout_s=timeout_s) while True: epseed = os.environ.get("epseed") if epseed: random.seed(int(epseed)) self._lane_change: LaneChangeInstant = random.choice(self._lane_change_instants) self._sampled_dataset_excerpt_info = dict( episode_seed=epseed, file_suffix=self._lane_change.timeslot.file_suffix, frame_start=self._lane_change.frame_start, original_veh_id=self._lane_change.vehicle_id ) frame_manuveur_start = max(self._lane_change.frame_start - FRAMES_BEFORE_MANUVEUR, 0) self._ngsim_recording.reset(timeslot=self._lane_change.timeslot, frame=frame_manuveur_start - 1) ngsim_vehicles = self._ngsim_recording.step() agent_ngsim_vehicle = find_first_matching(ngsim_vehicles, lambda v: v.id == self._lane_change.vehicle_id) t = agent_ngsim_vehicle.transform self._start_lane_waypoint = self._world_map.get_waypoint(t.as_carla_transform().location) self._target_lane_waypoint = { ChauffeurCommand.CHANGE_LANE_LEFT: self._start_lane_waypoint.get_left_lane, ChauffeurCommand.CHANGE_LANE_RIGHT: self._start_lane_waypoint.get_right_lane, }[self._lane_change.chauffeur_command]() if self._start_lane_waypoint and self._target_lane_waypoint: self._start_lane_ids = get_lane_ids(self._start_lane_waypoint) self._target_lane_ids = get_lane_ids(self._target_lane_waypoint) assert not (set(self._start_lane_ids) & set(self._target_lane_ids)) # ensure disjoint sets of ids break self._lane_alignment_monitor.reset() self._progress_monitor = LaneChangeProgressMonitor(self._world_map, start_lane_ids=self._start_lane_ids, target_lane_ids=self._target_lane_ids, lane_change_command=self._lane_change.chauffeur_command) vehicle.set_transform(t.as_carla_transform()) v = t.orientation * agent_ngsim_vehicle.speed * PIXELS_TO_METERS vehicle.set_velocity(v.to_vector3(0).as_carla_vector3d()) # meters per second, other_ngsim_vehicles = [v for v in ngsim_vehicles if v.id != self._lane_change.vehicle_id] self._ngsim_vehicles_in_carla.step(other_ngsim_vehicles)