Skip to content

Commit eaf5ad7

Browse files
feat(autoware_crosswalk_traffic_light_estimator): overwrite invalid detection result (#9667)
* add code in order to check invalid detection Signed-off-by: MasatoSaeki <masato.saeki@tier4.jp> * style(pre-commit): autofix --------- Signed-off-by: MasatoSaeki <masato.saeki@tier4.jp> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 5de2e4a commit eaf5ad7

File tree

2 files changed

+23
-0
lines changed
  • perception/autoware_crosswalk_traffic_light_estimator

2 files changed

+23
-0
lines changed

perception/autoware_crosswalk_traffic_light_estimator/include/autoware_crosswalk_traffic_light_estimator/node.hpp

+2
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ class CrosswalkTrafficLightEstimatorNode : public rclcpp::Node
9797

9898
void removeDuplicateIds(TrafficSignalArray & signal_array) const;
9999

100+
bool isInvalidDetectionStatus(const TrafficSignal & signal) const;
101+
100102
// Node param
101103
bool use_last_detect_color_;
102104
double last_detect_color_hold_time_;

perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp

+21
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,14 @@ void CrosswalkTrafficLightEstimatorNode::setCrosswalkTrafficSignal(
298298
if (valid_id2idx_map.count(id)) {
299299
size_t idx = valid_id2idx_map[id];
300300
auto signal = msg.traffic_light_groups[idx];
301+
if (isInvalidDetectionStatus(signal)) {
302+
TrafficSignalElement output_traffic_signal_element;
303+
output_traffic_signal_element.color = color;
304+
output_traffic_signal_element.shape = TrafficSignalElement::CIRCLE;
305+
output_traffic_signal_element.confidence = 1.0;
306+
output.traffic_light_groups[idx].elements[0] = output_traffic_signal_element;
307+
continue;
308+
}
301309
updateFlashingState(signal); // check if it is flashing
302310
// update output msg according to flashing and current state
303311
output.traffic_light_groups[idx].elements[0].color = updateAndGetColorState(signal);
@@ -314,6 +322,19 @@ void CrosswalkTrafficLightEstimatorNode::setCrosswalkTrafficSignal(
314322
}
315323
}
316324

325+
bool CrosswalkTrafficLightEstimatorNode::isInvalidDetectionStatus(
326+
const TrafficSignal & signal) const
327+
{
328+
// check occlusion, backlight(shape is unknown) and no detection(shape is circle)
329+
if (
330+
signal.elements.front().color == TrafficSignalElement::UNKNOWN &&
331+
signal.elements.front().confidence == 0.0) {
332+
return true;
333+
}
334+
335+
return false;
336+
}
337+
317338
void CrosswalkTrafficLightEstimatorNode::updateFlashingState(const TrafficSignal & signal)
318339
{
319340
const auto id = signal.traffic_light_group_id;

0 commit comments

Comments
 (0)