@@ -399,6 +399,40 @@ TurnIndicatorsCommand TurnSignalDecider::resolve_turn_signal(
399
399
return intersection_signal_info.turn_signal ;
400
400
}
401
401
402
+ TurnSignalInfo TurnSignalDecider::overwrite_turn_signal (
403
+ const PathWithLaneId & path, const Pose & current_pose, const size_t current_seg_idx,
404
+ const TurnSignalInfo & original_signal, const TurnSignalInfo & new_signal,
405
+ const double nearest_dist_threshold, const double nearest_yaw_threshold) const
406
+ {
407
+ if (original_signal.turn_signal .command == TurnIndicatorsCommand::NO_COMMAND) {
408
+ return new_signal;
409
+ }
410
+
411
+ if (original_signal.turn_signal .command == TurnIndicatorsCommand::DISABLE) {
412
+ return new_signal;
413
+ }
414
+
415
+ const auto get_distance = [&](const Pose & input_point) {
416
+ const size_t nearest_seg_idx = motion_utils::findFirstNearestSegmentIndexWithSoftConstraints (
417
+ path.points , input_point, nearest_dist_threshold, nearest_yaw_threshold);
418
+ return motion_utils::calcSignedArcLength (
419
+ path.points , current_pose.position , current_seg_idx, input_point.position ,
420
+ nearest_seg_idx) -
421
+ base_link2front_;
422
+ };
423
+
424
+ const auto & original_desired_end_point = original_signal.desired_end_point ;
425
+ const auto & new_desired_start_point = new_signal.desired_start_point ;
426
+
427
+ const double dist_to_original_desired_end = get_distance (original_desired_end_point);
428
+ const double dist_to_new_desired_start = get_distance (new_desired_start_point);
429
+ if (dist_to_new_desired_start > dist_to_original_desired_end) {
430
+ return original_signal;
431
+ }
432
+
433
+ return new_signal;
434
+ }
435
+
402
436
TurnSignalInfo TurnSignalDecider::use_prior_turn_signal (
403
437
const PathWithLaneId & path, const Pose & current_pose, const size_t current_seg_idx,
404
438
const TurnSignalInfo & original_signal, const TurnSignalInfo & new_signal,
@@ -622,6 +656,8 @@ std::pair<TurnSignalInfo, bool> TurnSignalDecider::getBehaviorTurnSignalInfo(
622
656
const double current_shift_length, const bool is_driving_forward, const bool egos_lane_is_shifted,
623
657
const bool override_ego_stopped_check, const bool is_pull_out) const
624
658
{
659
+ using tier4_autoware_utils::getPose;
660
+
625
661
const auto & p = parameters;
626
662
const auto & rh = route_handler;
627
663
const auto & ego_pose = self_odometry->pose .pose ;
@@ -674,16 +710,19 @@ std::pair<TurnSignalInfo, bool> TurnSignalDecider::getBehaviorTurnSignalInfo(
674
710
675
711
const auto relative_shift_length = end_shift_length - start_shift_length;
676
712
713
+ const auto p_path_start = getPose (path.path .points .front ());
714
+ const auto p_path_end = getPose (path.path .points .back ());
715
+
677
716
// If shift length is shorter than the threshold, it does not need to turn on blinkers
678
717
if (std::fabs (relative_shift_length) < p.turn_signal_shift_length_threshold ) {
679
- return std::make_pair (TurnSignalInfo{} , true );
718
+ return std::make_pair (TurnSignalInfo (p_path_start, p_path_end) , true );
680
719
}
681
720
682
721
// If the vehicle does not shift anymore, we turn off the blinker
683
722
if (
684
723
std::fabs (end_shift_length - current_shift_length) <
685
724
p.turn_signal_remaining_shift_length_threshold ) {
686
- return std::make_pair (TurnSignalInfo{} , true );
725
+ return std::make_pair (TurnSignalInfo (p_path_start, p_path_end) , true );
687
726
}
688
727
689
728
const auto get_command = [](const auto & shift_length) {
@@ -698,7 +737,7 @@ std::pair<TurnSignalInfo, bool> TurnSignalDecider::getBehaviorTurnSignalInfo(
698
737
p.vehicle_info .max_longitudinal_offset_m ;
699
738
700
739
if (signal_prepare_distance < ego_front_to_shift_start) {
701
- return std::make_pair (TurnSignalInfo{} , false );
740
+ return std::make_pair (TurnSignalInfo (p_path_start, p_path_end) , false );
702
741
}
703
742
704
743
const auto blinker_start_pose = path.path .points .at (shift_line.start_idx ).point .pose ;
@@ -715,13 +754,13 @@ std::pair<TurnSignalInfo, bool> TurnSignalDecider::getBehaviorTurnSignalInfo(
715
754
turn_signal_info.turn_signal .command = get_command (relative_shift_length);
716
755
717
756
if (!p.turn_signal_on_swerving ) {
718
- return std::make_pair (turn_signal_info , false );
757
+ return std::make_pair (TurnSignalInfo (p_path_start, p_path_end) , false );
719
758
}
720
759
721
760
lanelet::ConstLanelet lanelet;
722
761
const auto query_pose = (egos_lane_is_shifted) ? shift_line.end : shift_line.start ;
723
762
if (!rh->getClosestLaneletWithinRoute (query_pose, &lanelet)) {
724
- return std::make_pair (TurnSignalInfo{} , true );
763
+ return std::make_pair (TurnSignalInfo (p_path_start, p_path_end) , true );
725
764
}
726
765
727
766
const auto left_same_direction_lane = rh->getLeftLanelet (lanelet, true , true );
@@ -736,13 +775,13 @@ std::pair<TurnSignalInfo, bool> TurnSignalDecider::getBehaviorTurnSignalInfo(
736
775
!is_pull_out && !existShiftSideLane (
737
776
start_shift_length, end_shift_length, !has_left_lane, !has_right_lane,
738
777
p.turn_signal_shift_length_threshold )) {
739
- return std::make_pair (TurnSignalInfo{} , true );
778
+ return std::make_pair (TurnSignalInfo (p_path_start, p_path_end) , true );
740
779
}
741
780
742
781
// Check if the ego will cross lane bounds.
743
782
// Note that pull out requires blinkers, even if the ego does not cross lane bounds
744
783
if (!is_pull_out && !straddleRoadBound (path, shift_line, current_lanelets, p.vehicle_info )) {
745
- return std::make_pair (TurnSignalInfo{} , true );
784
+ return std::make_pair (TurnSignalInfo (p_path_start, p_path_end) , true );
746
785
}
747
786
748
787
// If the ego has stopped and its close to completing its shift, turn off the blinkers
@@ -751,7 +790,7 @@ std::pair<TurnSignalInfo, bool> TurnSignalDecider::getBehaviorTurnSignalInfo(
751
790
if (isNearEndOfShift (
752
791
start_shift_length, end_shift_length, ego_pose.position , current_lanelets,
753
792
p.turn_signal_shift_length_threshold )) {
754
- return std::make_pair (TurnSignalInfo{} , true );
793
+ return std::make_pair (TurnSignalInfo (p_path_start, p_path_end) , true );
755
794
}
756
795
}
757
796
0 commit comments