Add 2022 trajectory generator

Signed-off-by: Milind Upadhyay <milind.upadhyay@gmail.com>
Change-Id: I4075a2825920e00de1c882b992b40841da758a9e
diff --git a/y2022/BUILD b/y2022/BUILD
index 640058b..43a2e71 100644
--- a/y2022/BUILD
+++ b/y2022/BUILD
@@ -18,6 +18,7 @@
         "//aos/network:message_bridge_server",
         "//y2022/actors:binaries",
         "//y2022/control_loops/drivetrain:drivetrain",
+        "//y2022/control_loops/drivetrain:trajectory_generator",
         "//y2022/control_loops/superstructure:superstructure",
     ],
     target_compatible_with = ["@platforms//os:linux"],
diff --git a/y2022/control_loops/drivetrain/BUILD b/y2022/control_loops/drivetrain/BUILD
index a1f1e47..661aee9 100644
--- a/y2022/control_loops/drivetrain/BUILD
+++ b/y2022/control_loops/drivetrain/BUILD
@@ -130,3 +130,18 @@
         "//y2022/control_loops/localizer:localizer_output_fbs",
     ],
 )
+
+cc_binary(
+    name = "trajectory_generator",
+    srcs = [
+        "trajectory_generator_main.cc",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+    visibility = ["//visibility:public"],
+    deps = [
+        ":drivetrain_base",
+        "//aos:init",
+        "//aos/events:shm_event_loop",
+        "//frc971/control_loops/drivetrain:trajectory_generator",
+    ],
+)
diff --git a/y2022/control_loops/drivetrain/trajectory_generator_main.cc b/y2022/control_loops/drivetrain/trajectory_generator_main.cc
new file mode 100644
index 0000000..c2837dd
--- /dev/null
+++ b/y2022/control_loops/drivetrain/trajectory_generator_main.cc
@@ -0,0 +1,39 @@
+#include <sys/resource.h>
+#include <sys/time.h>
+
+#include "aos/events/shm_event_loop.h"
+#include "aos/init.h"
+#include "frc971/control_loops/drivetrain/trajectory_generator.h"
+#include "y2022/control_loops/drivetrain/drivetrain_base.h"
+
+using ::frc971::control_loops::drivetrain::TrajectoryGenerator;
+
+DEFINE_bool(skip_renicing, false,
+            "If true, skip renicing the trajectory generator.");
+
+int main(int argc, char *argv[]) {
+  ::aos::InitGoogle(&argc, &argv);
+
+  aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+      aos::configuration::ReadConfig("config.json");
+
+  ::aos::ShmEventLoop event_loop(&config.message());
+  TrajectoryGenerator generator(
+      &event_loop, ::y2022::control_loops::drivetrain::GetDrivetrainConfig());
+
+  event_loop.OnRun([]() {
+    if (FLAGS_skip_renicing) {
+      LOG(WARNING) << "Ignoring request to renice to -20 due to "
+                      "--skip_renicing.";
+    } else {
+      errno = 0;
+      setpriority(PRIO_PROCESS, 0, -20);
+      PCHECK(errno == 0)
+          << ": Renicing to -20 failed, use --skip_renicing to skip renicing.";
+    }
+  });
+
+  event_loop.Run();
+
+  return 0;
+}