-
Notifications
You must be signed in to change notification settings - Fork 2
/
stearingcontrol.py
112 lines (87 loc) · 3.78 KB
/
stearingcontrol.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import pygame
from direct.showbase.DirectObject import DirectObject
from direct.showbase.MessengerGlobal import messenger
from Car import Car
class JoystickHandler(DirectObject):
def __init__(self):
pygame.init()
count = pygame.joystick.get_count()
self.__joysticks = []
for i in range(count):
js = pygame.joystick.Joystick(i)
js.init()
self.__joysticks.append(js)
taskMgr.add(self.__on_joystick_polling, 'Joystick Polling')
self.gasValue = 0.0
self.brakeValue = 0.0
def destroy(self):
pygame.quit()
def get_joysticks(self):
return self.__joysticks
def get_count(self):
return len(self.__joysticks)
def __on_joystick_polling(self, task):
for ev in pygame.event.get():
if ev.type is pygame.JOYBUTTONDOWN:
name = 'joystick%d-button%d' % (ev.joy, ev.button)
messenger.send(name)
print name
elif ev.type is pygame.JOYBUTTONUP:
name = 'joystick%d-button%d-up' % (ev.joy, ev.button)
messenger.send(name)
elif ev.type is pygame.JOYAXISMOTION:
name = 'joystick%d-axis%d' % (ev.joy, ev.axis)
messenger.send(name, [ev.value])
elif ev.type is pygame.JOYBALLMOTION:
name = 'joystick%d-ball%d' % (ev.joy, ev.hat)
messenger.send(name, [ev.rel])
elif ev.type is pygame.JOYHATMOTION:
name = 'joystick%d-hat%d' % (ev.joy, ev.hat)
messenger.send(name, [ev.value])
#print name
return task.cont
class SteeringControl(JoystickHandler):
def __init__(self, car):
JoystickHandler.__init__(self)
self.car = car
self.accept('joystick0-axis0', self.steer)
self.accept('joystick0-axis2', self.gas)
self.accept('joystick0-axis3', self.brake)
self.accept('joystick0-axis4', self.clutch)
self.accept('joystick0-button8', self.forward)
self.accept('joystick0-button9', self.backward)
def steer(self, value):
#print "steer " + str(value)
self.car.setSteer(value)
def gas(self, value):
#Change range from 1.0 - -1.0 (where 1 is lowest) to 0 - -1 (where 0 is lowest)
valForCar = (value -1) / 2
#Now change max value from -1 to 1 but keep 0 as min value
self.gasValue = abs(valForCar)
#print "gas " + str(valForCar)
#self.car.setMotorTorque(value)
def brake(self, value):
#Change range from 1.0 - -1.0 (where 1 is lowest) to 0 - -1 (where 0 is lowest)
valForCar = (value -1) / 2
#Now change max value from -1 to 1 but keep 0 as min value
self.brakeValue = abs(valForCar)
#print "brake " + str(valForCar)
#self.car.setBrake(value)
def clutch(self, value):
#Change range from 1.0 - -1.0 (where 1 is lowest) to 0 - -1 (where 0 is lowest)
valForCar = (value -1) / 2
#Now change max value from -1 to 1 but keep 0 as min value
valForCar = abs(valForCar)
#print "clutch " + str(valForCar)
#self.car.setClutch(value)
def forward(self):
#print "forward"
self.car.setReverse(False)
def backward(self):
#print "backward"
self.car.setReverse(True)
def simulate(self, dt):
#print self.gasValue
self.car.setMotorTorque( self.gasValue )
self.car.setBrake( self.brakeValue )
#self.car.setSteer( )