Fixed NumLock error automatic_control.py (#2306)
* Fixed NumLock error aut_cntrl.py * Updated Chaneglog & reduced unused imports
This commit is contained in:
parent
b46117685e
commit
1d71ecb9a8
|
@ -27,6 +27,7 @@
|
||||||
* Fixed PointCloudIO `cout` that interfiered with other python modules
|
* Fixed PointCloudIO `cout` that interfiered with other python modules
|
||||||
* Better steering in manual control
|
* Better steering in manual control
|
||||||
* Added Doxygen documentation online with automatic updates through Jenkins pipeline
|
* 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 client_bounding_boxes.py example script
|
||||||
* Fixed materials and semantic segmentation issues regarding importing assets
|
* Fixed materials and semantic segmentation issues regarding importing assets
|
||||||
* Fixed ObstacleSensor to return HitDistance instead of HitRadius
|
* Fixed ObstacleSensor to return HitDistance instead of HitRadius
|
||||||
|
|
|
@ -27,34 +27,8 @@ import weakref
|
||||||
try:
|
try:
|
||||||
import pygame
|
import pygame
|
||||||
from pygame.locals import KMOD_CTRL
|
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_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_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:
|
except ImportError:
|
||||||
raise RuntimeError('cannot import pygame, make sure pygame package is installed')
|
raise RuntimeError('cannot import pygame, make sure pygame package is installed')
|
||||||
|
|
||||||
|
@ -189,143 +163,23 @@ class World(object):
|
||||||
if actor is not None:
|
if actor is not None:
|
||||||
actor.destroy()
|
actor.destroy()
|
||||||
|
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# -- KeyboardControl -----------------------------------------------------------
|
# -- KeyboardControl -----------------------------------------------------------
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
|
|
||||||
class KeyboardControl(object):
|
class KeyboardControl(object):
|
||||||
def __init__(self, world, start_in_autopilot):
|
def __init__(self, world):
|
||||||
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
|
|
||||||
world.hud.notification("Press 'H' or '?' for help.", seconds=4.0)
|
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():
|
for event in pygame.event.get():
|
||||||
if event.type == pygame.QUIT:
|
if event.type == pygame.QUIT:
|
||||||
return True
|
return True
|
||||||
elif event.type == pygame.KEYUP:
|
elif event.type == pygame.KEYUP:
|
||||||
if self._is_quit_shortcut(event.key):
|
if self._is_quit_shortcut(event.key):
|
||||||
return True
|
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
|
@staticmethod
|
||||||
def _is_quit_shortcut(key):
|
def _is_quit_shortcut(key):
|
||||||
|
@ -737,7 +591,7 @@ def game_loop(args):
|
||||||
|
|
||||||
hud = HUD(args.width, args.height)
|
hud = HUD(args.width, args.height)
|
||||||
world = World(client.get_world(), hud, args.filter)
|
world = World(client.get_world(), hud, args.filter)
|
||||||
controller = KeyboardControl(world, False)
|
controller = KeyboardControl(world)
|
||||||
|
|
||||||
if args.agent == "Roaming":
|
if args.agent == "Roaming":
|
||||||
agent = RoamingAgent(world.player)
|
agent = RoamingAgent(world.player)
|
||||||
|
@ -750,7 +604,7 @@ def game_loop(args):
|
||||||
|
|
||||||
clock = pygame.time.Clock()
|
clock = pygame.time.Clock()
|
||||||
while True:
|
while True:
|
||||||
if controller.parse_events(client, world, clock):
|
if controller.parse_events():
|
||||||
return
|
return
|
||||||
|
|
||||||
# as soon as the server is ready continue!
|
# as soon as the server is ready continue!
|
||||||
|
|
Loading…
Reference in New Issue