@@ -343,26 +343,29 @@ std::vector<autoware_auto_planning_msgs::msg::TrajectoryPoint> interpolate2DTraj
343
343
const auto monotonic_base_yaw = convertEulerAngleToMonotonic (base_yaw);
344
344
345
345
// spline interpolation
346
- const auto interpolated_x = interpolation::slerp (base_s, base_x, new_s);
347
- const auto interpolated_y = interpolation::slerp (base_s, base_y, new_s);
348
- const auto interpolated_yaw = interpolation::slerp (base_s, monotonic_base_yaw, new_s);
349
-
350
- for (size_t i = 0 ; i < interpolated_x.size (); i++) {
351
- if (std::isnan (interpolated_x[i]) || std::isnan (interpolated_y[i])) {
352
- return std::vector<autoware_auto_planning_msgs::msg::TrajectoryPoint>{};
346
+ std::vector<autoware_auto_planning_msgs::msg::TrajectoryPoint> interpolated_points;
347
+ try {
348
+ const auto interpolated_x = interpolation::slerp (base_s, base_x, new_s);
349
+ const auto interpolated_y = interpolation::slerp (base_s, base_y, new_s);
350
+ const auto interpolated_yaw = interpolation::slerp (base_s, monotonic_base_yaw, new_s);
351
+
352
+ for (size_t i = 0 ; i < interpolated_x.size (); i++) {
353
+ if (std::isnan (interpolated_x[i]) || std::isnan (interpolated_y[i])) {
354
+ return std::vector<autoware_auto_planning_msgs::msg::TrajectoryPoint>{};
355
+ }
353
356
}
354
- }
355
357
356
- std::vector<autoware_auto_planning_msgs::msg::TrajectoryPoint> interpolated_points;
357
- for (size_t i = 0 ; i < interpolated_x.size (); i++) {
358
- autoware_auto_planning_msgs::msg::TrajectoryPoint point;
359
- point.pose .position .x = interpolated_x[i];
360
- point.pose .position .y = interpolated_y[i];
361
- point.pose .orientation = tier4_autoware_utils::createQuaternionFromYaw (
362
- tier4_autoware_utils::normalizeRadian (interpolated_yaw[i]));
363
- interpolated_points.push_back (point);
358
+ for (size_t i = 0 ; i < interpolated_x.size (); i++) {
359
+ autoware_auto_planning_msgs::msg::TrajectoryPoint point;
360
+ point.pose .position .x = interpolated_x[i];
361
+ point.pose .position .y = interpolated_y[i];
362
+ point.pose .orientation = tier4_autoware_utils::createQuaternionFromYaw (
363
+ tier4_autoware_utils::normalizeRadian (interpolated_yaw[i]));
364
+ interpolated_points.push_back (point);
365
+ }
366
+ } catch (const std::invalid_argument & e) {
367
+ return std::vector<autoware_auto_planning_msgs::msg::TrajectoryPoint>{};
364
368
}
365
-
366
369
return interpolated_points;
367
370
}
368
371
0 commit comments