コード例 #1
0
    def _initialize_actors(self, config):
        """
        Custom initialization
        """
        first_vehicle_waypoint, _ = get_waypoint_in_distance(
            self._reference_waypoint, self._first_vehicle_location)
        second_vehicle_waypoint, _ = get_waypoint_in_distance(
            self._reference_waypoint, self._second_vehicle_location)
        second_vehicle_waypoint = second_vehicle_waypoint.get_left_lane()

        first_vehicle_transform = carla.Transform(
            first_vehicle_waypoint.transform.location,
            first_vehicle_waypoint.transform.rotation)
        second_vehicle_transform = carla.Transform(
            second_vehicle_waypoint.transform.location,
            second_vehicle_waypoint.transform.rotation)

        first_vehicle = CarlaDataProvider.request_new_actor(
            'vehicle.nissan.patrol', first_vehicle_transform)
        second_vehicle = CarlaDataProvider.request_new_actor(
            'vehicle.audi.tt', second_vehicle_transform)

        self.other_actors.append(first_vehicle)
        self.other_actors.append(second_vehicle)

        self._first_actor_transform = first_vehicle_transform
        self._second_actor_transform = second_vehicle_transform
コード例 #2
0
    def _initialize_actors(self, config):
        """
        Custom initialization
        """
        if self._randomize:
            self._distance = random.randint(low=10, high=80, size=3)
            self._distance = sorted(self._distance)
        else:
            self._distance = [14, 48, 74]

        self._reference_waypoint = self._map.get_waypoint(
            config.trigger_points[0].location)

        # Get the debris locations
        first_wp, _ = get_waypoint_in_distance(self._reference_waypoint,
                                               self._distance[0])
        first_ground_loc = self.world.ground_projection(
            first_wp.transform.location, 2)
        self.first_loc_prev = first_ground_loc.location if first_ground_loc else first_wp.transform.location

        second_wp, _ = get_waypoint_in_distance(self._reference_waypoint,
                                                self._distance[1])
        second_ground_loc = self.world.ground_projection(
            second_wp.transform.location, 2)
        self.second_loc_prev = second_ground_loc.location if second_ground_loc else second_wp.transform.location

        third_wp, _ = get_waypoint_in_distance(self._reference_waypoint,
                                               self._distance[2])
        third_ground_loc = self.world.ground_projection(
            third_wp.transform.location, 2)
        self.third_loc_prev = third_ground_loc.location if third_ground_loc else third_wp.transform.location

        # Get the debris transforms
        self.first_transform = carla.Transform(self.first_loc_prev,
                                               first_wp.transform.rotation)
        self.second_transform = carla.Transform(self.second_loc_prev,
                                                second_wp.transform.rotation)
        self.third_transform = carla.Transform(self.third_loc_prev,
                                               third_wp.transform.rotation)

        # Spawn the debris
        first_debris = CarlaDataProvider.request_new_actor(
            'static.prop.dirtdebris01', self.first_transform, rolename='prop')
        second_debris = CarlaDataProvider.request_new_actor(
            'static.prop.dirtdebris01', self.second_transform, rolename='prop')
        third_debris = CarlaDataProvider.request_new_actor(
            'static.prop.dirtdebris01', self.third_transform, rolename='prop')

        first_debris.set_transform(self.first_transform)
        second_debris.set_transform(self.second_transform)
        third_debris.set_transform(self.third_transform)

        # Remove their physics
        first_debris.set_simulate_physics(False)
        second_debris.set_simulate_physics(False)
        third_debris.set_simulate_physics(False)

        self.other_actors.append(first_debris)
        self.other_actors.append(second_debris)
        self.other_actors.append(third_debris)
