| 155 | |
| 156 | |
| 157 | class World(object): |
| 158 | def __init__(self, carla_world, hud, args): |
| 159 | self.world = carla_world |
| 160 | self.actor_role_name = args.rolename |
| 161 | try: |
| 162 | self.map = self.world.get_map() |
| 163 | except RuntimeError as error: |
| 164 | print('RuntimeError: {}'.format(error)) |
| 165 | print(' The server could not send the OpenDRIVE (.xodr) file:') |
| 166 | print(' Make sure it exists, has the same name of your town, and is correct.') |
| 167 | sys.exit(1) |
| 168 | self.hud = hud |
| 169 | self.player = None |
| 170 | self.collision_sensor = None |
| 171 | self.lane_invasion_sensor = None |
| 172 | self.gnss_sensor = None |
| 173 | self.imu_sensor = None |
| 174 | self.radar_sensor = None |
| 175 | self.camera_manager = None |
| 176 | self._weather_presets = find_weather_presets() |
| 177 | self._weather_index = 0 |
| 178 | self._actor_filter = args.filter |
| 179 | self._gamma = args.gamma |
| 180 | self.restart() |
| 181 | self.world.on_tick(hud.on_world_tick) |
| 182 | self.recording_enabled = False |
| 183 | self.recording_start = 0 |
| 184 | |
| 185 | def restart(self): |
| 186 | self.player_max_speed = 1.589 |
| 187 | self.player_max_speed_fast = 3.713 |
| 188 | # Keep same camera config if the camera manager exists. |
| 189 | cam_index = self.camera_manager.index if self.camera_manager is not None else 0 |
| 190 | cam_pos_index = self.camera_manager.transform_index if self.camera_manager is not None else 0 |
| 191 | # Get a random blueprint. |
| 192 | blueprint = random.choice(self.world.get_blueprint_library().filter(self._actor_filter)) |
| 193 | blueprint.set_attribute('role_name', self.actor_role_name) |
| 194 | if blueprint.has_attribute('color'): |
| 195 | color = random.choice(blueprint.get_attribute('color').recommended_values) |
| 196 | blueprint.set_attribute('color', color) |
| 197 | if blueprint.has_attribute('driver_id'): |
| 198 | driver_id = random.choice(blueprint.get_attribute('driver_id').recommended_values) |
| 199 | blueprint.set_attribute('driver_id', driver_id) |
| 200 | if blueprint.has_attribute('is_invincible'): |
| 201 | blueprint.set_attribute('is_invincible', 'true') |
| 202 | # set the max speed |
| 203 | if blueprint.has_attribute('speed'): |
| 204 | self.player_max_speed = float(blueprint.get_attribute('speed').recommended_values[1]) |
| 205 | self.player_max_speed_fast = float(blueprint.get_attribute('speed').recommended_values[2]) |
| 206 | else: |
| 207 | print("No recommended values for 'speed' attribute") |
| 208 | # Spawn the player. |
| 209 | if self.player is not None: |
| 210 | spawn_point = self.player.get_transform() |
| 211 | spawn_point.location.z += 2.0 |
| 212 | spawn_point.rotation.roll = 0.0 |
| 213 | spawn_point.rotation.pitch = 0.0 |
| 214 | self.destroy() |