modules/planning/tasks/piecewise_jerk_speed/README_cn.md
PiecewiseJerkSpeedOptimizer任务基于二次规划在凸ST空间的速度规划算法,优化的速度规划结果保存在reference_line_info_的st_graph_data_中。
if (reference_line_info_->ReachedDestination()) {
return Status::OK();
}
PiecewiseJerkSpeedProblem piecewise_jerk_problem(num_of_knots, delta_t, init_s);
for (int i = 0; i < num_of_knots; ++i) {
double curr_t = i * delta_t;
double s_lower_bound = 0.0;
double s_upper_bound = total_length;
for (const STBoundary* boundary : st_graph_data.st_boundaries()) {
double s_lower = 0.0;
double s_upper = 0.0;
if (!boundary->GetUnblockSRange(curr_t, &s_upper, &s_lower)) {
continue;
}
switch (boundary->boundary_type()) {
case STBoundary::BoundaryType::STOP:
case STBoundary::BoundaryType::YIELD:
s_upper_bound = std::fmin(s_upper_bound, s_upper);
break;
case STBoundary::BoundaryType::FOLLOW:
// TODO(Hongyi): unify follow buffer on decision side
s_upper_bound = std::fmin(s_upper_bound,
s_upper - config_.follow_distance_buffer());
break;
case STBoundary::BoundaryType::OVERTAKE:
s_lower_bound = std::fmax(s_lower_bound, s_lower);
break;
default:
break;
}
}
print_debug.AddPoint("st_bounds_lower", curr_t, s_lower_bound);
print_debug.AddPoint("st_bounds_upper", curr_t, s_upper_bound);
if (s_lower_bound > s_upper_bound) {
const std::string msg =
"s_lower_bound larger than s_upper_bound on STGraph";
AERROR << msg;
speed_data->clear();
print_debug.PrintToLog();
return Status(ErrorCode::PLANNING_ERROR, msg);
}
s_bounds.emplace_back(s_lower_bound, s_upper_bound);
}
piecewise_jerk_problem.Optimize()SpeedProfileGenerator::FillEnoughSpeedPoints(speed_data);
modules/planning/tasks/piecewise_jerk_speed/
├── BUILD
├── conf
│ └── default_conf.pb.txt
├── cyberfile.xml
├── piecewise_jerk_speed_optimizer.cc
├── piecewise_jerk_speed_optimizer.h
├── plugins.xml
├── proto
│ ├── BUILD
│ └── piecewise_jerk_speed.proto
└── README_cn.md
apollo::planning::PiecewiseJerkSpeedOptimizer
| 文件路径 | 类型/结构 | <div style="width: 300pt">说明</div> |
|---|---|---|
modules/planning/tasks/piecewise_jerk_speed/conf/default_conf.pb.txt | apollo::planning::SpeedHeuristicOptimizerConfig | PathTimeHeuristicOptimizer的默认配置文件 |
| 文件路径 | <div style="width: 300pt">说明</div> |
|---|---|
modules/planning/planning_component/conf/planning.conf | planning模块的flag配置文件 |
算法参数配置定义于modules/planning/tasks/piecewise_jerk_speed/proto/piecewise_jerk_speed.proto
| acc_weight | 加速度权重 |
|---|---|
| jerk_weight | 加加速度权重 |
| kappa_penalty_weight | 曲率惩罚权重 |
| ref_s_weight | 参考位置权重 |
| ref_v_weight | 参考速度权重 |
| follow_distance_buffer | 跟车距离缓冲 |
modules/planning/planning_base/common/planning_gflags.cc中定义了用到的命令行参数,planning.conf中定义命令行参数值。
| flag | 描述 |
|---|---|
| FLAGS_longitudinal_jerk_lower_bound | 速度规划加加速度下边界 |
| FLAGS_longitudinal_jerk_upper_bound | 速度规划加加速度上边界 |
| FLAGS_planning_upper_speed_limit | 最大速度 |
在 modules/planning/scenarios/xxxx/conf/pipeline.pb.txt 在期望增加PiecewiseJerkSpeedOptimizer插件的scenarios xxxx中增加相应的配置,配置参数中name 表示task的名称,这个由用户自定义,表达清楚是哪个task即可,type 是task的类名称,即PiecewiseJerkSpeedOptimizer。
task {
name: "PIECEWISE_JERK_SPEED"
type: "PiecewiseJerkSpeedOptimizer"
}