コード例 #3
0
    def _initialize_actors(self, config):
        """
        Custom initialization
        """
        if self._randomize:
            self._distance = random.randint(low=10, high=80, size=3)
            self._distance = sorted(self._distance)
        else:
            self._distance = [14, 48, 74]
        first_loc, _ = get_location_in_distance_from_wp(
            self._reference_waypoint, self._distance[0])
        second_loc, _ = get_location_in_distance_from_wp(
            self._reference_waypoint, self._distance[1])
        third_loc, _ = get_location_in_distance_from_wp(
            self._reference_waypoint, self._distance[2])

        self.loc_list.extend([first_loc, second_loc, third_loc])
        self._dist_prop = [x - 2 for x in self._distance]

        self.first_loc_prev, _ = get_location_in_distance_from_wp(
            self._reference_waypoint, self._dist_prop[0])
        self.sec_loc_prev, _ = get_location_in_distance_from_wp(
            self._reference_waypoint, self._dist_prop[1])
        self.third_loc_prev, _ = get_location_in_distance_from_wp(
            self._reference_waypoint, self._dist_prop[2])

        self.first_transform = carla.Transform(self.first_loc_prev)
        self.sec_transform = carla.Transform(self.sec_loc_prev)
        self.third_transform = carla.Transform(self.third_loc_prev)
        self.first_transform = carla.Transform(
            carla.Location(self.first_loc_prev.x, self.first_loc_prev.y,
                           self.first_loc_prev.z))
        self.sec_transform = carla.Transform(
            carla.Location(self.sec_loc_prev.x, self.sec_loc_prev.y,
                           self.sec_loc_prev.z))
        self.third_transform = carla.Transform(
            carla.Location(self.third_loc_prev.x, self.third_loc_prev.y,
                           self.third_loc_prev.z))

        first_debris = CarlaDataProvider.request_new_actor(
            'static.prop.dirtdebris01', self.first_transform, 'prop')
        second_debris = CarlaDataProvider.request_new_actor(
            'static.prop.dirtdebris01', self.sec_transform, 'prop')
        third_debris = CarlaDataProvider.request_new_actor(
            'static.prop.dirtdebris01', self.third_transform, 'prop')

        first_debris.set_transform(self.first_transform)
        second_debris.set_transform(self.sec_transform)
        third_debris.set_transform(self.third_transform)

        self.obj.extend([first_debris, second_debris, third_debris])
        for debris in self.obj:
            debris.set_simulate_physics(False)

        self.other_actors.append(first_debris)
        self.other_actors.append(second_debris)
        self.other_actors.append(third_debris)
コード例 #4
0
    def _initialize_actors(self, config):
        """
        Custom initialization
        """
        first_actor_waypoint, _ = get_waypoint_in_distance(
            self._reference_waypoint, self._first_vehicle_location)
        second_actor_waypoint, _ = get_waypoint_in_distance(
            self._reference_waypoint, self._second_vehicle_location)
        second_actor_waypoint = second_actor_waypoint.get_left_lane()

        first_actor_transform = carla.Transform(
            first_actor_waypoint.transform.location,
            first_actor_waypoint.transform.rotation)
        if self._obstacle_type == 'vehicle':
            first_actor_model = 'vehicle.nissan.micra'
        else:
            first_actor_transform.rotation.yaw += 90
            first_actor_model = 'static.prop.streetbarrier'
            second_prop_waypoint = first_actor_waypoint.next(2.0)[0]
            position_yaw = second_prop_waypoint.transform.rotation.yaw + 90
            offset_location = carla.Location(
                0.50 * second_prop_waypoint.lane_width *
                math.cos(math.radians(position_yaw)),
                0.50 * second_prop_waypoint.lane_width *
                math.sin(math.radians(position_yaw)))
            second_prop_transform = carla.Transform(
                second_prop_waypoint.transform.location + offset_location,
                first_actor_transform.rotation)
            second_prop_actor = CarlaDataProvider.request_new_actor(
                first_actor_model, second_prop_transform)
            second_prop_actor.set_simulate_physics(True)
        first_actor = CarlaDataProvider.request_new_actor(
            first_actor_model, first_actor_transform)
        first_actor.set_simulate_physics(True)
        second_actor = CarlaDataProvider.request_new_actor(
            'vehicle.audi.tt', second_actor_waypoint.transform)

        self.other_actors.append(first_actor)
        self.other_actors.append(second_actor)
        if self._obstacle_type != 'vehicle':
            self.other_actors.append(second_prop_actor)

        self._source_transform = second_actor_waypoint.transform
        sink_waypoint = second_actor_waypoint.next(1)[0]
        while not sink_waypoint.is_intersection:
            sink_waypoint = sink_waypoint.next(1)[0]
        self._sink_location = sink_waypoint.transform.location

        self._first_actor_transform = first_actor_transform
        self._second_actor_transform = second_actor_waypoint.transform
        self._third_actor_transform = second_prop_transform
コード例 #5
0
    def test_all_xosc(self):
        """
        Load all examples OpenSCENARIO files
        """
        all_test_files = glob.glob('**/srunner/examples/*.xosc',
                                   recursive=True)

        for filename in all_test_files:
            client = carla.Client()
            config = OpenScenarioConfiguration(filename, client, {})
            self.assertTrue(config is not None)
            CarlaDataProvider.set_client(client)
            ego_vehicles = []
            for vehicle in config.ego_vehicles:
                ego_vehicles.append(
                    CarlaDataProvider.request_new_actor(
                        vehicle.model,
                        vehicle.transform,
                        vehicle.rolename,
                        color=vehicle.color,
                        actor_category=vehicle.category))

            scenario = OpenScenario(world=client.get_world(),
                                    ego_vehicles=ego_vehicles,
                                    config=config,
                                    config_file=filename,
                                    timeout=100000)
            self.assertTrue(scenario is not None)

            CarlaDataProvider.cleanup()
