diff --git a/modules/planning/optimizer/qp_spline_st_speed/qp_spline_st_speed_optimizer.cc b/modules/planning/optimizer/qp_spline_st_speed/qp_spline_st_speed_optimizer.cc index 615d4a829dfe1847481dfa290e0a01d87764afd6..5fec113f719b609a085a39b73a254705202beef1 100644 --- a/modules/planning/optimizer/qp_spline_st_speed/qp_spline_st_speed_optimizer.cc +++ b/modules/planning/optimizer/qp_spline_st_speed/qp_spline_st_speed_optimizer.cc @@ -59,6 +59,32 @@ bool QpSplineStSpeedOptimizer::Init() { return true; } +void QpSplineStSpeedOptimizer::RecordSTGraphDebug( + const std::vector& boundaries, + const SpeedLimit& speed_limits) { + if (!FLAGS_enable_record_debug) { + ADEBUG << "Skip record debug info"; + return; + } + + auto debug = frame_->MutableADCTrajectory()->mutable_debug(); + auto st_graph_debug = debug->mutable_planning_data()->add_st_graph(); + st_graph_debug->set_name(name()); + for (const auto& boundary : boundaries) { + auto boundary_debug = st_graph_debug->add_boundary(); + boundary_debug->set_name(boundary.id()); + for (const auto& point : boundary.points()) { + auto point_debug = boundary_debug->add_point(); + point_debug->set_t(point.x()); + point_debug->set_s(point.y()); + } + } + + st_graph_debug->mutable_speed_limit()->CopyFrom( + {speed_limits.speed_points().begin(), + speed_limits.speed_points().end()}); +} + Status QpSplineStSpeedOptimizer::Process(const PathData& path_data, const TrajectoryPoint& init_point, const ReferenceLine& reference_line, @@ -88,6 +114,7 @@ Status QpSplineStSpeedOptimizer::Process(const PathData& path_data, return Status(ErrorCode::PLANNING_ERROR, "Mapping obstacle for dp st speed optimizer failed!"); } + RecordSTGraphDebug(boundaries, speed_limits); // step 2 perform graph search const auto& veh_param = diff --git a/modules/planning/optimizer/qp_spline_st_speed/qp_spline_st_speed_optimizer.h b/modules/planning/optimizer/qp_spline_st_speed/qp_spline_st_speed_optimizer.h index b841887d94ff235cb771251e9821c5b1275a8425..3e108466e6f4f16938c821de25fae1c27291f569 100644 --- a/modules/planning/optimizer/qp_spline_st_speed/qp_spline_st_speed_optimizer.h +++ b/modules/planning/optimizer/qp_spline_st_speed/qp_spline_st_speed_optimizer.h @@ -45,6 +45,10 @@ class QpSplineStSpeedOptimizer : public SpeedOptimizer { const ReferenceLine& reference_line, DecisionData* const decision_data, SpeedData* const speed_data) override; + + void RecordSTGraphDebug(const std::vector& boundaries, + const SpeedLimit& speed_limits); + QpSplineStSpeedConfig qp_spline_st_speed_config_; StBoundaryConfig st_boundary_config_; }; diff --git a/modules/planning/planner/em/em_planner.cc b/modules/planning/planner/em/em_planner.cc index 612ac1024c390f5379446f60edd42d8320036a63..2659e22c99bc5463dfd3ab8a4173cbe99b89c29e 100644 --- a/modules/planning/planner/em/em_planner.cc +++ b/modules/planning/planner/em/em_planner.cc @@ -88,6 +88,10 @@ void EMPlanner::RecordDebugInfo(const std::string& name, const double time_diff_ms, planning_internal::Debug* ptr_debug, planning::LatencyStats* ptr_latency_stats) { + if (!FLAGS_enable_record_debug) { + ADEBUG << "Skip record debug info"; + return; + } OptimizerType type; DCHECK(OptimizerType_Parse(name, &type)); if (type == DP_POLY_PATH_OPTIMIZER || type == QP_SPLINE_PATH_OPTIMIZER) { diff --git a/modules/planning/proto/planning_internal.proto b/modules/planning/proto/planning_internal.proto index 0fedf51b629ae992d98d13f4005ac499c51c1493..30f811967c61ff81d3c4256ac8cc8a9a02156a2d 100644 --- a/modules/planning/proto/planning_internal.proto +++ b/modules/planning/proto/planning_internal.proto @@ -92,14 +92,10 @@ message StGraphBoundaryDebug { repeated apollo.common.SpeedPoint point = 2; } -message SpeedLimitDebug { - repeated apollo.common.SpeedPoint point = 1; -} - message STGraphDebug { optional string name = 1; repeated StGraphBoundaryDebug boundary = 2; - optional SpeedLimitDebug speed_limit = 3; + repeated apollo.common.SpeedPoint speed_limit = 3; } // next id: 15