Skip to content

Commit bd6dcc6

Browse files
feat(lanelet2_utils): add empty input handler for get_arc_coordinates (#831)
* add empty input lanelets handler for get_arc_coordinates Signed-off-by: Sarun Mukdapitak <sarun.mukda@gmail.com> * add test ensure default ArcCoordinates Signed-off-by: Sarun Mukdapitak <sarun.mukda@gmail.com> --------- Signed-off-by: Sarun Mukdapitak <sarun.mukda@gmail.com> Co-authored-by: Junya Sasaki <j2sasaki1990@gmail.com>
1 parent f3d5811 commit bd6dcc6

File tree

2 files changed

+29
-9
lines changed

2 files changed

+29
-9
lines changed

common/autoware_lanelet2_utils/src/geometry.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,13 @@ geometry_msgs::msg::Pose get_closest_center_pose(
352352
lanelet::ArcCoordinates get_arc_coordinates(
353353
const lanelet::ConstLanelets & lanelets, const geometry_msgs::msg::Pose & pose)
354354
{
355+
// Handle empty Input (Return default ArcCoordinates)
356+
if (lanelets.empty()) {
357+
RCLCPP_WARN(
358+
rclcpp::get_logger("autoware_lanelet2_utility"),
359+
"Input lanelets is empty. Returning default ArcCoordinates (length=0, distance=0).");
360+
return lanelet::ArcCoordinates();
361+
}
355362
const auto lanelet_sequence = lanelet::LaneletSequence(lanelets);
356363
const auto centerline_2d = lanelet_sequence.centerline2d();
357364

common/autoware_lanelet2_utils/test/geometry.cpp

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,20 @@ TEST(GetClosestCenterPoseTest, getInclineDownPose)
490490
expect_quat_eq(out.orientation, expected_quat);
491491
}
492492

493-
// Test 23: get_arc_coordinates ordinary case
493+
// Test 23: get_arc_coordinates empty case
494+
TEST(GetArcCoordinates, get_arc_coordinateEmptyCase)
495+
{
496+
auto empty_lanelet_sequence = lanelet::ConstLanelets{};
497+
498+
// random query pose
499+
auto query = make_pose(1.5, 1.1);
500+
auto arc_coord =
501+
autoware::experimental::lanelet2_utils::get_arc_coordinates(empty_lanelet_sequence, query);
502+
EXPECT_EQ(arc_coord.length, 0);
503+
EXPECT_EQ(arc_coord.distance, 0);
504+
}
505+
506+
// Test 24: get_arc_coordinates ordinary case
494507
TEST(GetArcCoordinates, get_arc_coordinateOrdinaryCase)
495508
{
496509
using autoware::experimental::lanelet2_utils::create_safe_lanelet;
@@ -535,7 +548,7 @@ TEST(GetArcCoordinates, get_arc_coordinateOrdinaryCase)
535548
}
536549
}
537550

538-
// Test 24: get_lateral_distance_to_centerline ordinary case
551+
// Test 25: get_lateral_distance_to_centerline ordinary case
539552
TEST(GetLateralDistanceToCenterline, get_lateral_distance_to_centerlineOrdinaryCase)
540553
{
541554
using autoware::experimental::lanelet2_utils::create_safe_lanelet;
@@ -566,7 +579,7 @@ TEST(GetLateralDistanceToCenterline, get_lateral_distance_to_centerlineOrdinaryC
566579
}
567580
}
568581

569-
// Test 25: get_lateral_distance_to_centerline lanelet sequence
582+
// Test 26: get_lateral_distance_to_centerline lanelet sequence
570583
TEST(GetLateralDistanceToCenterline, get_lateral_distance_to_centerlineLaneletSequence)
571584
{
572585
using autoware::experimental::lanelet2_utils::create_safe_lanelet;
@@ -609,7 +622,7 @@ TEST(GetLateralDistanceToCenterline, get_lateral_distance_to_centerlineLaneletSe
609622
}
610623
}
611624

612-
// Test 26: combine_lanelets_shape with duplicate point
625+
// Test 27: combine_lanelets_shape with duplicate point
613626
TEST(LaneletManipulation, CombineLaneletsWithDuplicatePoint)
614627
{
615628
using autoware::experimental::lanelet2_utils::create_safe_lanelet;
@@ -644,7 +657,7 @@ TEST(LaneletManipulation, CombineLaneletsWithDuplicatePoint)
644657
EXPECT_EQ(one_lanelet.rightBound().size(), 3);
645658
}
646659
}
647-
// Test 27: get_dirty_expanded_lanelet ordinary case
660+
// Test 28: get_dirty_expanded_lanelet ordinary case
648661
TEST(LaneletManipulation, getExpandedLaneletOrdinaryCase)
649662
{
650663
using autoware::experimental::lanelet2_utils::create_safe_lanelet;
@@ -704,7 +717,7 @@ TEST(LaneletManipulation, getExpandedLaneletOrdinaryCase)
704717
}
705718
}
706719

707-
// Test 28: get_dirty_expanded_lanelet corner case
720+
// Test 29: get_dirty_expanded_lanelet corner case
708721
TEST(LaneletManipulation, getExpandedLaneletCornerCase)
709722
{
710723
using autoware::experimental::lanelet2_utils::create_safe_lanelet;
@@ -743,7 +756,7 @@ TEST(LaneletManipulation, getExpandedLaneletCornerCase)
743756
}
744757
}
745758

746-
// Test 29: get_dirty_expanded_lanelets ordinary case
759+
// Test 30: get_dirty_expanded_lanelets ordinary case
747760
TEST(LaneletManipulation, getExpandedLaneletsOrdinaryCase)
748761
{
749762
using autoware::experimental::lanelet2_utils::create_safe_lanelet;
@@ -820,7 +833,7 @@ TEST(LaneletManipulation, getExpandedLaneletsOrdinaryCase)
820833
}
821834
}
822835

823-
// Test 30: get bound with offset - Ordinary Case (same length)
836+
// Test 31: get bound with offset - Ordinary Case (same length)
824837
TEST(LaneletManipulation, getBoundOrdinaryCase)
825838
{
826839
using autoware::experimental::lanelet2_utils::create_safe_lanelet;
@@ -948,7 +961,7 @@ TEST(LaneletManipulation, getBoundOrdinaryCase)
948961
}
949962
}
950963

951-
// Test 31: get bound with offset - different length (the distance between each pair is not
964+
// Test 32: get bound with offset - different length (the distance between each pair is not
952965
// constant)
953966
TEST(LaneletManipulation, getBoundDifferentLength)
954967
{

0 commit comments

Comments
 (0)