コード例 #6
0
    def _spawn_blocker(self, transform, orientation_yaw):
        """
        Spawn the blocker prop that blocks the vision from the egovehicle of the jaywalker
        :return:
        """
        # static object transform
        shift = 0.9
        x_ego = self._reference_waypoint.transform.location.x
        y_ego = self._reference_waypoint.transform.location.y
        x_cycle = transform.location.x
        y_cycle = transform.location.y
        x_static = x_ego + shift * (x_cycle - x_ego)
        y_static = y_ego + shift * (y_cycle - y_ego)

        spawn_point_wp = self.ego_vehicles[0].get_world().get_map(
        ).get_waypoint(transform.location)

        self.transform2 = carla.Transform(
            carla.Location(x_static, y_static,
                           spawn_point_wp.transform.location.z + 0.3),
            carla.Rotation(yaw=orientation_yaw + 180))

        static = CarlaDataProvider.request_new_actor(
            'static.prop.vendingmachine', self.transform2)
        static.set_simulate_physics(enabled=False)

        return static
コード例 #7
0
 def _initialize_actors(self, config):
     # add actors from xml file
     for actor in config.other_actors:
         vehicle = CarlaDataProvider.request_new_actor(
             actor.model, actor.transform)
         self.other_actors.append(vehicle)
         vehicle.set_simulate_physics(enabled=True)
コード例 #8
0
    def _initialize_actors(self, config):

        # add actors from xml file
        for actor in config.other_actors:
            vehicle = CarlaDataProvider.request_new_actor(
                actor.model, actor.transform)
            self.other_actors.append(vehicle)
            vehicle.set_simulate_physics(enabled=False)

        # fast vehicle, tesla
        # transform visible
        fast_car_waypoint, _ = get_waypoint_in_distance(
            self._reference_waypoint, self._fast_vehicle_distance)
        self.fast_car_visible = carla.Transform(
            carla.Location(fast_car_waypoint.transform.location.x,
                           fast_car_waypoint.transform.location.y,
                           fast_car_waypoint.transform.location.z + 1),
            fast_car_waypoint.transform.rotation)

        # slow vehicle, vw
        # transform visible
        slow_car_waypoint, _ = get_waypoint_in_distance(
            self._reference_waypoint, self._slow_vehicle_distance)
        self.slow_car_visible = carla.Transform(
            carla.Location(slow_car_waypoint.transform.location.x,
                           slow_car_waypoint.transform.location.y,
                           slow_car_waypoint.transform.location.z),
            slow_car_waypoint.transform.rotation)
コード例 #9
0
    def _prepare_ego_vehicles(self, ego_vehicles, wait_for_ego_vehicles=False):
        """
        Spawn or update the ego vehicles
        """

        if not wait_for_ego_vehicles:
            for vehicle in ego_vehicles:
                self.ego_vehicles.append(CarlaDataProvider.request_new_actor(vehicle.model,
                                                                             vehicle.transform,
                                                                             vehicle.rolename,
                                                                             color=vehicle.color,
                                                                             vehicle_category=vehicle.category))

        else:
            ego_vehicle_missing = True
            while ego_vehicle_missing:
                self.ego_vehicles = []
                ego_vehicle_missing = False
                for ego_vehicle in ego_vehicles:
                    ego_vehicle_found = False
                    carla_vehicles = CarlaDataProvider.get_world().get_actors().filter('vehicle.*')
                    for carla_vehicle in carla_vehicles:
                        if carla_vehicle.attributes['role_name'] == ego_vehicle.rolename:
                            ego_vehicle_found = True
                            self.ego_vehicles.append(carla_vehicle)
                            break
                    if not ego_vehicle_found:
                        ego_vehicle_missing = True
                        break

            for i, _ in enumerate(self.ego_vehicles):
                self.ego_vehicles[i].set_transform(ego_vehicles[i].transform)

        # sync state
        CarlaDataProvider.get_world().tick()
コード例 #10
0
    def _spawn_adversary(self, transform, orientation_yaw):

        self._time_to_reach *= self._num_lane_changes

        if self._adversary_type is False:
            self._walker_yaw = orientation_yaw
            # self._other_actor_target_velocity = 3 + (0.4 * self._num_lane_changes)
            walker = CarlaDataProvider.request_new_actor('walker.*', transform)
            adversary = walker
        else:
            # self._other_actor_target_velocity = self._other_actor_target_velocity * self._num_lane_changes
            first_vehicle = CarlaDataProvider.request_new_actor(
                'vehicle.diamondback.century', transform)
            first_vehicle.set_simulate_physics(enabled=False)
            adversary = first_vehicle

        return adversary
