Add the catapult simulation and design code

This is mostly shamelessly stolen from rotory system.  It is different
enough because we have different control goals to not warrent being
lumped with the rotory system.

This lets us compute final speeds given the gear ratio and masses,
letting us optimize the gear ratio.

This gives us a model to start using when writing the optimization
problem for the fixed horizon MPC for shooting.

Change-Id: I03ac3448aa6ef717965fef7f41ef0a1197ea77a5
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/y2022/control_loops/python/BUILD b/y2022/control_loops/python/BUILD
index 4049acc..54bce63 100644
--- a/y2022/control_loops/python/BUILD
+++ b/y2022/control_loops/python/BUILD
@@ -48,6 +48,33 @@
     ],
 )
 
+py_library(
+    name = "catapult_lib",
+    srcs = [
+        "catapult_lib.py",
+    ],
+    target_compatible_with = ["@platforms//cpu:x86_64"],
+    deps = [
+        "//frc971/control_loops/python:controls",
+        "@matplotlib_repo//:matplotlib3",
+    ],
+)
+
+py_binary(
+    name = "catapult",
+    srcs = [
+        "catapult.py",
+    ],
+    legacy_create_init = False,
+    target_compatible_with = ["@platforms//cpu:x86_64"],
+    deps = [
+        ":catapult_lib",
+        ":python_init",
+        "//external:python-gflags",
+        "//external:python-glog",
+    ],
+)
+
 py_binary(
     name = "intake",
     srcs = [