4
4
from __future__ import annotations
5
5
6
6
from typing import Callable , Union
7
- from wpimath .controller import PIDController , RamseteController , SimpleMotorFeedforwardMeters
7
+ from wpimath .controller import (
8
+ PIDController ,
9
+ RamseteController ,
10
+ SimpleMotorFeedforwardMeters ,
11
+ )
8
12
from wpimath .geometry import Pose2d
9
- from wpimath .kinematics import ChassisSpeeds , DifferentialDriveKinematics , DifferentialDriveWheelSpeeds
13
+ from wpimath .kinematics import (
14
+ ChassisSpeeds ,
15
+ DifferentialDriveKinematics ,
16
+ DifferentialDriveWheelSpeeds ,
17
+ )
10
18
from wpimath .trajectory import Trajectory
11
19
from wpiutil import SendableBuilder
12
20
from wpilib import Timer
15
23
from .command import Command
16
24
from .subsystem import Subsystem
17
25
26
+
18
27
class RamseteCommand (Command ):
19
28
"""
20
29
A command that uses a RAMSETE controller (RamseteController) to follow a trajectory
@@ -62,7 +71,7 @@ def __init__(
62
71
63
72
OPTIONAL PARAMETERS
64
73
When the following optional parameters are provided, when executed, the RamseteCommand will follow
65
- provided trajectory. PID control and feedforward are handled internally, and the outputs are scaled
74
+ provided trajectory. PID control and feedforward are handled internally, and the outputs are scaled
66
75
from -12 to 12 representing units of volts. If any one of the optional parameters are provided, each
67
76
other optional parameter becomes required.
68
77
:param feedforward The feedforward to use for the drive
@@ -90,11 +99,11 @@ def __init__(
90
99
# requirements become required.
91
100
if feedforward or leftController or rightController or wheelSpeeds is not None :
92
101
if feedforward or leftController or rightController or wheelSpeeds is None :
93
- raise RuntimeError (f'Failed to instantiate RamseteCommand, not all optional arguments were provided.\n \
94
- Feedforward - { feedforward } , LeftController - { leftController } , RightController - { rightController } , WheelSpeeds - { wheelSpeeds } '
102
+ raise RuntimeError (
103
+ f"Failed to instantiate RamseteCommand, not all optional arguments were provided.\n \
104
+ Feedforward - { feedforward } , LeftController - { leftController } , RightController - { rightController } , WheelSpeeds - { wheelSpeeds } "
95
105
)
96
-
97
-
106
+
98
107
self .leftController : PIDController = leftController
99
108
self .rightController : PIDController = rightController
100
109
self .wheelspeeds : Callable [[], DifferentialDriveWheelSpeeds ] = wheelSpeeds
@@ -109,7 +118,11 @@ def initialize(self):
109
118
self .prevTime = - 1
110
119
initial_state = self .trajectory .sample (0 )
111
120
initial_speeds = self .kinematics .toWheelSpeeds (
112
- ChassisSpeeds ( initial_state .velocity , 0 , initial_state .curvature * initial_state .velocity )
121
+ ChassisSpeeds (
122
+ initial_state .velocity ,
123
+ 0 ,
124
+ initial_state .curvature * initial_state .velocity ,
125
+ )
113
126
)
114
127
self .prevSpeeds = initial_speeds
115
128
self .timer .restart ()
@@ -135,29 +148,20 @@ def execute(self):
135
148
136
149
if self .usePID :
137
150
left_feedforward = self .feedforward .calculate (
138
- left_speed_setpoint ,
139
- (left_speed_setpoint - self .prevSpeeds .left ) / dt
151
+ left_speed_setpoint , (left_speed_setpoint - self .prevSpeeds .left ) / dt
140
152
)
141
153
142
154
right_feedforward = self .feedforward .calculate (
143
155
right_speed_setpoint ,
144
- (right_speed_setpoint - self .prevSpeeds .right ) / dt
156
+ (right_speed_setpoint - self .prevSpeeds .right ) / dt ,
145
157
)
146
158
147
- left_output = (
148
- left_feedforward
149
- + self .leftController .calculate (
150
- self .wheelspeeds ().left ,
151
- left_speed_setpoint
152
- )
159
+ left_output = left_feedforward + self .leftController .calculate (
160
+ self .wheelspeeds ().left , left_speed_setpoint
153
161
)
154
162
155
- right_output = (
156
- right_feedforward
157
- + self .rightController .calculate (
158
- self .wheelspeeds ().right ,
159
- right_speed_setpoint
160
- )
163
+ right_output = right_feedforward + self .rightController .calculate (
164
+ self .wheelspeeds ().right , right_speed_setpoint
161
165
)
162
166
else :
163
167
left_output = left_speed_setpoint
0 commit comments