コード例 #11
0
    def _initialize_actors(self, config):
        """
        Custom initialization
        """

        first_actor_waypoint, _ = get_waypoint_in_distance(
            self._reference_waypoint, self._first_actor_location)
        second_actor_waypoint, _ = get_waypoint_in_distance(
            self._reference_waypoint, self._second_actor_location)
        first_actor_transform = carla.Transform(
            carla.Location(first_actor_waypoint.transform.location.x,
                           first_actor_waypoint.transform.location.y,
                           first_actor_waypoint.transform.location.z - 500),
            first_actor_waypoint.transform.rotation)
        self._first_actor_transform = carla.Transform(
            carla.Location(first_actor_waypoint.transform.location.x,
                           first_actor_waypoint.transform.location.y,
                           first_actor_waypoint.transform.location.z + 1),
            first_actor_waypoint.transform.rotation)
        yaw_1 = second_actor_waypoint.transform.rotation.yaw + 90
        second_actor_transform = carla.Transform(
            carla.Location(second_actor_waypoint.transform.location.x,
                           second_actor_waypoint.transform.location.y,
                           second_actor_waypoint.transform.location.z - 500),
            carla.Rotation(second_actor_waypoint.transform.rotation.pitch,
                           yaw_1,
                           second_actor_waypoint.transform.rotation.roll))
        self._second_actor_transform = carla.Transform(
            carla.Location(second_actor_waypoint.transform.location.x,
                           second_actor_waypoint.transform.location.y,
                           second_actor_waypoint.transform.location.z + 1),
            carla.Rotation(second_actor_waypoint.transform.rotation.pitch,
                           yaw_1,
                           second_actor_waypoint.transform.rotation.roll))

        first_actor = CarlaDataProvider.request_new_actor(
            'vehicle.nissan.patrol', first_actor_transform)
        second_actor = CarlaDataProvider.request_new_actor(
            'vehicle.diamondback.century', second_actor_transform)

        first_actor.set_simulate_physics(enabled=False)
        second_actor.set_simulate_physics(enabled=False)
        self.other_actors.append(first_actor)
        self.other_actors.append(second_actor)
コード例 #12
0
 def _initialize_actors(self, config):
     """
     Custom initialization
     """
     waypoint, _ = get_waypoint_in_distance(self._reference_waypoint,
                                            self._first_vehicle_location)
     transform = waypoint.transform
     transform.location.z += 0.5
     first_vehicle = CarlaDataProvider.request_new_actor(
         'vehicle.nissan.patrol', transform)
     self.other_actors.append(first_vehicle)
コード例 #13
0
    def _update_ego_vehicle(self):
        """
        Set/Update the start position of the ego_vehicle
        """
        # move ego to correct position
        elevate_transform = self.route[0][0]
        elevate_transform.location.z += 0.5

        ego_vehicle = CarlaDataProvider.request_new_actor(
            'vehicle.lincoln.mkz2017', elevate_transform, rolename='hero')

        return ego_vehicle
コード例 #14
0
 def _initialize_actors(self, config):
     """
     Custom initialization
     """
     self._other_actor_transform = config.other_actors[0].transform
     first_vehicle_transform = carla.Transform(
         carla.Location(config.other_actors[0].transform.location.x,
                        config.other_actors[0].transform.location.y,
                        config.other_actors[0].transform.location.z),
         config.other_actors[0].transform.rotation)
     first_vehicle = CarlaDataProvider.request_new_actor(
         config.other_actors[0].model, first_vehicle_transform)
     self.other_actors.append(first_vehicle)
コード例 #15
0
ファイル: experience.py プロジェクト: PDillis/cexp
    def _spawn_ego_car(self, start_transform):
        """
        Spawn or update all scenario actors according to
        a certain start position.
        """
        # If ego_vehicle already exists, just update location
        # Otherwise spawn ego vehicle
        self._ego_actor = CarlaDataProvider.request_new_actor(
            self._vehicle_model, start_transform)

        CarlaDataProvider.set_ego_vehicle_route(
            convert_transform_to_location(self._route))
        logging.debug("Created Ego Vehicle")
