@@ -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