Skip to content

Commit beb51db

Browse files
committed
RJD-1509 Optimize number of distance::longitudinalDistance calls
1 parent 5078293 commit beb51db

File tree

3 files changed

+44
-10
lines changed

3 files changed

+44
-10
lines changed

simulation/behavior_tree_plugin/src/action_node.cpp

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -331,26 +331,21 @@ auto ActionNode::getDistanceToTargetEntity(
331331
target_lanelet_pose) {
332332
const auto & from_lanelet_pose = canonicalized_entity_status->getCanonicalizedLaneletPose();
333333
const auto & from_bounding_box = canonicalized_entity_status->getBoundingBox();
334-
if (const auto bounding_box_distance =
335-
traffic_simulator::distance::boundingBoxLaneLongitudinalDistance(
334+
if (const auto bounding_box_distances =
335+
traffic_simulator::distance::laneLongitudinalDistances(
336336
*from_lanelet_pose, from_bounding_box, *target_lanelet_pose, target_bounding_box,
337337
include_adjacent_lanelet, include_opposite_direction, routing_configuration,
338338
hdmap_utils);
339-
!bounding_box_distance || bounding_box_distance.value() < 0.0) {
340-
return std::nullopt;
341-
} else if (const auto position_distance = traffic_simulator::distance::longitudinalDistance(
342-
*from_lanelet_pose, *target_lanelet_pose, include_adjacent_lanelet,
343-
include_opposite_direction, routing_configuration, hdmap_utils);
344-
!position_distance) {
339+
!bounding_box_distances || bounding_box_distances.value().first < 0.0) {
345340
return std::nullopt;
346341
} else {
347342
const auto target_bounding_box_distance =
348-
bounding_box_distance.value() + from_bounding_box.dimensions.x / 2.0;
343+
bounding_box_distances.value().first + from_bounding_box.dimensions.x / 2.0;
349344

350345
/// @note if the distance of the target entity to the spline is smaller than the width of the reference entity
351346
if (const auto target_to_spline_distance = traffic_simulator::distance::distanceToSpline(
352347
static_cast<geometry_msgs::msg::Pose>(*target_lanelet_pose), target_bounding_box,
353-
spline, position_distance.value());
348+
spline, bounding_box_distances.value().second);
354349
target_to_spline_distance <= from_bounding_box.dimensions.y / 2.0) {
355350
return target_bounding_box_distance;
356351
}

simulation/traffic_simulator/include/traffic_simulator/utils/distance.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,15 @@ auto boundingBoxLaneLongitudinalDistance(
7171
const traffic_simulator::RoutingConfiguration & routing_configuration,
7272
const std::shared_ptr<hdmap_utils::HdMapUtils> & hdmap_utils_ptr) -> std::optional<double>;
7373

74+
auto laneLongitudinalDistances(
75+
const CanonicalizedLaneletPose & from,
76+
const traffic_simulator_msgs::msg::BoundingBox & from_bounding_box,
77+
const CanonicalizedLaneletPose & to,
78+
const traffic_simulator_msgs::msg::BoundingBox & to_bounding_box, bool include_adjacent_lanelet,
79+
bool include_opposite_direction,
80+
const traffic_simulator::RoutingConfiguration & routing_configuration,
81+
const std::shared_ptr<hdmap_utils::HdMapUtils> & hdmap_utils_ptr) -> std::optional<std::pair<double,double>>;
82+
7483
// Bounds
7584
auto distanceToLaneBound(
7685
const geometry_msgs::msg::Pose & map_pose,

simulation/traffic_simulator/src/utils/distance.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,36 @@ auto boundingBoxLaneLongitudinalDistance(
197197
return std::nullopt;
198198
}
199199

200+
auto laneLongitudinalDistances(
201+
const CanonicalizedLaneletPose & from,
202+
const traffic_simulator_msgs::msg::BoundingBox & from_bounding_box,
203+
const CanonicalizedLaneletPose & to,
204+
const traffic_simulator_msgs::msg::BoundingBox & to_bounding_box, bool include_adjacent_lanelet,
205+
bool include_opposite_direction,
206+
const traffic_simulator::RoutingConfiguration & routing_configuration,
207+
const std::shared_ptr<hdmap_utils::HdMapUtils> & hdmap_utils_ptr) -> std::optional<std::pair<double,double>>
208+
{
209+
if (const auto longitudinal_distance = longitudinalDistance(
210+
from, to, include_adjacent_lanelet, include_opposite_direction, routing_configuration,
211+
hdmap_utils_ptr);
212+
longitudinal_distance) {
213+
const auto from_bounding_box_distances =
214+
math::geometry::getDistancesFromCenterToEdge(from_bounding_box);
215+
const auto to_bounding_box_distances =
216+
math::geometry::getDistancesFromCenterToEdge(to_bounding_box);
217+
auto bounding_box_distance = 0.0;
218+
if (longitudinal_distance.value() > 0.0) {
219+
bounding_box_distance =
220+
-std::abs(from_bounding_box_distances.front) - std::abs(to_bounding_box_distances.rear);
221+
} else if (longitudinal_distance.value() < 0.0) {
222+
bounding_box_distance =
223+
+std::abs(from_bounding_box_distances.rear) + std::abs(to_bounding_box_distances.front);
224+
}
225+
return std::make_pair(longitudinal_distance.value() + bounding_box_distance, longitudinal_distance.value());
226+
}
227+
return std::nullopt;
228+
}
229+
200230
// Bounds
201231
auto distanceToLeftLaneBound(
202232
const geometry_msgs::msg::Pose & map_pose,

0 commit comments

Comments
 (0)