コード例 #16
0
    def _create_construction_setup(self, start_transform, lane_width):
        """
        Create Construction Setup
        """

        _initial_offset = {'cones': {'yaw': 180, 'k': lane_width / 2.0},
                           'warning_sign': {'yaw': 180, 'k': 5, 'z': 0},
                           'debris': {'yaw': 0, 'k': 2, 'z': 1}}
        _prop_names = {'warning_sign': 'static.prop.trafficwarning',
                       'debris': 'static.prop.dirtdebris02'}

        _perp_angle = 90
        _setup = {'lengths': [0, 6, 3], 'offsets': [0, 2, 1]}
        _z_increment = 0.1

        ############################# Traffic Warning and Debris ##############
        for key, value in _initial_offset.items():
            if key == 'cones':
                continue
            transform = carla.Transform(
                start_transform.location,
                start_transform.rotation)
            transform.rotation.yaw += value['yaw']
            transform.location += value['k'] * \
                transform.rotation.get_forward_vector()
            transform.location.z += value['z']
            transform.rotation.yaw += _perp_angle
            static = CarlaDataProvider.request_new_actor(
                _prop_names[key], transform)
            static.set_simulate_physics(True)
            self.other_actors.append(static)

        ############################# Cones ###################################
        side_transform = carla.Transform(
            start_transform.location,
            start_transform.rotation)
        side_transform.rotation.yaw += _perp_angle
        side_transform.location -= _initial_offset['cones']['k'] * \
            side_transform.rotation.get_forward_vector()
        side_transform.rotation.yaw += _initial_offset['cones']['yaw']

        for i in range(len(_setup['lengths'])):
            self.create_cones_side(
                side_transform,
                forward_vector=side_transform.rotation.get_forward_vector(),
                z_inc=_z_increment,
                cone_length=_setup['lengths'][i],
                cone_offset=_setup['offsets'][i])
            side_transform.location += side_transform.get_forward_vector() * \
                _setup['lengths'][i] * _setup['offsets'][i]
            side_transform.rotation.yaw += _perp_angle
コード例 #17
0
    def _initialize_actors(self, config):
        """
        Custom initialization
        """

        # Get the waypoint right after the junction
        waypoint = generate_target_waypoint_in_route(self._reference_waypoint, self._ego_route)

        # Move a certain distance to the front
        start_distance = 8
        waypoint = waypoint.next(start_distance)[0]

        # Get the last driving lane to the right
        waypoint, self._num_lane_changes = get_right_driving_lane(waypoint)
        # And for synchrony purposes, move to the front a bit
        added_dist = self._num_lane_changes

        while True:

            # Try to spawn the actor
            try:
                self._other_actor_transform = get_opponent_transform(added_dist, waypoint, self._trigger_location)
                # addition
                self._other_actor_transform.location.x += self.customized_data['dx']
                self._other_actor_transform.location.y += self.customized_data['dy']
                self._other_actor_transform.rotation.yaw += self.customized_data['dyaw']

                first_vehicle = CarlaDataProvider.request_new_actor(
                    self.customized_data['actor_type'], self._other_actor_transform)
                first_vehicle.set_simulate_physics(enabled=False)
                break

            # Move the spawning point a bit and try again
            except RuntimeError as r:
                # In the case there is an object just move a little bit and retry
                print(" Base transform is blocking objects ", self._other_actor_transform)
                added_dist += 0.5
                self._spawn_attempted += 1
                if self._spawn_attempted >= self._number_of_attempts:
                    raise r

        # Set the transform to -500 z after we are able to spawn it
        actor_transform = carla.Transform(
            carla.Location(self._other_actor_transform.location.x,
                           self._other_actor_transform.location.y,
                           self._other_actor_transform.location.z - 500),
            self._other_actor_transform.rotation)
        first_vehicle.set_transform(actor_transform)
        first_vehicle.set_simulate_physics(enabled=False)

        self.other_actors.append(first_vehicle)
コード例 #18
0
    def _update_ego_vehicle(self):
        """
        Set/Update the start position of the ego_vehicle
        """
        # move ego to correct position
        elevate_transform = self.route[0][0]
        elevate_transform.location.z += 0.5

        ego_vehicle = CarlaDataProvider.request_new_actor(
            'vehicle.lincoln.mkz2017', elevate_transform, rolename='hero')
        # self.tm.vehicle_percentage_speed_difference(ego_vehicle, -100)
        # self.tm.global_percentage_speed_difference(-100)

        return ego_vehicle
コード例 #19
0
 def _initialize_actors(self, config):
     """
     Custom initialization
     """
     self._other_actor_transform = config.other_actors[0].transform
     first_vehicle_transform = carla.Transform(
         carla.Location(config.other_actors[0].transform.location.x,
                        config.other_actors[0].transform.location.y,
                        config.other_actors[0].transform.location.z - 500),
         config.other_actors[0].transform.rotation)
     first_vehicle = CarlaDataProvider.request_new_actor(config.other_actors[0].model, self._other_actor_transform)
     first_vehicle.set_transform(first_vehicle_transform)
     first_vehicle.set_simulate_physics(enabled=False)
     self.other_actors.append(first_vehicle)
