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)
Exemplo n.º 2
0
    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)