blob: 114d53f6af4db1fdff91fd337772cfe354e4d760 [file] [log] [blame]
James Kuszmaul998d3032018-09-08 15:41:41 -07001#!/usr/bin/python3
2
3import numpy
4import sys
James Kuszmaul7c8aad62018-09-08 18:16:18 -07005import calib_sensors
James Kuszmaul998d3032018-09-08 15:41:41 -07006
Ravago Jones5127ccc2022-07-31 16:32:45 -07007
James Kuszmaul7c8aad62018-09-08 18:16:18 -07008def manual_calibrate():
James Kuszmaul998d3032018-09-08 15:41:41 -07009 # 38 27 -84
10 # 36 -64 39
11 # -74 21 35
12 Is0 = numpy.matrix([[38.0, 27.0, -84.0]]).T
13 Is1 = numpy.matrix([[36.0, -64.0, 39.0]]).T
14 Is2 = numpy.matrix([[-74.0, 21.0, 35.0]]).T
15 Is = numpy.matrix(numpy.hstack((Is0, Is1, Is2)))
16
17 current = 46.0
18 I = numpy.matrix([[current, -current / 2.0, -current / 2.0],
19 [-current / 2.0, current, -current / 2.0],
20 [-current / 2.0, -current / 2.0, current]])
21 transform = I * numpy.linalg.inv(Is)
James Kuszmaul7c8aad62018-09-08 18:16:18 -070022 return transform
23
Ravago Jones5127ccc2022-07-31 16:32:45 -070024
James Kuszmaul7c8aad62018-09-08 18:16:18 -070025def main():
26 transform = manual_calibrate()
27
28 if len(sys.argv) > 1:
Ravago Jones5127ccc2022-07-31 16:32:45 -070029 transform = calib_sensors.calibrate(sys.argv[1:])
James Kuszmaul998d3032018-09-08 15:41:41 -070030
31 print("#ifndef MOTORS_FET12_CURRENT_MATRIX_")
32 print("#define MOTORS_FET12_CURRENT_MATRIX_")
33 print("")
34 print("#include <array>")
35 print("")
36 print("namespace frc971 {")
37 print("namespace motors {")
38 print("")
39 print(
Ravago Jones5127ccc2022-07-31 16:32:45 -070040 "inline ::std::array<float, 3> DecoupleCurrents(int16_t currents[3]) {"
41 )
James Kuszmaul998d3032018-09-08 15:41:41 -070042 print(" ::std::array<float, 3> ans;")
43
44 for i in range(3):
45 print(" ans[%d] = %ff * static_cast<float>(currents[0]) +" %
46 (i, transform[i, 0]))
47 print(" %ff * static_cast<float>(currents[1]) +" %
48 transform[i, 1])
49 print(" %ff * static_cast<float>(currents[2]);" % transform[i, 2])
50
51 print(" return ans;")
52 print("}")
53 print("")
54 print("} // namespace motors")
55 print("} // namespace frc971")
56 print("#endif // MOTORS_FET12_CURRENT_MATRIX_")
57
58 return 0
59
Ravago Jones5127ccc2022-07-31 16:32:45 -070060
James Kuszmaul998d3032018-09-08 15:41:41 -070061if __name__ == '__main__':
62 sys.exit(main())