コード例 #20
0
    def _update_ego_vehicle(self):
        """
        Set/Update the start position of the ego_vehicle
        """
        # move ego to correct position
        elevate_transform = self.route[0][0]
        elevate_transform.location.z += 0.5

        ego_vehicle = CarlaDataProvider.request_new_actor(
            'vehicle.lincoln.mkz2017', elevate_transform, rolename='hero')

        # change physics
        physics_control = ego_vehicle.get_physics_control()
        physics_control.wheels = self.config.wheels_physics
        ego_vehicle.apply_physics_control(physics_control)

        return ego_vehicle
コード例 #21
0
    def _update_ego_vehicle(self):
        """
        Set/Update the start position of the ego_vehicle
        """
        # move ego to correct position
        elevate_transform = self.route[0][0]
        elevate_transform.location.z += 0.5

        ego_vehicle = CarlaDataProvider.request_new_actor(
            'vehicle.lincoln.mkz2017', elevate_transform, rolename='hero')

        spectator = CarlaDataProvider.get_world().get_spectator()
        ego_trans = ego_vehicle.get_transform()
        spectator.set_transform(
            carla.Transform(ego_trans.location + carla.Location(z=50),
                            carla.Rotation(pitch=-90)))

        return ego_vehicle
コード例 #22
0
    def update(self):
        if not self.distance_gap:
            self.distance_gap = self._threshold

        new_status = py_trees.common.Status.RUNNING
        # self._threshold = 20
        if self._actor_limit > 0:
            world_actors = self._world.get_actors()
            vehicle_list = world_actors.filter('vehicle.*')
            vehicles = []
            for veh in vehicle_list:
                if veh.attributes['role_name'] == 'scenario':  # todo fix role_name if set by args
                    vehicles.append(veh)

            spawn_point_blocked = False
            if (self._last_blocking_actor and
                    self._spawn_point.location.distance(self._last_blocking_actor.get_location()) < self.distance_gap):
                spawn_point_blocked = True

            if not spawn_point_blocked:
                # for actor in world_actors:
                for actor in vehicles:
                    if self._spawn_point.location.distance(actor.get_location()) < self.distance_gap:
                        spawn_point_blocked = True
                        self._last_blocking_actor = actor
                        break

            if not spawn_point_blocked:
                try:
                    new_actor = CarlaDataProvider.request_new_actor(
                        np.random.choice(self._actor_types), self._spawn_point)
                    self._actor_limit -= 1
                    self._queue.put(new_actor)

                    set_vehicle_speed(new_actor, self.init_speed / 3.6)

                    # update distance gap after generating a new actor
                    if self.randomize:
                        sigma = 0.1
                        self.distance_gap = random.uniform(self._threshold * (1-sigma), self._threshold * (1+sigma))

                except:  # pylint: disable=bare-except
                    print("ActorSource unable to spawn actor")
        return new_status
コード例 #23
0
    def _prepare_ego_vehicles(self, ego_vehicles):
        """
        Spawn or update the ego vehicles
        """

        if not self._args.waitForEgo:
            for vehicle in ego_vehicles:
                self.ego_vehicles.append(
                    CarlaDataProvider.request_new_actor(
                        vehicle.model,
                        vehicle.transform,
                        vehicle.rolename,
                        color=vehicle.color,
                        actor_category=vehicle.category))
        else:
            ego_vehicle_missing = True
            while ego_vehicle_missing:
                self.ego_vehicles = []
                ego_vehicle_missing = False
                for ego_vehicle in ego_vehicles:
                    ego_vehicle_found = False
                    carla_vehicles = CarlaDataProvider.get_world().get_actors(
                    ).filter('vehicle.*')
                    for carla_vehicle in carla_vehicles:
                        if carla_vehicle.attributes[
                                'role_name'] == ego_vehicle.rolename:
                            ego_vehicle_found = True
                            self.ego_vehicles.append(carla_vehicle)
                            break
                    if not ego_vehicle_found:
                        ego_vehicle_missing = True
                        break

            for i, _ in enumerate(self.ego_vehicles):
                self.ego_vehicles[i].set_transform(ego_vehicles[i].transform)
                CarlaDataProvider.register_actor(self.ego_vehicles[i])

        # self.traffic_manager.vehicle_percentage_speed_difference(-70)

        # sync state
        if CarlaDataProvider.is_sync_mode():
            self.world.tick()
        else:
            self.world.wait_for_tick()
コード例 #24
0
ファイル: new_scenario.py プロジェクト: ll7/scenario_runner
    def _initialize_actors(self, config):
        """
        Custom initialization
        """

        first_vehicle_waypoint, _ = get_waypoint_in_distance(self._reference_waypoint, self._first_vehicle_location)
        self._other_actor_transform = carla.Transform(
            carla.Location(first_vehicle_waypoint.transform.location.x,
                           first_vehicle_waypoint.transform.location.y,
                           first_vehicle_waypoint.transform.location.z + 1),
            first_vehicle_waypoint.transform.rotation)
        first_vehicle_transform = carla.Transform(
            carla.Location(self._other_actor_transform.location.x,
                           self._other_actor_transform.location.y,
                           self._other_actor_transform.location.z - 500),
            self._other_actor_transform.rotation)
        first_vehicle = CarlaDataProvider.request_new_actor('vehicle.nissan.patrol', first_vehicle_transform)
        first_vehicle.set_simulate_physics(enabled=False)
        self.other_actors.append(first_vehicle)
