Skip to content

Commit d20ba87

Browse files
fix: unable to asign lanelet_id to centerpoint near the boundary line (#350)
Signed-off-by: t4-adc <grp-rd-1-adc-admin@tier4.jp> Co-authored-by: t4-adc <grp-rd-1-adc-admin@tier4.jp>
1 parent 12c444b commit d20ba87

1 file changed

Lines changed: 26 additions & 1 deletion

File tree

planning/autoware_static_centerline_generator/src/static_centerline_generator_node.cpp

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -781,6 +781,7 @@ void StaticCenterlineGeneratorNode::connect_centerline_to_lanelet()
781781
size_t centerline_idx = 0;
782782
bool is_end_lanelet = false;
783783
bool was_once_inside_lanelet = false;
784+
lanelet::Id last_assigned_lane_id = route_lanelets.empty() ? 0 : route_lanelets.front().id();
784785
for (size_t lanelet_idx = centerline_front_lanelet_idx ? centerline_front_lanelet_idx.value() : 0;
785786
lanelet_idx < route_lanelets.size(); ++lanelet_idx) {
786787
const auto & lanelet = route_lanelets.at(lanelet_idx);
@@ -806,7 +807,8 @@ void StaticCenterlineGeneratorNode::connect_centerline_to_lanelet()
806807
}
807808

808809
// register the lane of the centerline point.
809-
centerline_handler_.add_centerline_lane_id(lanelet.id());
810+
last_assigned_lane_id = lanelet.id();
811+
centerline_handler_.add_centerline_lane_id(last_assigned_lane_id);
810812
centerline_idx++;
811813

812814
if (centerline_idx == centerline.size()) {
@@ -820,6 +822,13 @@ void StaticCenterlineGeneratorNode::connect_centerline_to_lanelet()
820822
}
821823
}
822824

825+
// 3. Assign lane_id to remaining centerline points that were not assigned
826+
// This can happen if the centerline extends beyond the last lanelet
827+
while (centerline_idx < centerline.size()) {
828+
centerline_handler_.add_centerline_lane_id(last_assigned_lane_id);
829+
centerline_idx++;
830+
}
831+
823832
if (centerline.size() != centerline_handler_.get_centerline_lane_ids().size()) {
824833
RCLCPP_ERROR_STREAM(
825834
get_logger(), "The size of the centerline and its lanelets is not the same. "
@@ -911,6 +920,14 @@ void StaticCenterlineGeneratorNode::validate_centerline()
911920
const auto centerline = centerline_handler_.get_selected_centerline();
912921
const auto centerline_lane_ids = centerline_handler_.get_centerline_lane_ids();
913922

923+
// Check if sizes match
924+
if (centerline.size() != centerline_lane_ids.size()) {
925+
RCLCPP_ERROR_STREAM(
926+
get_logger(), "Cannot validate centerline: size mismatch. centerline: "
927+
<< centerline.size() << ", lane_ids: " << centerline_lane_ids.size());
928+
return;
929+
}
930+
914931
const double dist_thresh_to_road_border =
915932
getRosParameter<double>("validation.dist_threshold_to_road_border");
916933
const double max_steer_angle_margin =
@@ -1147,6 +1164,14 @@ void StaticCenterlineGeneratorNode::save_map()
11471164
const auto centerline = centerline_handler_.get_selected_centerline();
11481165
const auto centerline_lane_ids = centerline_handler_.get_centerline_lane_ids();
11491166

1167+
// Check if sizes match
1168+
if (centerline.size() != centerline_lane_ids.size()) {
1169+
RCLCPP_ERROR_STREAM(
1170+
get_logger(), "Cannot save map: size mismatch. centerline: "
1171+
<< centerline.size() << ", lane_ids: " << centerline_lane_ids.size());
1172+
return;
1173+
}
1174+
11501175
const auto lanelet2_output_file_path = getRosParameter<std::string>("lanelet2_output_file_path");
11511176

11521177
// update centerline in map

0 commit comments

Comments
 (0)