blob: 698983f2d042aba046e15a72b1d7221623879d67 [file] [log] [blame]
James Kuszmaul998d3032018-09-08 15:41:41 -07001#!/usr/bin/python3
2
3import numpy
4import sys
5
6def main():
7 # 38 27 -84
8 # 36 -64 39
9 # -74 21 35
10 Is0 = numpy.matrix([[38.0, 27.0, -84.0]]).T
11 Is1 = numpy.matrix([[36.0, -64.0, 39.0]]).T
12 Is2 = numpy.matrix([[-74.0, 21.0, 35.0]]).T
13 Is = numpy.matrix(numpy.hstack((Is0, Is1, Is2)))
14
15 current = 46.0
16 I = numpy.matrix([[current, -current / 2.0, -current / 2.0],
17 [-current / 2.0, current, -current / 2.0],
18 [-current / 2.0, -current / 2.0, current]])
19 transform = I * numpy.linalg.inv(Is)
20
21 print("#ifndef MOTORS_FET12_CURRENT_MATRIX_")
22 print("#define MOTORS_FET12_CURRENT_MATRIX_")
23 print("")
24 print("#include <array>")
25 print("")
26 print("namespace frc971 {")
27 print("namespace motors {")
28 print("")
29 print(
30 "inline ::std::array<float, 3> DecoupleCurrents(int16_t currents[3]) {")
31 print(" ::std::array<float, 3> ans;")
32
33 for i in range(3):
34 print(" ans[%d] = %ff * static_cast<float>(currents[0]) +" %
35 (i, transform[i, 0]))
36 print(" %ff * static_cast<float>(currents[1]) +" %
37 transform[i, 1])
38 print(" %ff * static_cast<float>(currents[2]);" % transform[i, 2])
39
40 print(" return ans;")
41 print("}")
42 print("")
43 print("} // namespace motors")
44 print("} // namespace frc971")
45 print("#endif // MOTORS_FET12_CURRENT_MATRIX_")
46
47 return 0
48
49if __name__ == '__main__':
50 sys.exit(main())