コード例 #25
0
    def _initialize_actors(self, config):
        """
        Custom initialization
        """
        # Get the waypoint right after the junction
        waypoint = self._get_target_waypoint()
        move_dist = self._start_distance
        while self._number_of_attempts > 0:
            # Move to the front
            waypoint = waypoint.next(move_dist)[0]
            self._collision_wp = waypoint

            # Move to the right
            sidewalk_waypoint = waypoint
            while sidewalk_waypoint.lane_type != carla.LaneType.Sidewalk:
                right_wp = sidewalk_waypoint.get_right_lane()
                if right_wp is None:
                    break  # No more right lanes
                sidewalk_waypoint = right_wp

            # Get the adversary transform and spawn it
            self._adversary_transform = get_sidewalk_transform(sidewalk_waypoint)
            adversary = CarlaDataProvider.request_new_actor('vehicle.diamondback.century', self._adversary_transform)
            if adversary is None:
                self._number_of_attempts -= 1
                move_dist = self._retry_dist
                self._spawn_dist += self._retry_dist
                continue

            # Both actors where summoned, end
            break

        if self._number_of_attempts == 0:
            raise Exception("Couldn't find viable position for the adversary actor")

        if isinstance(adversary, carla.Vehicle):
            adversary.apply_control(carla.VehicleControl(hand_brake=True))
        self.other_actors.append(adversary)
コード例 #26
0
    def _initialize_actors(self, config):

        # direction of lane, on which other_actor is driving before lane change
        if 'LEFT' in self._config.name.upper():
            self._direction = 'left'

        if 'RIGHT' in self._config.name.upper():
            self._direction = 'right'

        # add actors from xml file
        for actor in config.other_actors:
            vehicle = CarlaDataProvider.request_new_actor(
                actor.model, actor.transform)
            self.other_actors.append(vehicle)
            vehicle.set_simulate_physics(enabled=False)

        # transform visible
        other_actor_transform = self.other_actors[0].get_transform()
        self._transform_visible = carla.Transform(
            carla.Location(other_actor_transform.location.x,
                           other_actor_transform.location.y,
                           other_actor_transform.location.z + 105),
            other_actor_transform.rotation)
コード例 #27
0
    def _initialize_actors(self, config):
        """
        Custom initialization
        """

        # Get the waypoint left after the junction
        waypoint = generate_target_waypoint(self._reference_waypoint, 1)

        while True:

            # Try to spawn the actor
            try:
                self._other_actor_transform = waypoint.transform
                first_vehicle = CarlaDataProvider.request_new_actor(
                    'vehicle.*', self._other_actor_transform)
                first_vehicle.set_simulate_physics(enabled=False)
                break

            # Move the spawning point a bit and try again
            except RuntimeError as r:
                # In the case there is an object just move a little bit and retry
                waypoint = waypoint.next(1)[0]
                self._spawn_attempted += 1
                if self._spawn_attempted >= self._number_of_attempts:
                    raise r

        # Set the transform to -500 z after we are able to spawn it
        actor_transform = carla.Transform(
            carla.Location(self._other_actor_transform.location.x,
                           self._other_actor_transform.location.y,
                           self._other_actor_transform.location.z - 500),
            self._other_actor_transform.rotation)

        first_vehicle.set_transform(actor_transform)

        first_vehicle.set_simulate_physics(enabled=False)
        self.other_actors.append(first_vehicle)
コード例 #28
0
 def _initialize_actors(self, config):
     """
     Custom initialization
     """
     _start_distance = 40
     lane_width = self._reference_waypoint.lane_width
     location, _ = get_location_in_distance_from_wp(
         self._reference_waypoint, _start_distance)
     waypoint = self._wmap.get_waypoint(location)
     offset = {"orientation": 270, "position": 90, "z": 0.4, "k": 0.2}
     position_yaw = waypoint.transform.rotation.yaw + offset['position']
     orientation_yaw = waypoint.transform.rotation.yaw + offset[
         'orientation']
     offset_location = carla.Location(
         offset['k'] * lane_width * math.cos(math.radians(position_yaw)),
         offset['k'] * lane_width * math.sin(math.radians(position_yaw)))
     location += offset_location
     location.z += offset['z']
     self.transform = carla.Transform(location,
                                      carla.Rotation(yaw=orientation_yaw))
     static = CarlaDataProvider.request_new_actor('static.prop.container',
                                                  self.transform)
     static.set_simulate_physics(True)
     self.other_actors.append(static)
