44 {
45
46 if (path_boundaries.empty()) {
47 AINFO <<
"path boundary is empty!";
48 return;
49 }
50 CHECK_NOTNULL(reference_line_info);
51
52
53
54 std::vector<common::FrenetFramePoint> frenet_frame_left_boundaries;
55 std::vector<common::FrenetFramePoint> frenet_frame_right_boundaries;
56 for (const PathBoundPoint& path_bound_point : path_boundaries) {
57 common::FrenetFramePoint frenet_frame_point;
58 frenet_frame_point.set_s(path_bound_point.s);
59 frenet_frame_point.set_dl(0.0);
60 frenet_frame_point.set_ddl(0.0);
61
62 frenet_frame_point.set_l(path_bound_point.l_lower.l);
63 frenet_frame_right_boundaries.push_back(frenet_frame_point);
64 frenet_frame_point.set_l(path_bound_point.l_upper.l);
65 frenet_frame_left_boundaries.push_back(frenet_frame_point);
66 }
67
68 auto frenet_frame_left_path =
69 FrenetFramePath(std::move(frenet_frame_left_boundaries));
70 auto frenet_frame_right_path =
71 FrenetFramePath(std::move(frenet_frame_right_boundaries));
72
73 PathData left_path_data;
74 left_path_data.SetReferenceLine(&(reference_line_info->reference_line()));
75 left_path_data.SetFrenetPath(std::move(frenet_frame_left_path));
76 PathData right_path_data;
77 right_path_data.SetReferenceLine(&(reference_line_info->reference_line()));
78 right_path_data.SetFrenetPath(std::move(frenet_frame_right_path));
79
80
81 auto* ptr_display_path_1 =
82 reference_line_info->mutable_debug()->mutable_planning_data()->add_path();
83 ptr_display_path_1->set_name(std::string("planning_path_boundary_1_") +
84 debug_name);
85 ptr_display_path_1->mutable_path_point()->CopyFrom(
86 {left_path_data.discretized_path().begin(),
87 left_path_data.discretized_path().end()});
88 auto* ptr_display_path_2 =
89 reference_line_info->mutable_debug()->mutable_planning_data()->add_path();
90 ptr_display_path_2->set_name(std::string("planning_path_boundary_2_") +
91 debug_name);
92 ptr_display_path_2->mutable_path_point()->CopyFrom(
93 {right_path_data.discretized_path().begin(),
94 right_path_data.discretized_path().end()});
95}