blob: 54ec9d3a856270f6ffb8b05a361291a9aae58c02 [file] [log] [blame]
Austin Schuh085eab92020-11-26 13:54:51 -08001#!/usr/bin/python3
Sabina Davisedf89472020-02-17 15:27:37 -08002
3from frc971.control_loops.python import control_loop
4from y2020.control_loops.python import flywheel
5import numpy
6
7import sys
8
9import gflags
10import glog
11
12FLAGS = gflags.FLAGS
13
14gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
15
Austin Schuhc1c957a2020-02-20 17:47:58 -080016# Inertia for a single 4" diameter, 1" wide neopreme wheel.
17J_wheel = 0.000319
18# Gear ratio between wheels (speed up!)
19G_per_wheel = 1.2
20# Gear ratio to the final wheel.
21G = (30.0 / 40.0) * numpy.power(G_per_wheel, 3.0)
22# Overall flywheel inertia.
Ravago Jones5127ccc2022-07-31 16:32:45 -070023J = J_wheel * (1.0 + numpy.power(G_per_wheel, -2.0) +
24 numpy.power(G_per_wheel, -4.0) + numpy.power(G_per_wheel, -6.0))
Austin Schuhc1c957a2020-02-20 17:47:58 -080025
26# The position and velocity are measured for the final wheel.
Ravago Jones5127ccc2022-07-31 16:32:45 -070027kAccelerator = flywheel.FlywheelParams(name='Accelerator',
28 motor=control_loop.Falcon(),
29 G=G,
30 J=J * 1.3,
31 q_pos=0.01,
32 q_vel=40.0,
33 q_voltage=1.0,
34 r_pos=0.03,
35 controller_poles=[.89])
Sabina Davisedf89472020-02-17 15:27:37 -080036
37
38def main(argv):
39 if FLAGS.plot:
Austin Schuh989a3132020-02-20 18:20:06 -080040 R = numpy.matrix([[0.0], [500.0], [0.0]])
Austin Schuh43b9ae92020-02-29 23:08:38 -080041 flywheel.PlotSpinup(kAccelerator, goal=R, iterations=400)
Sabina Davisedf89472020-02-17 15:27:37 -080042 return 0
43
Austin Schuh43b9ae92020-02-29 23:08:38 -080044 glog.debug("J is %f" % J)
45
Sabina Davisedf89472020-02-17 15:27:37 -080046 if len(argv) != 5:
47 glog.fatal('Expected .h file name and .cc file name')
48 else:
49 namespaces = [
50 'y2020', 'control_loops', 'superstructure', 'accelerator'
51 ]
52 flywheel.WriteFlywheel(kAccelerator, argv[1:3], argv[3:5], namespaces)
53
54
55if __name__ == '__main__':
56 argv = FLAGS(sys.argv)
Austin Schuh43b9ae92020-02-29 23:08:38 -080057 glog.init()
Sabina Davisedf89472020-02-17 15:27:37 -080058 sys.exit(main(argv))