コード例 #29
0
    def create_cones_side(
            self,
            start_transform,
            forward_vector,
            z_inc=0,
            cone_length=0,
            cone_offset=0):
        """
        Creates One Side of the Cones
        """
        _dist = 0
        while _dist < (cone_length * cone_offset):
            # Move forward
            _dist += cone_offset
            forward_dist = carla.Vector3D(0, 0, 0) + forward_vector * _dist

            location = start_transform.location + forward_dist
            location.z += z_inc
            transform = carla.Transform(location, start_transform.rotation)

            cone = CarlaDataProvider.request_new_actor(
                'static.prop.constructioncone', transform)
            cone.set_simulate_physics(True)
            self.other_actors.append(cone)
コード例 #30
0
ファイル: intersection.py プロジェクト: fabriquant/AutoFuzz
    def _request_actor(self,
                       actor_category,
                       actor_model,
                       waypoint_transform,
                       simulation_enabled=False,
                       color=None,
                       bounds=None,
                       is_waypoint_follower=None,
                       center_transform=None):
        def bound_xy(generated_transform, bounds):
            if bounds:
                x_min, x_max, y_min, y_max = bounds
                g_x = generated_transform.location.x
                g_y = generated_transform.location.y
                if center_transform:
                    c_x = center_transform.location.x
                    c_y = center_transform.location.y
                    x_min += c_x
                    x_max += c_x
                    y_min += c_y
                    y_max += c_y
                generated_transform.location.x = np.max([g_x, x_min])
                generated_transform.location.x = np.min([g_x, x_max])
                generated_transform.location.y = np.max([g_y, y_min])
                generated_transform.location.y = np.min([g_y, y_max])
                # print('bounds', x_min, x_max, y_min, y_max, g_x, g_y, center_transform)

        # If we fail too many times, this will break and the session will be assigned the lowest default score. We do this to disencourage samples that result in invalid locations

        # Number of attempts made so far
        status = 'success'
        is_success = False

        generated_transform = copy_transform(waypoint_transform)

        if actor_category != 'vehicle':
            g_x = generated_transform.location.x
            g_y = generated_transform.location.y
            g_yaw = generated_transform.rotation.yaw
            for i in range(self._number_of_attempts):
                for j in range(2):
                    try:
                        added_dist = i * 0.5
                        cur_x = g_x + np.random.uniform(0, added_dist)
                        cur_y = g_y + np.random.uniform(0, added_dist)
                        cur_t = create_transform(cur_x, cur_y, 0, 0, g_yaw, 0)
                        generated_transform.location.y += np.random.uniform(
                            0, 1)
                        bound_xy(generated_transform, bounds)
                        actor_object = CarlaDataProvider.request_new_actor(
                            model=actor_model,
                            spawn_point=cur_t,
                            color=color,
                            actor_category=actor_category)
                        is_success = True
                        break
                    except (RuntimeError, AttributeError) as r:
                        status = 'fail_1_' + str(i)
                if is_success:
                    break

        if actor_category == 'vehicle' or status == 'fail_1_' + str(
                self._number_of_attempts):

            for i in range(self._number_of_attempts):
                try:
                    added_dist = i * 0.5
                    waypoint = self._wmap.get_waypoint(
                        waypoint_transform.location,
                        project_to_road=True,
                        lane_type=carla.LaneType.Any)
                    generated_transform = get_generated_transform(
                        added_dist, waypoint)
                    # if actor_category == 'vehicle' and is_waypoint_follower:
                    generated_transform.rotation.yaw = waypoint_transform.rotation.yaw

                    bound_xy(generated_transform, bounds)
                    actor_object = CarlaDataProvider.request_new_actor(
                        model=actor_model,
                        spawn_point=generated_transform,
                        color=color,
                        actor_category=actor_category)

                    is_success = True
                    break
                except (RuntimeError, AttributeError) as r:
                    status = 'fail_2_' + str(i)

        if is_success:
            actor_object.set_simulate_physics(enabled=simulation_enabled)
        else:
            actor_object = None
            generated_transform = None
            status = 'fail_all'

        if status != 'success' and is_success:
            print('{} {} {} ({:.2f},{:.2f},{:.2f})->({:.2f},{:.2f},{:.2f})'.
                  format(status, actor_model, is_waypoint_follower,
                         waypoint_transform.location.x,
                         waypoint_transform.location.y,
                         waypoint_transform.rotation.yaw,
                         generated_transform.location.x,
                         generated_transform.location.y,
                         waypoint_transform.rotation.yaw))
        else:
            print(status, actor_category, actor_model, is_waypoint_follower)

        return actor_object, generated_transform