1. 泊车轨迹优化背后的工程挑战
凌晨三点的地下车库,我盯着屏幕上那条扭曲的泊车轨迹线,第17次按下仿真运行键。突然意识到Apollo的轨迹优化模块远比想象中复杂——它不是简单的数学公式堆砌,而是多个子系统在实时博弈的艺术品。
泊车场景的特殊性在于,它把自动驾驶的三大矛盾集中爆发在一个20km/h的低速场景里:
- 路径平滑性 vs 避障安全性
- 计算实时性 vs 优化最优性
- 车辆动力学约束 vs 几何空间约束
这三个"不可能三角"迫使工程师们开发出一套组合拳策略。今天我们就解剖代码里的三个关键角色:
- 基于样条的几何规划器(Spline Planner)
- 带安全走廊的QP优化器(QP Optimizer)
- 动态权重调整器(Weight Tuner)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心模块的代码级互动解析
2.1 Spline Planner的暴力美学
在modules/planning/math/smoothing_spline中,这个模块用三次样条曲线粗暴地拟合初始轨迹。关键点在于它处理了两类约束:
cpp复制// 硬约束示例(必须满足)
struct Constraint {
double relative_time;
double x, y, theta, kappa; // 位姿+曲率
bool is_fixed; // 是否锁定该点
};
// 软约束示例(尽量满足)
struct SoftConstraint {
double relative_time;
double desired_speed;
double desired_acc;
};
实际运行时会看到有趣现象:当检测到窄车位时,代码会主动降低样条曲线的阶数(从5次降到3次)。这是用精度换稳定性的典型操作,因为高阶多项式在狭窄空间容易产生抖动。
避坑提示:不要盲目追求样条平滑度,在Apollo的
Spline2dConstraint类中,kappa(曲率)约束的松弛阈值默认设为0.3,这个值在商用车场景需要调整到0.15以下。
2.2 QP优化器的安全魔法
进入modules/planning/constraint_builder,这里的QP优化器在样条基础上构建安全走廊。最精妙的是动态约束生成策
