Reset target mapping image when there aren't poses
If we haven't gotten anything for a while, clear the display so we
aren't looking at stale estimates.
Signed-off-by: milind-u <milind.upadhyay@gmail.com>
Change-Id: Ifccc4a58f3cc23b67692ae84b68008572e1418f9
diff --git a/y2023/vision/target_mapping.cc b/y2023/vision/target_mapping.cc
index e9ef662..4da972a 100644
--- a/y2023/vision/target_mapping.cc
+++ b/y2023/vision/target_mapping.cc
@@ -81,7 +81,8 @@
Eigen::Affine3d extrinsics, std::string node_name,
frc971::vision::TargetMapper target_loc_mapper,
std::set<std::string> *drawn_nodes,
- VisualizeRobot *vis_robot, size_t *display_count) {
+ VisualizeRobot *vis_robot, size_t *display_count,
+ aos::distributed_clock::time_point *last_draw_time) {
bool drew = false;
std::stringstream label;
label << node_name << " - ";
@@ -167,6 +168,7 @@
std::to_string(target_pose_fbs->id()),
kPiColors.at(node_name));
drew = true;
+ *last_draw_time = pi_distributed_time;
}
}
if (drew) {
@@ -177,6 +179,13 @@
kPiColors.at(node_name));
drawn_nodes->emplace(node_name);
+ } else if (pi_distributed_time - *last_draw_time >
+ std::chrono::milliseconds(30) &&
+ *display_count >= FLAGS_skip_to) {
+ // Clear the image if we haven't draw in a while
+ vis_robot->ClearImage();
+ cv::imshow("View", vis_robot->image_);
+ cv::waitKey(FLAGS_wait_key);
}
}
@@ -188,7 +197,7 @@
*timestamped_target_detections,
std::vector<std::unique_ptr<AprilRoboticsDetector>> *detectors,
std::set<std::string> *drawn_nodes, VisualizeRobot *vis_robot,
- size_t *display_count) {
+ size_t *display_count, aos::distributed_clock::time_point *last_draw_time) {
static constexpr std::string_view kImageChannel = "/camera";
// For the robots, we need to flip the image since the cameras are rolled by
// 180 degrees
@@ -217,7 +226,7 @@
std::string node_name = detection_event_loop->node()->name()->str();
HandleAprilTags(map, pi_distributed_time, timestamped_target_detections,
extrinsics, node_name, target_loc_mapper, drawn_nodes,
- vis_robot, display_count);
+ vis_robot, display_count, last_draw_time);
});
}
@@ -260,6 +269,8 @@
VisualizeRobot vis_robot;
std::set<std::string> drawn_nodes;
size_t display_count = 0;
+ aos::distributed_clock::time_point last_draw_time =
+ aos::distributed_clock::min_time;
const aos::Node *pi1 =
aos::configuration::GetNode(reader.configuration(), "pi1");
@@ -269,7 +280,7 @@
reader.event_loop_factory()->MakeEventLoop("pi1_mapping", pi1);
HandlePiCaptures(pi1_detection_event_loop.get(), pi1_mapping_event_loop.get(),
&reader, ×tamped_target_detections, &detectors,
- &drawn_nodes, &vis_robot, &display_count);
+ &drawn_nodes, &vis_robot, &display_count, &last_draw_time);
const aos::Node *pi2 =
aos::configuration::GetNode(reader.configuration(), "pi2");
@@ -279,7 +290,7 @@
reader.event_loop_factory()->MakeEventLoop("pi2_mapping", pi2);
HandlePiCaptures(pi2_detection_event_loop.get(), pi2_mapping_event_loop.get(),
&reader, ×tamped_target_detections, &detectors,
- &drawn_nodes, &vis_robot, &display_count);
+ &drawn_nodes, &vis_robot, &display_count, &last_draw_time);
const aos::Node *pi3 =
aos::configuration::GetNode(reader.configuration(), "pi3");
@@ -289,7 +300,7 @@
reader.event_loop_factory()->MakeEventLoop("pi3_mapping", pi3);
HandlePiCaptures(pi3_detection_event_loop.get(), pi3_mapping_event_loop.get(),
&reader, ×tamped_target_detections, &detectors,
- &drawn_nodes, &vis_robot, &display_count);
+ &drawn_nodes, &vis_robot, &display_count, &last_draw_time);
const aos::Node *pi4 =
aos::configuration::GetNode(reader.configuration(), "pi4");
@@ -299,7 +310,7 @@
reader.event_loop_factory()->MakeEventLoop("pi4_mapping", pi4);
HandlePiCaptures(pi4_detection_event_loop.get(), pi4_mapping_event_loop.get(),
&reader, ×tamped_target_detections, &detectors,
- &drawn_nodes, &vis_robot, &display_count);
+ &drawn_nodes, &vis_robot, &display_count, &last_draw_time);
std::unique_ptr<aos::EventLoop> mcap_event_loop;
std::unique_ptr<aos::McapLogger> relogger;