@@ -478,6 +478,14 @@ bool isWithinIntersection(
478
478
object_polygon, utils::toPolygon2d (lanelet::utils::to2D (polygon.basicPolygon ())));
479
479
}
480
480
481
+ bool isOnEgoLane (const ObjectData & object)
482
+ {
483
+ const auto & object_pos = object.object .kinematics .initial_pose_with_covariance .pose .position ;
484
+ return boost::geometry::within (
485
+ lanelet::utils::to2D (lanelet::utils::conversion::toLaneletPoint (object_pos)).basicPoint (),
486
+ object.overhang_lanelet .polygon2d ().basicPolygon ());
487
+ }
488
+
481
489
bool isParallelToEgoLane (const ObjectData & object, const double threshold)
482
490
{
483
491
const auto & object_pose = object.object .kinematics .initial_pose_with_covariance .pose ;
@@ -525,6 +533,10 @@ bool isParkedVehicle(
525
533
using lanelet::utils::to2D;
526
534
using lanelet::utils::conversion::toLaneletPoint;
527
535
536
+ if (object.is_within_intersection ) {
537
+ return false ;
538
+ }
539
+
528
540
const auto & object_pos = object.object .kinematics .initial_pose_with_covariance .pose .position ;
529
541
const auto centerline_pos =
530
542
lanelet::utils::getClosestCenterPose (object.overhang_lanelet , object_pos).position ;
@@ -652,6 +664,10 @@ bool isForceAvoidanceTarget(
652
664
return false ;
653
665
}
654
666
667
+ if (!object.is_on_ego_lane ) {
668
+ return true ;
669
+ }
670
+
655
671
const auto & ego_pose = planner_data->self_odometry ->pose .pose ;
656
672
657
673
// force avoidance for stopped vehicle
@@ -778,24 +794,16 @@ bool isSatisfiedWithVehicleCondition(
778
794
const std::shared_ptr<const PlannerData> & planner_data,
779
795
const std::shared_ptr<AvoidanceParameters> & parameters)
780
796
{
781
- using boost::geometry::within;
782
- using lanelet::utils::to2D;
783
- using lanelet::utils::conversion::toLaneletPoint;
784
-
785
797
object.behavior = getObjectBehavior (object, parameters);
786
- object.is_within_intersection = isWithinIntersection (object, planner_data-> route_handler );
798
+ object.is_on_ego_lane = isOnEgoLane (object);
787
799
788
800
// from here condition check for vehicle type objects.
789
801
if (isForceAvoidanceTarget (object, data, planner_data, parameters)) {
790
802
return true ;
791
803
}
792
804
793
805
// check vehicle shift ratio
794
- const auto & object_pos = object.object .kinematics .initial_pose_with_covariance .pose .position ;
795
- const auto on_ego_driving_lane = within (
796
- to2D (toLaneletPoint (object_pos)).basicPoint (),
797
- object.overhang_lanelet .polygon2d ().basicPolygon ());
798
- if (on_ego_driving_lane) {
806
+ if (object.is_on_ego_lane ) {
799
807
if (object.is_parked ) {
800
808
return true ;
801
809
} else {
@@ -1755,6 +1763,8 @@ void filterTargetObjects(
1755
1763
}
1756
1764
1757
1765
if (filtering_utils::isVehicleTypeObject (o)) {
1766
+ o.is_within_intersection =
1767
+ filtering_utils::isWithinIntersection (o, planner_data->route_handler );
1758
1768
o.is_parked = filtering_utils::isParkedVehicle (o, planner_data->route_handler , parameters);
1759
1769
o.avoid_margin = filtering_utils::getAvoidMargin (o, planner_data, parameters);
1760
1770
0 commit comments