Move y2023/localizer/utils.h to frc971/vision

These are entirely year-generic, no reason to keep them year-specific.

Change-Id: Ie3636613074e21c578afe0c9f136f6553759b63c
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/frc971/vision/BUILD b/frc971/vision/BUILD
index 02ab5e2..d96822b 100644
--- a/frc971/vision/BUILD
+++ b/frc971/vision/BUILD
@@ -386,3 +386,14 @@
         "@com_github_google_glog//:glog",
     ],
 )
+
+cc_library(
+    name = "target_map_utils",
+    srcs = ["target_map_utils.cc"],
+    hdrs = ["target_map_utils.h"],
+    visibility = ["//visibility:public"],
+    deps = [
+        "//frc971/vision:target_map_fbs",
+        "@org_tuxfamily_eigen//:eigen",
+    ],
+)
diff --git a/frc971/vision/target_map_utils.cc b/frc971/vision/target_map_utils.cc
new file mode 100644
index 0000000..232c2b6
--- /dev/null
+++ b/frc971/vision/target_map_utils.cc
@@ -0,0 +1,14 @@
+#include "frc971/vision/target_map_utils.h"
+
+namespace frc971::vision {
+Eigen::Matrix<double, 4, 4> PoseToTransform(
+    const frc971::vision::TargetPoseFbs *pose) {
+  const frc971::vision::Position *position = pose->position();
+  const frc971::vision::Quaternion *quaternion = pose->orientation();
+  return (Eigen::Translation3d(
+              Eigen::Vector3d(position->x(), position->y(), position->z())) *
+          Eigen::Quaterniond(quaternion->w(), quaternion->x(), quaternion->y(),
+                             quaternion->z()))
+      .matrix();
+}
+}  // namespace frc971::vision
diff --git a/frc971/vision/target_map_utils.h b/frc971/vision/target_map_utils.h
new file mode 100644
index 0000000..36b4e30
--- /dev/null
+++ b/frc971/vision/target_map_utils.h
@@ -0,0 +1,14 @@
+#ifndef FRC971_VISION_TARGET_MAP_UTILS_H_
+#define FRC971_VISION_TARGET_MAP_UTILS_H_
+
+#include <Eigen/Dense>
+
+#include "frc971/vision/target_map_generated.h"
+
+namespace frc971::vision {
+// Converts a TargetPoseFbs into a transformation matrix.
+Eigen::Matrix<double, 4, 4> PoseToTransform(
+    const frc971::vision::TargetPoseFbs *pose);
+}  // namespace frc971::vision
+
+#endif  // FRC971_VISION_TARGET_MAP_UTILS_H_