站内搜索

输入标题、简介或关键词开始搜索

← 返回项目列表

PPO-MPC 自适应轨迹跟踪

基于 PPO 在线调整 MPC 代价函数权重,让无人车在复杂路径上获得更好的轨迹保持能力和姿态稳定性。

周期
2025/03 - 2025/09
角色
控制架构设计、Gymnasium 环境构建、PPO 训练、MPC 参数映射与实验评估

Lateral RMSE

-48.44%Switchback 轨迹 0.5299 m -> 0.2732 m

Yaw RMSE

-56.56%Switchback 轨迹 0.3082 rad -> 0.1339 rad
PythonGymnasiumStable-Baselines3PythonRoboticsPPOMPCOSQP

速览

这个项目的目标是让无人车

成果

在复杂参考路径上保持更低的横向误差和姿态误差。底层仍然使用可解释、可约束的 MPC 轨迹跟踪器,上层引入 PPO 根据车辆状态和路径局部几何在线调整 MPC 代价函数权重。

我负责控制架构设计、Gymnasium 训练环境构建、PPO 训练流程、动作到 MPC 参数的映射,以及多条轨迹上的对比实验。系统没有让强化学习直接输出转角或速度,而是让 PPO 学习如何调整控制器偏好,从而保留 MPC 的约束处理能力和失败可回退性。

架构

整体是双层控制结构:MPC 作为底层控制环,以 0.2s 周期求解车辆控制量;PPO 作为高层自适应策略,以 0.4s 周期更新 MPC 代价权重。这样既避免高层策略过频繁扰动优化问题,也让底层控制器能在两次权重更新之间完成稳定跟踪。

PPO 观测为 10D,覆盖车辆当前跟踪误差、航向误差、速度状态和路径局部曲率等信息。动作是 8D 连续向量,通过指数映射转换为 MPC 中 Q、R、Rd 的权重倍率,使策略输出始终为正并保持数值范围可控。

  1. 01

    车辆状态与参考路径片段进入 Gymnasium 环境,计算横向误差、航向误差、速度和路径形状特征。

  2. 02

    PPO 每 0.4s 输出 8D 动作,经指数映射转换为 Q/R/Rd 权重倍率。

  3. 03

    MPC 每 0.2s 基于当前权重、车辆模型和参考轨迹求解控制序列。

  4. 04

    若 MPC 求解失败,系统使用上一组有效控制量或保守权重回退,避免策略探索直接中断仿真。

流程

训练采用课程学习,从简单轨迹逐步过渡到复杂轨迹。早期阶段先让策略学习基本的直线保持和缓弯响应,再逐步加入高曲率、闭环和反向切换路径,降低 PPO 一开始就在困难任务中产生不可恢复探索的概率。

Straight

建立基础速度和横向误差惩罚,让策略先学会稳定跟踪。

Curvy

加入连续曲率变化,训练权重对转向响应和控制平滑性的权衡。

Circular

强化持续曲率场景下的姿态保持和稳态误差控制。

Figure8

引入曲率方向切换,检验策略对左右转转换的适应能力。

Forward

扩展到更长路径,观察长期累计误差和速度保持。

Switchback

最终评估急转与折返轨迹下的泛化表现。

难点

关键难点不是把 PPO 接到 MPC 上,而是让学习到的参数调整不会破坏优化问题本身。动作空间如果直接映射到权重,容易出现负权重或跨度过大导致 OSQP 求解不稳定;因此采用指数映射和裁剪,把策略探索限制在可解释的倍率范围内。

另一个挑战是奖励函数需要同时反映轨迹误差、姿态误差、控制平滑性和求解状态。只奖励横向误差会让策略倾向激进转向,导致 yaw 抖动和控制输入变化过大;加入 yaw RMSE、控制增量和失败惩罚后,训练曲线更稳定。

调试

PPO 探索导致 MPC 求解失败

现象
训练初期策略输出极端权重,MPC 在高曲率轨迹上出现 infeasible 或求解超时,episode 被过早终止。
排查
检查动作分布和 Q/R/Rd 映射后发现,部分动作把控制增量惩罚压得过低,同时把横向误差权重拉得过高,导致优化器给出激进控制序列。
结论
将动作改为指数倍率映射并设置上下限,失败时回退到上一组有效权重,同时在奖励中加入求解失败惩罚,使探索保留在可恢复范围内。

成果

在 Switchback 轨迹上,自适应 PPO-MPC 相比固定权重 MPC 明显降低误差:横向 RMSE 从 0.5299 m 降到 0.2732 m,下降 48.44%;Yaw RMSE 从 0.3082 rad 降到 0.1339 rad,下降 56.56%。结果说明,上层策略学习到的是不同路径局部形状下的控制器参数调度,而不是绕过 MPC 的黑盒控制。

相关博客