From 1d71ecb9a8c51eae55e3a1277cd747ec1742656f Mon Sep 17 00:00:00 2001 From: Marc Garcia Puig Date: Tue, 17 Dec 2019 19:40:27 +0100 Subject: [PATCH] Fixed NumLock error automatic_control.py (#2306) * Fixed NumLock error aut_cntrl.py * Updated Chaneglog & reduced unused imports --- CHANGELOG.md | 1 + PythonAPI/examples/automatic_control.py | 156 +----------------------- 2 files changed, 6 insertions(+), 151 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cc025fbe2..8fb573d437 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ * Fixed PointCloudIO `cout` that interfiered with other python modules * Better steering in manual control * Added Doxygen documentation online with automatic updates through Jenkins pipeline + * Fixed an error in `automatic_control.py` failing because the `Num Lock` key * Fixed client_bounding_boxes.py example script * Fixed materials and semantic segmentation issues regarding importing assets * Fixed ObstacleSensor to return HitDistance instead of HitRadius diff --git a/PythonAPI/examples/automatic_control.py b/PythonAPI/examples/automatic_control.py index a755f518f6..4752806e16 100755 --- a/PythonAPI/examples/automatic_control.py +++ b/PythonAPI/examples/automatic_control.py @@ -27,34 +27,8 @@ try: import pygame from pygame.locals import KMOD_CTRL - from pygame.locals import KMOD_SHIFT - from pygame.locals import K_0 - from pygame.locals import K_9 - from pygame.locals import K_BACKQUOTE - from pygame.locals import K_BACKSPACE - from pygame.locals import K_COMMA - from pygame.locals import K_DOWN from pygame.locals import K_ESCAPE - from pygame.locals import K_F1 - from pygame.locals import K_LEFT - from pygame.locals import K_PERIOD - from pygame.locals import K_RIGHT - from pygame.locals import K_SLASH - from pygame.locals import K_SPACE - from pygame.locals import K_TAB - from pygame.locals import K_UP - from pygame.locals import K_a - from pygame.locals import K_c - from pygame.locals import K_d - from pygame.locals import K_h - from pygame.locals import K_m - from pygame.locals import K_p from pygame.locals import K_q - from pygame.locals import K_r - from pygame.locals import K_s - from pygame.locals import K_w - from pygame.locals import K_MINUS - from pygame.locals import K_EQUALS except ImportError: raise RuntimeError('cannot import pygame, make sure pygame package is installed') @@ -189,143 +163,23 @@ def destroy(self): if actor is not None: actor.destroy() + # ============================================================================== # -- KeyboardControl ----------------------------------------------------------- # ============================================================================== class KeyboardControl(object): - def __init__(self, world, start_in_autopilot): - self._autopilot_enabled = start_in_autopilot - if isinstance(world.player, carla.Vehicle): - self._control = carla.VehicleControl() - world.player.set_autopilot(self._autopilot_enabled) - elif isinstance(world.player, carla.Walker): - self._control = carla.WalkerControl() - self._autopilot_enabled = False - self._rotation = world.player.get_transform().rotation - else: - raise NotImplementedError("Actor type not supported") - self._steer_cache = 0.0 + def __init__(self, world): world.hud.notification("Press 'H' or '?' for help.", seconds=4.0) - def parse_events(self, client, world, clock): + def parse_events(self): for event in pygame.event.get(): if event.type == pygame.QUIT: return True elif event.type == pygame.KEYUP: if self._is_quit_shortcut(event.key): return True - elif event.key == K_BACKSPACE: - world.restart() - elif event.key == K_F1: - world.hud.toggle_info() - elif event.key == K_h or (event.key == K_SLASH and pygame.key.get_mods() & KMOD_SHIFT): - world.hud.help.toggle() - elif event.key == K_TAB: - world.camera_manager.toggle_camera() - elif event.key == K_c and pygame.key.get_mods() & KMOD_SHIFT: - world.next_weather(reverse=True) - elif event.key == K_c: - world.next_weather() - elif event.key == K_BACKQUOTE: - world.camera_manager.next_sensor() - elif event.key > K_0 and event.key <= K_9: - world.camera_manager.set_sensor(event.key - 1 - K_0) - elif event.key == K_r and not (pygame.key.get_mods() & KMOD_CTRL): - world.camera_manager.toggle_recording() - elif event.key == K_r and (pygame.key.get_mods() & KMOD_CTRL): - if (world.recording_enabled): - client.stop_recorder() - world.recording_enabled = False - world.hud.notification("Recorder is OFF") - else: - client.start_recorder("manual_recording.rec") - world.recording_enabled = True - world.hud.notification("Recorder is ON") - elif event.key == K_p and (pygame.key.get_mods() & KMOD_CTRL): - # stop recorder - client.stop_recorder() - world.recording_enabled = False - # work around to fix camera at start of replaying - currentIndex = world.camera_manager.index - world.destroy_sensors() - # disable autopilot - self._autopilot_enabled = False - world.player.set_autopilot(self._autopilot_enabled) - world.hud.notification("Replaying file 'manual_recording.rec'") - # replayer - client.replay_file("manual_recording.rec", world.recording_start, 0, 0) - world.camera_manager.set_sensor(currentIndex) - elif event.key == K_MINUS and (pygame.key.get_mods() & KMOD_CTRL): - if pygame.key.get_mods() & KMOD_SHIFT: - world.recording_start -= 10 - else: - world.recording_start -= 1 - world.hud.notification("Recording start time is %d" % (world.recording_start)) - elif event.key == K_EQUALS and (pygame.key.get_mods() & KMOD_CTRL): - if pygame.key.get_mods() & KMOD_SHIFT: - world.recording_start += 10 - else: - world.recording_start += 1 - world.hud.notification("Recording start time is %d" % (world.recording_start)) - if isinstance(self._control, carla.VehicleControl): - if event.key == K_q: - self._control.gear = 1 if self._control.reverse else -1 - elif event.key == K_m: - self._control.manual_gear_shift = not self._control.manual_gear_shift - self._control.gear = world.player.get_control().gear - world.hud.notification('%s Transmission' % ( - 'Manual' if self._control.manual_gear_shift else 'Automatic')) - elif self._control.manual_gear_shift and event.key == K_COMMA: - self._control.gear = max(-1, self._control.gear - 1) - elif self._control.manual_gear_shift and event.key == K_PERIOD: - self._control.gear = self._control.gear + 1 - elif event.key == K_p and not (pygame.key.get_mods() & KMOD_CTRL): - self._autopilot_enabled = not self._autopilot_enabled - world.player.set_autopilot(self._autopilot_enabled) - world.hud.notification( - 'Autopilot %s' % ('On' if self._autopilot_enabled else 'Off')) - if not self._autopilot_enabled: - if isinstance(self._control, carla.VehicleControl): - keys = pygame.key.get_pressed() - if sum(keys) > 0: - self._parse_vehicle_keys(keys, clock.get_time()) - self._control.reverse = self._control.gear < 0 - world.player.apply_control(self._control) - elif isinstance(self._control, carla.WalkerControl): - self._parse_walker_keys(pygame.key.get_pressed(), clock.get_time()) - world.player.apply_control(self._control) - - def _parse_vehicle_keys(self, keys, milliseconds): - self._control.throttle = 1.0 if keys[K_UP] or keys[K_w] else 0.0 - steer_increment = 5e-4 * milliseconds - if keys[K_LEFT] or keys[K_a]: - self._steer_cache -= steer_increment - elif keys[K_RIGHT] or keys[K_d]: - self._steer_cache += steer_increment - else: - self._steer_cache = 0.0 - self._steer_cache = min(0.7, max(-0.7, self._steer_cache)) - self._control.steer = round(self._steer_cache, 1) - self._control.brake = 1.0 if keys[K_DOWN] or keys[K_s] else 0.0 - self._control.hand_brake = keys[K_SPACE] - - def _parse_walker_keys(self, keys, milliseconds): - self._control.speed = 0.0 - if keys[K_DOWN] or keys[K_s]: - self._control.speed = 0.0 - if keys[K_LEFT] or keys[K_a]: - self._control.speed = .01 - self._rotation.yaw -= 0.08 * milliseconds - if keys[K_RIGHT] or keys[K_d]: - self._control.speed = .01 - self._rotation.yaw += 0.08 * milliseconds - if keys[K_UP] or keys[K_w]: - self._control.speed = 5.556 if pygame.key.get_mods() & KMOD_SHIFT else 2.778 - self._control.jump = keys[K_SPACE] - self._rotation.yaw = round(self._rotation.yaw, 1) - self._control.direction = self._rotation.get_forward_vector() @staticmethod def _is_quit_shortcut(key): @@ -737,7 +591,7 @@ def game_loop(args): hud = HUD(args.width, args.height) world = World(client.get_world(), hud, args.filter) - controller = KeyboardControl(world, False) + controller = KeyboardControl(world) if args.agent == "Roaming": agent = RoamingAgent(world.player) @@ -750,7 +604,7 @@ def game_loop(args): clock = pygame.time.Clock() while True: - if controller.parse_events(client, world, clock): + if controller.parse_events(): return # as soon as the server is ready continue!