|
38 | 38 | #include <geometry_msgs/msg/detail/pose__struct.hpp>
|
39 | 39 |
|
40 | 40 | #include <boost/geometry/algorithms/detail/disjoint/interface.hpp>
|
| 41 | +#include <boost/geometry/algorithms/difference.hpp> |
41 | 42 |
|
42 | 43 | #include <lanelet2_core/LaneletMap.h>
|
43 | 44 | #include <lanelet2_core/geometry/LineString.h>
|
@@ -1212,11 +1213,18 @@ LanesPolygon create_lanes_polygon(const CommonDataPtr & common_data_ptr)
|
1212 | 1213 | const auto expanded_target_lanes = utils::lane_change::generateExpandedLanelets(
|
1213 | 1214 | lanes->target, common_data_ptr->direction, lc_param_ptr->lane_expansion_left_offset,
|
1214 | 1215 | lc_param_ptr->lane_expansion_right_offset);
|
1215 |
| - lanes_polygon.expanded_target = utils::lane_change::createPolygon( |
| 1216 | + |
| 1217 | + const auto expanded_target_polygon = utils::lane_change::createPolygon( |
1216 | 1218 | expanded_target_lanes, 0.0, std::numeric_limits<double>::max());
|
1217 | 1219 |
|
1218 | 1220 | lanes_polygon.target_neighbor = *utils::lane_change::createPolygon(
|
1219 | 1221 | lanes->target_neighbor, 0.0, std::numeric_limits<double>::max());
|
| 1222 | + std::vector<lanelet::BasicPolygon2d> difference; |
| 1223 | + boost::geometry::difference(*expanded_target_polygon, *lanes_polygon.target, difference); |
| 1224 | + |
| 1225 | + if (!difference.empty()) { |
| 1226 | + lanes_polygon.expanded_target = std::make_optional<lanelet::BasicPolygon2d>(difference.front()); |
| 1227 | + } |
1220 | 1228 |
|
1221 | 1229 | lanes_polygon.preceding_target.reserve(lanes->preceding_target.size());
|
1222 | 1230 | for (const auto & preceding_lane : lanes->preceding_target) {
|
|
0 commit comments