Skip to content

Commit 77d9e57

Browse files
committed
wip
Signed-off-by: Tomohito Ando <tomohito.ando@tier4.jp>
1 parent f2059e8 commit 77d9e57

File tree

1 file changed

+32
-39
lines changed

1 file changed

+32
-39
lines changed

perception/traffic_light_arbiter/src/traffic_light_arbiter.cpp

+32-39
Original file line numberDiff line numberDiff line change
@@ -298,31 +298,28 @@ void TrafficLightArbiter::arbitrateAndPublish(const builtin_interfaces::msg::Tim
298298
// Compare the signal element for each received signal id
299299
const auto received_signal_id_set =
300300
util::create_signal_id_set(perception_signals.signals, external_signals.signals);
301+
301302
for (const auto & signal_id : received_signal_id_set) {
302-
// Check if the signal element exists
303-
const auto perception_result = std::find_if(
304-
perception_signals.signals.begin(), perception_signals.signals.end(),
305-
[&signal_id](const TrafficSignal & signal) {
306-
return signal.traffic_signal_id == signal_id;
307-
});
308-
309-
const auto external_result = std::find_if(
310-
external_signals.signals.begin(), external_signals.signals.end(),
311-
[&signal_id](const TrafficSignal & signal) {
312-
return signal.traffic_signal_id == signal_id;
313-
});
303+
const auto find_signal_by_id = [&signal_id](const TrafficSignalArray & signals) {
304+
return std::find_if(
305+
signals.signals.begin(), signals.signals.end(),
306+
[&signal_id](const TrafficSignal & signal) {
307+
return signal.traffic_signal_id == signal_id;
308+
});
309+
};
310+
311+
const auto perception_result = find_signal_by_id(perception_signals);
312+
const auto external_result = find_signal_by_id(external_signals);
314313

315314
auto & elements_and_priority = regulatory_element_signals_map[signal_id];
316315
const bool perception_result_exists = perception_result != perception_signals.signals.end();
317316
const bool external_result_exists = external_result != external_signals.signals.end();
318317

319318
// Ignore pedestrian lights
320-
const bool is_pedestrian_light =
319+
if (
321320
map_pedestrian_signal_regulatory_elements_set_->find(signal_id) !=
322-
map_pedestrian_signal_regulatory_elements_set_->end();
323-
if (is_pedestrian_light) {
324-
RCLCPP_WARN_STREAM(rclcpp::get_logger("debug"), "pedestrian light: " << signal_id);
325-
// TODO: think better way
321+
map_pedestrian_signal_regulatory_elements_set_->end()) {
322+
RCLCPP_WARN_STREAM(rclcpp::get_logger("debug"), "Ignoring pedestrian light: " << signal_id);
326323
if (perception_result_exists) {
327324
add_signal_function(*perception_result, false);
328325
}
@@ -332,26 +329,25 @@ void TrafficLightArbiter::arbitrateAndPublish(const builtin_interfaces::msg::Tim
332329
continue;
333330
}
334331

335-
// If either of the signal is not received, treat as unknown signal
336-
if (!perception_result_exists || !external_result_exists) {
337-
// Insert unknown signal
332+
auto insert_unknown_elements = [&](const auto & result) {
338333
std::vector<Element> unknown_elements;
339-
if (perception_result_exists) {
340-
for (const auto & element : perception_result->elements) {
341-
unknown_elements.emplace_back(
342-
util::create_element(Element::UNKNOWN, element.shape, Element::SOLID_ON, 1.0));
343-
}
344-
} else if (external_result_exists) {
345-
for (const auto & element : external_result->elements) {
346-
unknown_elements.emplace_back(
347-
util::create_element(Element::UNKNOWN, element.shape, Element::SOLID_ON, 1.0));
348-
}
334+
for (const auto & element : result->elements) {
335+
unknown_elements.emplace_back(
336+
util::create_element(Element::UNKNOWN, element.shape, Element::SOLID_ON, 1.0));
349337
}
350-
351338
std::transform(
352339
unknown_elements.begin(), unknown_elements.end(),
353340
std::back_inserter(elements_and_priority),
354341
[](const auto & elem) { return std::make_pair(elem, false); });
342+
};
343+
344+
// If either of the signal is not received, treat as unknown signal
345+
if (!perception_result_exists || !external_result_exists) {
346+
if (perception_result_exists) {
347+
insert_unknown_elements(perception_result);
348+
} else if (external_result_exists) {
349+
insert_unknown_elements(external_result);
350+
}
355351
continue;
356352
}
357353

@@ -361,18 +357,15 @@ void TrafficLightArbiter::arbitrateAndPublish(const builtin_interfaces::msg::Tim
361357
// Insert unknown signal if not same
362358
const auto unknown_elements =
363359
util::create_unknown_elements(perception_result->elements, external_result->elements);
364-
365360
std::transform(
366361
unknown_elements.begin(), unknown_elements.end(),
367362
std::back_inserter(elements_and_priority),
368363
[](const auto & elem) { return std::make_pair(elem, false); });
369-
continue;
370-
}
371-
372-
// Both results are same, so insert the received color
373-
// Since they are same, either one can be used
374-
for (const auto & element : perception_result->elements) {
375-
elements_and_priority.emplace_back(element, false);
364+
} else {
365+
// Both results are same, so insert the received color
366+
for (const auto & element : perception_result->elements) {
367+
elements_and_priority.emplace_back(element, false);
368+
}
376369
}
377370
}
378371
};

0 commit comments

Comments
 (0)