-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrobot.py
130 lines (109 loc) · 5.06 KB
/
robot.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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
"""
Main logic code
"""
import wpilib
import time
from networktables import NetworkTable
from inits import Component
import helpers
from components.chassis import Chassis
from components.gear import GearSol
from components.climber import Climber
from components.bumpPop import BumpPop
from components.shooter import Shooter
from components.groundGear import GroundGear
from components.vision import Vision
from autonomous import Autonomous
class Randy(wpilib.SampleRobot):
def robotInit(self):
# init cameras
wpilib.CameraServer.launch('cameras.py:main')
self.C = Component() # Components inits all connected motors, sensors, and joysticks. See inits.py.
# Setup subsystems
self.drive = Chassis(self.C.driveTrain, self.C.gyroS)
self.climb = Climber(self.C.climbM)
self.bumpPop = BumpPop(self.C.bumpPopR)
self.groundGear = GroundGear(self.C.groundSol, self.C.groundGearM)
self.gearSol = GearSol(self.C.gearSol)
self.shooter = Shooter(self.C.shooterM, self.C.hopperM, self.C.shooterS, self.C.hopperS)
self.vision = Vision(self.drive, self.C.greenLEDR)
self.autonomousRoutine = Autonomous(self.drive, self.bumpPop, self.gearSol, self.groundGear, self.vision)
# Smart Dashboard
self.sd = NetworkTable.getTable('SmartDashboard')
self.sd.putBoolean('autoAngle', False)
self.sd.putBoolean('isLeft', False)
# Joysticks or xBox controller?
self.controller = 'joysticks' # || joysticks
if (self.controller == 'joysticks'):
self.C.leftJ = wpilib.Joystick(0)
self.C.middleJ = wpilib.Joystick(1)
self.C.rightJ = wpilib.Joystick(2)
elif (self.controller == 'xbox'):
self.C.joystick = wpilib.XboxController(0)
def operatorControl(self):
# runs when robot is enabled
while self.isOperatorControl() and self.isEnabled():
'''
Components
'''
# Drive
if (self.controller == 'joysticks'):
self.drive.run(self.C.leftJ.getX(),
self.C.leftJ.getY(),
self.C.middleJ.getX(),
self.C.leftJ.getRawButton(4),
self.C.leftJ.getRawButton(3),
self.C.leftJ.getRawButton(5),
self.C.leftJ.getRawButton(2))
elif (self.controller == 'xbox'):
self.drive.arcade(self.C.joystick.getRawAxis(0), self.C.joystick.getRawAxis(1), self.C.joystick.getRawAxis(4))
# Back gear
if (self.controller == 'joysticks'):
if (self.C.middleJ.getRawButton(4)):
self.groundGear.run(True, 'out')
elif (self.C.middleJ.getRawButton(5)):
self.groundGear.run(True, 'in')
else:
self.groundGear.run(False, False)
elif (self.controller == 'xbox'):
if (self.C.joystick.getBumper(wpilib.GenericHID.Hand.kLeft)):
self.groundGear.run(True, 'out')
elif (self.C.joystick.getTriggerAxis(wpilib.GenericHID.Hand.kLeft) > 0.5):
self.groundGear.run(True, 'in')
else:
self.groundGear.run(False, False)
# Front gear
if (self.controller == 'joysticks'):
if (self.C.middleJ.getRawButton(1) == True and self.C.middleJ.getRawButton(2) == True):
self.gearSol.run(True)
else:
self.gearSol.run(False)
elif (self.controller == 'xbox'):
if (self.C.joystick.getTriggerAxis(wpilib.GenericHID.Hand.kRight) > 0.5):
self.gearSol.run(True)
else:
self.gearSol.run(False)
# LEDs
if (self.controller == 'xbox'):
if (self.C.joystick.getStickButton(wpilib.GenericHID.Hand.kRight)):
self.C.greenLEDR.set(wpilib.Relay.Value.kForward)
else:
self.C.greenLEDR.set(wpilib.Relay.Value.kOff)
elif (self.controller == 'joysticks'):
if (self.C.middleJ.getRawButton(3)):
self.C.greenLEDR.set(wpilib.Relay.Value.kForward)
else:
self.C.greenLEDR.set(wpilib.Relay.Value.kOff)
# Climb
if (self.controller == 'joysticks'):
self.climb.run(self.C.rightJ.getRawButton(1))
elif (self.controller == 'xbox'):
self.climb.run(self.C.joystick.getBumper(wpilib.GenericHID.Hand.kRight))
wpilib.Timer.delay(0.002) # wait for a motor update time
def test(self):
"""This function is called periodically during test mode."""
def autonomous(self):
"""Runs once during autonomous."""
self.autonomousRoutine.run() # see autonomous.py
if __name__ == "__main__":
wpilib.run(Randy)