@@ -516,35 +516,18 @@ bool isMergingToEgoLane(const ObjectData & object)
516
516
return true ;
517
517
}
518
518
519
- bool isObjectOnRoadShoulder (
519
+ bool isParkedVehicle (
520
520
ObjectData & object, const std::shared_ptr<RouteHandler> & route_handler,
521
521
const std::shared_ptr<AvoidanceParameters> & parameters)
522
522
{
523
- using boost::geometry::within;
524
523
using lanelet::geometry::distance2d;
525
524
using lanelet::geometry::toArcCoordinates;
526
525
using lanelet::utils::to2D;
527
526
using lanelet::utils::conversion::toLaneletPoint;
528
527
529
- // assume that there are no parked vehicles in intersection.
530
- std::string turn_direction = object.overhang_lanelet .attributeOr (" turn_direction" , " else" );
531
- if (turn_direction == " right" || turn_direction == " left" || turn_direction == " straight" ) {
532
- return false ;
533
- }
534
-
535
- // ============================================ <- most_left_lanelet.leftBound()
536
- // y road shoulder
537
- // ^ ------------------------------------------
538
- // | x +
539
- // +---> --- object closest lanelet --- o ----- <- object_closest_lanelet.centerline()
540
- //
541
- // --------------------------------------------
542
- // +: object position
543
- // o: nearest point on centerline
544
-
545
- const auto & object_pose = object.object .kinematics .initial_pose_with_covariance .pose ;
528
+ const auto & object_pos = object.object .kinematics .initial_pose_with_covariance .pose .position ;
546
529
const auto centerline_pos =
547
- lanelet::utils::getClosestCenterPose (object.overhang_lanelet , object_pose. position ).position ;
530
+ lanelet::utils::getClosestCenterPose (object.overhang_lanelet , object_pos ).position ;
548
531
549
532
bool is_left_side_parked_vehicle = false ;
550
533
if (!isOnRight (object)) {
@@ -580,7 +563,7 @@ bool isObjectOnRoadShoulder(
580
563
581
564
const auto arc_coordinates = toArcCoordinates (
582
565
to2D (object.overhang_lanelet .centerline ().basicLineString ()),
583
- to2D (toLaneletPoint (object_pose. position )).basicPoint ());
566
+ to2D (toLaneletPoint (object_pos )).basicPoint ());
584
567
object.shiftable_ratio = arc_coordinates.distance / object_shiftable_distance;
585
568
586
569
is_left_side_parked_vehicle = object.shiftable_ratio > parameters->object_check_shiftable_ratio ;
@@ -620,7 +603,7 @@ bool isObjectOnRoadShoulder(
620
603
621
604
const auto arc_coordinates = toArcCoordinates (
622
605
to2D (object.overhang_lanelet .centerline ().basicLineString ()),
623
- to2D (toLaneletPoint (object_pose. position )).basicPoint ());
606
+ to2D (toLaneletPoint (object_pos )).basicPoint ());
624
607
object.shiftable_ratio = -1.0 * arc_coordinates.distance / object_shiftable_distance;
625
608
626
609
is_right_side_parked_vehicle =
@@ -813,7 +796,7 @@ bool isSatisfiedWithVehicleCondition(
813
796
to2D (toLaneletPoint (object_pos)).basicPoint (),
814
797
object.overhang_lanelet .polygon2d ().basicPolygon ());
815
798
if (on_ego_driving_lane) {
816
- if (isObjectOnRoadShoulder ( object, planner_data-> route_handler , parameters) ) {
799
+ if (object. is_parked ) {
817
800
return true ;
818
801
} else {
819
802
object.reason = AvoidanceDebugFactor::NOT_PARKING_OBJECT;
@@ -1751,7 +1734,6 @@ void filterTargetObjects(
1751
1734
// Find the footprint point closest to the path, set to object_data.overhang_distance.
1752
1735
o.overhang_points = utils::avoidance::calcEnvelopeOverhangDistance (o, data.reference_path );
1753
1736
o.to_road_shoulder_distance = filtering_utils::getRoadShoulderDistance (o, data, planner_data);
1754
- o.avoid_margin = filtering_utils::getAvoidMargin (o, planner_data, parameters);
1755
1737
1756
1738
// TODO(Satoshi Ota) parametrize stop time threshold if need.
1757
1739
constexpr double STOP_TIME_THRESHOLD = 3.0 ; // [s]
@@ -1763,17 +1745,28 @@ void filterTargetObjects(
1763
1745
}
1764
1746
}
1765
1747
1766
- if (filtering_utils::isNoNeedAvoidanceBehavior (o, parameters)) {
1767
- data.other_objects .push_back (o);
1768
- continue ;
1769
- }
1770
-
1771
1748
if (filtering_utils::isVehicleTypeObject (o)) {
1749
+ o.is_parked = filtering_utils::isParkedVehicle (o, planner_data->route_handler , parameters);
1750
+ o.avoid_margin = filtering_utils::getAvoidMargin (o, planner_data, parameters);
1751
+
1752
+ if (filtering_utils::isNoNeedAvoidanceBehavior (o, parameters)) {
1753
+ data.other_objects .push_back (o);
1754
+ continue ;
1755
+ }
1756
+
1772
1757
if (!filtering_utils::isSatisfiedWithVehicleCondition (o, data, planner_data, parameters)) {
1773
1758
data.other_objects .push_back (o);
1774
1759
continue ;
1775
1760
}
1776
1761
} else {
1762
+ o.is_parked = false ;
1763
+ o.avoid_margin = filtering_utils::getAvoidMargin (o, planner_data, parameters);
1764
+
1765
+ if (filtering_utils::isNoNeedAvoidanceBehavior (o, parameters)) {
1766
+ data.other_objects .push_back (o);
1767
+ continue ;
1768
+ }
1769
+
1777
1770
if (!filtering_utils::isSatisfiedWithNonVehicleCondition (o, data, planner_data, parameters)) {
1778
1771
data.other_objects .push_back (o);
1779
1772
continue ;
0 commit comments