blob: 6f2e9a5176edd452dc64e973dc415879166c4820 [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
Austin Schuh7cea29d2024-03-17 18:20:14 -070028kCatapultWithoutGamePiece = angular_system.AngularSystemParams(
Niko Sohmers11017112024-02-18 16:03:58 -080029 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),
Austin Schuh7cea29d2024-03-17 18:20:14 -070034 # 135.2928 in^2 lb
35 J=0.06,
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
Austin Schuh7cea29d2024-03-17 18:20:14 -070046kCatapultWithGamePiece = angular_system.AngularSystemParams(
47 name='CatapultWithPiece',
48 # Add the battery series resistance to make it better match.
49 motor=AddResistance(control_loop.NMotor(control_loop.KrakenFOC(), 2),
50 0.00),
51 G=(14.0 / 60.0) * (12.0 / 24.0),
52 # 208.7328 in^2 lb
53 J=0.065 + 0.06,
54 q_pos=0.80,
55 q_vel=15.0,
56 kalman_q_pos=0.12,
57 kalman_q_vel=2.0,
58 kalman_q_voltage=0.7,
59 kalman_r_position=0.05,
60 radius=12 * 0.0254,
61 delayed_u=1,
62 dt=0.005)
63
64kCatapultWithoutGamePieceDecel = angular_system.AngularSystemParams(
65 name='CatapultWithoutPieceDecel',
Austin Schuh087613b2024-02-19 12:39:08 -080066 # Add the battery series resistance to make it better match.
67 motor=AddResistance(control_loop.NMotor(control_loop.KrakenFOC(), 2),
Maxwell Henderson6b1be312024-02-28 20:15:06 -080068 0.00),
Niko Sohmers11017112024-02-18 16:03:58 -080069 G=(14.0 / 60.0) * (12.0 / 24.0),
70 # 135.2928 in^2 lb
Austin Schuh7cea29d2024-03-17 18:20:14 -070071 J=0.04,
Austin Schuh087613b2024-02-19 12:39:08 -080072 q_pos=0.80,
73 q_vel=15.0,
Niko Sohmers11017112024-02-18 16:03:58 -080074 kalman_q_pos=0.12,
75 kalman_q_vel=2.0,
Austin Schuh087613b2024-02-19 12:39:08 -080076 kalman_q_voltage=0.7,
Niko Sohmers11017112024-02-18 16:03:58 -080077 kalman_r_position=0.05,
Austin Schuh087613b2024-02-19 12:39:08 -080078 radius=12 * 0.0254,
Austin Schuh65b4f9d2024-03-17 16:03:10 -070079 delayed_u=1,
80 dt=0.005)
Niko Sohmers11017112024-02-18 16:03:58 -080081
82
83def main(argv):
84 if FLAGS.plot:
85 R = numpy.matrix([[numpy.pi / 2.0], [0.0]])
Austin Schuh087613b2024-02-19 12:39:08 -080086 angular_system.PlotKick(kCatapultWithGamePiece, R)
87 angular_system.PlotMotion(kCatapultWithGamePiece, R)
Niko Sohmers11017112024-02-18 16:03:58 -080088 return
89
90 # Write the generated constants out to a file.
91 if len(argv) != 7:
92 glog.fatal(
93 'Expected .h file name and .cc file name for the intake and integral intake.'
94 )
95 else:
96 namespaces = ['y2024', 'control_loops', 'superstructure', 'catapult']
Austin Schuh7cea29d2024-03-17 18:20:14 -070097 angular_system.WriteAngularSystem([
98 kCatapultWithoutGamePiece, kCatapultWithGamePiece,
99 kCatapultWithoutGamePieceDecel
100 ], argv[1:4], argv[4:7], namespaces)
Niko Sohmers11017112024-02-18 16:03:58 -0800101
102
103if __name__ == '__main__':
104 argv = FLAGS(sys.argv)
105 glog.init()
106 sys.exit(main(argv))