Allow constructing control loops from flatbuffers
The core changes here are to:
* Allow constructing StateFeedbackLoop's from flatbuffers using the
code in *state_feedback_loop_converters.*
* Add constructors to the single-dof subsystem class to make use of
this.
* Add code to control_loops.py to generate JSON files with the requisite
constants (these end up containing identical information to the
generated .cc files).
* Add interfaces to actually support the new JSON codegen to single-dof
subsystem classes.
* Convert all of the drivetrains over to generating these. This I mostly
do so that I can write a test where Iconfirm that the .cc files and
the JSON files generate exactly the same content.
Change-Id: Iceac48f25ecac96200b7bf992c8f34a15fe6800c
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/y2024/control_loops/drivetrain/BUILD b/y2024/control_loops/drivetrain/BUILD
index e3c627a..0cca123 100644
--- a/y2024/control_loops/drivetrain/BUILD
+++ b/y2024/control_loops/drivetrain/BUILD
@@ -5,8 +5,10 @@
outs = [
"drivetrain_dog_motor_plant.h",
"drivetrain_dog_motor_plant.cc",
+ "drivetrain_dog_motor_plant.json",
"kalman_drivetrain_motor_plant.h",
"kalman_drivetrain_motor_plant.cc",
+ "kalman_drivetrain_motor_plant.json",
],
cmd = "$(location //y2024/control_loops/python:drivetrain) $(OUTS)",
target_compatible_with = ["@platforms//os:linux"],
@@ -20,10 +22,13 @@
outs = [
"polydrivetrain_dog_motor_plant.h",
"polydrivetrain_dog_motor_plant.cc",
+ "polydrivetrain_dog_motor_plant.json",
"polydrivetrain_cim_plant.h",
"polydrivetrain_cim_plant.cc",
+ "polydrivetrain_cim_plant.json",
"hybrid_velocity_drivetrain.h",
"hybrid_velocity_drivetrain.cc",
+ "hybrid_velocity_drivetrain.json",
],
cmd = "$(location //y2024/control_loops/python:polydrivetrain) $(OUTS)",
target_compatible_with = ["@platforms//os:linux"],
diff --git a/y2024/control_loops/python/drivetrain.py b/y2024/control_loops/python/drivetrain.py
index 64dcc47..caedada 100644
--- a/y2024/control_loops/python/drivetrain.py
+++ b/y2024/control_loops/python/drivetrain.py
@@ -36,11 +36,11 @@
if FLAGS.plot:
drivetrain.PlotDrivetrainMotions(kDrivetrain)
- elif len(argv) != 5:
- print("Expected .h file name and .cc file name")
+ elif len(argv) != 7:
+ print("Expected .h, .cc, and .json filenames")
else:
# Write the generated constants out to a file.
- drivetrain.WriteDrivetrain(argv[1:3], argv[3:5], 'y2024', kDrivetrain)
+ drivetrain.WriteDrivetrain(argv[1:4], argv[4:7], 'y2024', kDrivetrain)
if __name__ == '__main__':
diff --git a/y2024/control_loops/python/polydrivetrain.py b/y2024/control_loops/python/polydrivetrain.py
index 99a9b53..9a9d2a7 100644
--- a/y2024/control_loops/python/polydrivetrain.py
+++ b/y2024/control_loops/python/polydrivetrain.py
@@ -20,10 +20,10 @@
def main(argv):
if FLAGS.plot:
polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
- elif len(argv) != 7:
- glog.fatal('Expected .h file name and .cc file name')
+ elif len(argv) != 10:
+ glog.fatal('Expected .h, .cc, and .json filenames')
else:
- polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7],
+ polydrivetrain.WritePolyDrivetrain(argv[1:4], argv[4:7], argv[7:10],
'y2024', drivetrain.kDrivetrain)