Enable target_mapping to write out to mcap log
Change-Id: I36c1da7c27b75947324d84f950d2eb417a1eea49
Signed-off-by: Jim Ostrowski <yimmy13@gmail.com>
diff --git a/y2023/vision/BUILD b/y2023/vision/BUILD
index 9bd29fa..94803e1 100644
--- a/y2023/vision/BUILD
+++ b/y2023/vision/BUILD
@@ -75,6 +75,7 @@
"//aos:init",
"//aos/events:simulated_event_loop",
"//aos/events/logging:log_reader",
+ "//aos/util:mcap_logger",
"//frc971/constants:constants_sender_lib",
"//frc971/control_loops:pose",
"//frc971/vision:calibration_fbs",
diff --git a/y2023/vision/target_mapping.cc b/y2023/vision/target_mapping.cc
index 8861e2e..c59414b 100644
--- a/y2023/vision/target_mapping.cc
+++ b/y2023/vision/target_mapping.cc
@@ -2,6 +2,7 @@
#include "aos/events/logging/log_reader.h"
#include "aos/events/simulated_event_loop.h"
#include "aos/init.h"
+#include "aos/util/mcap_logger.h"
#include "frc971/control_loops/pose.h"
#include "frc971/vision/calibration_generated.h"
#include "frc971/vision/charuco_lib.h"
@@ -29,6 +30,8 @@
"Field name, for the output json filename and flatbuffer field");
DEFINE_int32(team_number, 7971,
"Use the calibration for a node with this team number");
+DEFINE_string(mcap_output_path, "/tmp/log.mcap", "Log to output.");
+DEFINE_string(pi, "pi1", "Pi name to generate mcap log for; defaults to pi1.");
namespace y2023 {
namespace vision {
@@ -178,6 +181,25 @@
HandlePiCaptures(pi4_detection_event_loop.get(), pi4_mapping_event_loop.get(),
&reader, ×tamped_target_detections, &detectors);
+ std::unique_ptr<aos::EventLoop> mcap_event_loop;
+ std::unique_ptr<aos::McapLogger> relogger;
+ if (!FLAGS_mcap_output_path.empty()) {
+ LOG(INFO) << "Writing out mcap file to " << FLAGS_mcap_output_path;
+ // TODO: Should make this work for any pi
+ const aos::Node *node =
+ aos::configuration::GetNode(reader.configuration(), FLAGS_pi);
+ reader.event_loop_factory()->GetNodeEventLoopFactory(node)->OnStartup(
+ [&relogger, &mcap_event_loop, &reader, node]() {
+ mcap_event_loop =
+ reader.event_loop_factory()->MakeEventLoop("mcap", node);
+ relogger = std::make_unique<aos::McapLogger>(
+ mcap_event_loop.get(), FLAGS_mcap_output_path,
+ aos::McapLogger::Serialization::kFlatbuffer,
+ aos::McapLogger::CanonicalChannelNames::kShortened,
+ aos::McapLogger::Compression::kLz4);
+ });
+ }
+
reader.event_loop_factory()->Run();
auto target_constraints =