@@ -298,31 +298,28 @@ void TrafficLightArbiter::arbitrateAndPublish(const builtin_interfaces::msg::Tim
298
298
// Compare the signal element for each received signal id
299
299
const auto received_signal_id_set =
300
300
util::create_signal_id_set (perception_signals.signals , external_signals.signals );
301
+
301
302
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);
314
313
315
314
auto & elements_and_priority = regulatory_element_signals_map[signal_id];
316
315
const bool perception_result_exists = perception_result != perception_signals.signals .end ();
317
316
const bool external_result_exists = external_result != external_signals.signals .end ();
318
317
319
318
// Ignore pedestrian lights
320
- const bool is_pedestrian_light =
319
+ if (
321
320
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);
326
323
if (perception_result_exists) {
327
324
add_signal_function (*perception_result, false );
328
325
}
@@ -332,26 +329,25 @@ void TrafficLightArbiter::arbitrateAndPublish(const builtin_interfaces::msg::Tim
332
329
continue ;
333
330
}
334
331
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) {
338
333
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 ));
349
337
}
350
-
351
338
std::transform (
352
339
unknown_elements.begin (), unknown_elements.end (),
353
340
std::back_inserter (elements_and_priority),
354
341
[](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
+ }
355
351
continue ;
356
352
}
357
353
@@ -361,18 +357,15 @@ void TrafficLightArbiter::arbitrateAndPublish(const builtin_interfaces::msg::Tim
361
357
// Insert unknown signal if not same
362
358
const auto unknown_elements =
363
359
util::create_unknown_elements (perception_result->elements , external_result->elements );
364
-
365
360
std::transform (
366
361
unknown_elements.begin (), unknown_elements.end (),
367
362
std::back_inserter (elements_and_priority),
368
363
[](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
+ }
376
369
}
377
370
}
378
371
};
0 commit comments