-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathshooter.py
More file actions
59 lines (47 loc) · 1.81 KB
/
shooter.py
File metadata and controls
59 lines (47 loc) · 1.81 KB
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
from rev import (
SparkMax,
SparkLowLevel,
ResetMode,
PersistMode,
SparkMaxConfig,
SparkBaseConfig,
)
from commands2 import Subsystem, Command
from camera import AprilTagCamera
from wpimath.controller import PIDController
import constants
class Shooter(Subsystem):
def __init__(self) -> None:
self.flywheel = SparkMax(
constants.kFlywheelId, SparkLowLevel.MotorType.kBrushless
)
self.hood = SparkMax(constants.kHoodId, SparkMax.MotorType.kBrushless)
self.hood_encoder = self.hood.getEncoder()
self.hood_pid = PIDController(0.006, 0.0, 0.0)
self.hood_pid.setTolerance(0.1)
self.hood_encoder.setPosition(0)
config = SparkMaxConfig()
config.smartCurrentLimit(30)
config.setIdleMode(SparkBaseConfig.IdleMode.kCoast)
self.flywheel.configure(
config, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters
)
self.hood.configure(
config, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters
)
self.setDefaultCommand(self.run(lambda: self.deactivate()))
def activateFlywheel(self) -> Command:
return self.run(lambda: self.flywheel.set(0.4))
def deactivateFlywheel(self) -> Command:
return self.run(lambda: self.flywheel.set(0))
def deactivate(self) -> None:
self.flywheel.set(0)
self.hood.set(0)
def hoodUp(self) -> Command:
return self.run(lambda: self.hood.set(0.1))
def hoodDown(self) -> Command:
return self.run(lambda: self.hood.set(-0.8))
def openHoodByDistanceOfTag(self, camera: AprilTagCamera) -> Command:
range = camera.getRangeFromBestTarget()
rotation = self.hood_pid.calculate(range, 0)
return self.run(lambda: self.hood.set(rotation))