blob: 406f56ee7e25eb113d0d18cae33bda79c0417c59 [file] [log] [blame]
Niko Sohmers11017112024-02-18 16:03:58 -08001#!/usr/bin/python3
2
3from aos.util.trapezoid_profile import TrapezoidProfile
4from frc971.control_loops.python import control_loop
5from frc971.control_loops.python import angular_system
6from frc971.control_loops.python import controls
7import numpy
8import sys
9from matplotlib import pylab
10import gflags
11import glog
12
13FLAGS = gflags.FLAGS
14
15try:
16 gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
17except gflags.DuplicateFlagError:
18 pass
19
20gflags.DEFINE_bool('hybrid', False, 'If true, make it hybrid.')
21
Austin Schuh087613b2024-02-19 12:39:08 -080022
23def AddResistance(motor, resistance):
24 motor.resistance += resistance
25 return motor
26
27
Niko Sohmers11017112024-02-18 16:03:58 -080028kCatapultWithGamePiece = angular_system.AngularSystemParams(
29 name='Catapult',
Austin Schuh087613b2024-02-19 12:39:08 -080030 # Add the battery series resistance to make it better match.
31 motor=AddResistance(control_loop.NMotor(control_loop.KrakenFOC(), 2),
Maxwell Henderson6b1be312024-02-28 20:15:06 -080032 0.00),
Niko Sohmers11017112024-02-18 16:03:58 -080033 G=(14.0 / 60.0) * (12.0 / 24.0),
34 # 208.7328 in^2 lb
Maxwell Henderson6b1be312024-02-28 20:15:06 -080035 J=0.065 + 0.04,
Austin Schuh087613b2024-02-19 12:39:08 -080036 q_pos=0.80,
37 q_vel=15.0,
Niko Sohmers11017112024-02-18 16:03:58 -080038 kalman_q_pos=0.12,
39 kalman_q_vel=2.0,
Austin Schuh087613b2024-02-19 12:39:08 -080040 kalman_q_voltage=0.7,
Niko Sohmers11017112024-02-18 16:03:58 -080041 kalman_r_position=0.05,
Austin Schuh087613b2024-02-19 12:39:08 -080042 radius=12 * 0.0254,
Austin Schuh65b4f9d2024-03-17 16:03:10 -070043 delayed_u=1,
44 dt=0.005)
Niko Sohmers11017112024-02-18 16:03:58 -080045
46kCatapultWithoutGamePiece = angular_system.AngularSystemParams(
47 name='Catapult',
Austin Schuh087613b2024-02-19 12:39:08 -080048 # Add the battery series resistance to make it better match.
49 motor=AddResistance(control_loop.NMotor(control_loop.KrakenFOC(), 2),
Maxwell Henderson6b1be312024-02-28 20:15:06 -080050 0.00),
Niko Sohmers11017112024-02-18 16:03:58 -080051 G=(14.0 / 60.0) * (12.0 / 24.0),
52 # 135.2928 in^2 lb
Maxwell Henderson6b1be312024-02-28 20:15:06 -080053 J=0.06,
Austin Schuh087613b2024-02-19 12:39:08 -080054 q_pos=0.80,
55 q_vel=15.0,
Niko Sohmers11017112024-02-18 16:03:58 -080056 kalman_q_pos=0.12,
57 kalman_q_vel=2.0,
Austin Schuh087613b2024-02-19 12:39:08 -080058 kalman_q_voltage=0.7,
Niko Sohmers11017112024-02-18 16:03:58 -080059 kalman_r_position=0.05,
Austin Schuh087613b2024-02-19 12:39:08 -080060 radius=12 * 0.0254,
Austin Schuh65b4f9d2024-03-17 16:03:10 -070061 delayed_u=1,
62 dt=0.005)
Niko Sohmers11017112024-02-18 16:03:58 -080063
64
65def main(argv):
66 if FLAGS.plot:
67 R = numpy.matrix([[numpy.pi / 2.0], [0.0]])
Austin Schuh087613b2024-02-19 12:39:08 -080068 angular_system.PlotKick(kCatapultWithGamePiece, R)
69 angular_system.PlotMotion(kCatapultWithGamePiece, R)
Niko Sohmers11017112024-02-18 16:03:58 -080070 return
71
72 # Write the generated constants out to a file.
73 if len(argv) != 7:
74 glog.fatal(
75 'Expected .h file name and .cc file name for the intake and integral intake.'
76 )
77 else:
78 namespaces = ['y2024', 'control_loops', 'superstructure', 'catapult']
79 angular_system.WriteAngularSystem(
Maxwell Henderson6b1be312024-02-28 20:15:06 -080080 [kCatapultWithoutGamePiece, kCatapultWithGamePiece], argv[1:4],
Niko Sohmers11017112024-02-18 16:03:58 -080081 argv[4:7], namespaces)
82
83
84if __name__ == '__main__':
85 argv = FLAGS(sys.argv)
86 glog.init()
87 sys.exit(main(argv))