Select Git revision
steering_wheel.py 2.34 KiB
""" Steering wheel """
import pygame
DIRECTION=0
THROTTLE=1
BRAKES=2
INPUTS=3
OFFSET = 2.0
class ManualSteeringWheel:
""" Steering wheel """
axis_count = 0.0
joystick = None
direction = 0.0
throttle = 0.0
brakes = 0.0
reverse = False
def __init__(self):
self.joystick = pygame.joystick.Joystick(0)
self.joystick.init()
self.axis_count = self.joystick.get_numaxes()
def get_direction(self, update=True):
""" Update and return direction. """
if update:
pygame.event.get()
self.direction = self.joystick.get_axis(DIRECTION)
return self.direction
def get_throttle(self, update=True):
""" Update and return throttle."""
if update:
pygame.event.get()
self.throttle = (OFFSET - (self.joystick.get_axis(THROTTLE) + 1.0)) / OFFSET
return self.throttle
def get_brakes(self, update=True):
""" Update and return brakes. """
if update:
pygame.event.get()
self.brakes = (OFFSET - (self.joystick.get_axis(BRAKES) + 1.0)) / OFFSET
if self.brakes < 0.01:
self.brakes = 0.0
return self.brakes
def update_controls(self):
""" Poll for pygame events. """
self.get_direction(update=False)
self.get_throttle(update=False)
self.get_brakes(update=False)
def get_action(self):
return [self.throttle, self.brakes, self.direction, self.reverse]
class Controller(ManualSteeringWheel):
running = True
def is_running(self):
return self.running
def on_update(self):
for event in pygame.event.get():
if event.type == pygame.KEYUP:
if event.key == pygame.K_r:
self.reverse = True
elif event.key == pygame.K_d:
self.reverse = False
elif event.key == pygame.K_q:
self.running = False
self.update_controls()
if __name__ == '__main__':
pygame.init()
clock = pygame.time.Clock()
sw = ManualSteeringWheel()
while True:
# Receive all occured events
print("")
print("Direction: " + str(sw.get_direction()))
print("Speed: " + str(sw.get_throttle()))
print("Brakes: " + str(sw.get_brakes()))
clock.tick(2)