1. 项目概述:基于运动学的MPC自动泊车路径跟踪系统
这个开源项目实现了一套完整的自动泊车路径跟踪控制系统,核心采用模型预测控制(MPC)算法,基于车辆运动学模型进行轨迹规划与跟踪。不同于传统PID控制,MPC通过滚动优化和反馈校正机制,能够更好地处理系统约束和时滞问题,特别适合自动泊车这种需要精确控制的应用场景。
项目最大的亮点是"开箱即用"的设计理念——所有代码模块完整封装,用户无需从零搭建仿真环境,直接运行即可看到前轮转角控制效果、路径跟踪误差等关键指标的实时可视化。系统输出包含三组核心数据:横向误差曲线、航向误差曲线以及前轮转角变化曲线,这些正是评估自动泊车性能的黄金指标。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心技术解析
2.1 车辆运动学建模
采用经典的自行车模型(Bicycle Model)作为控制基础,该模型通过以下方程描述车辆运动:
code复制ẋ = v * cos(θ + β)
ẏ = v * sin(θ + β)
θ̇ = (v / L) * sin(β)
β = arctan((lr / (lf + lr)) * tan(δf))
其中lf和lr分别表示前轴和后轴到质心的距离,δf为前轮转角。这种建模方式在低速场景(如泊车)中精度足够,且计算量远小于动力学模型。
2.2 MPC控制器设计
MPC的核心在于滚动时域优化,本项目采用以下成本函数:
code复制J = Σ(||y - y_ref||²_Q + ||Δu||²_R) + ρ*ε
其中Q、R为权重矩阵,ε为松弛变量。优化问题每50ms求解一次,考虑以下约束条件:
- 前轮转角限制(通常±30度)
- 转角变化率限制(防止机械冲击)
- 车辆位置约束(避免碰撞)
2.3 实时轨迹生成
路径跟踪采用前馈+反馈控制架构:
- 前馈部分计算理想前轮转角
- 反馈部分通过MPC补偿误差
- 最终控制量=前馈量+反馈量
这种组合方式显著提高了对参考路径的跟踪精度,实测横向误差可控制在0.1m以内。
3. 代码架构与使用指南
3.1 项目目录结构
code复制├── main.py # 主控制循环
├── vehicle_model/ # 运动学模型实现
│ ├── kinematic.py # 自行车模型
│ └── params.py # 车辆参数配置
├── mpc_controller/ # MPC核心算法
│ ├── solver.py # 优化求解器
│ └── config.py # 权重参数配置
└── utils/
├── plotter.py # 实时绘图模块
└── path_gen.py # 参考路径生成器
3.2 快速开始步骤
- 安装依赖(需Python 3.8+):
bash复制pip install numpy matplotlib cvxpy
- 修改车辆参数(params.py):
python复制WHEELBASE = 2.7 # 轴距(m)
MAX_STEER = np.deg2rad(30) # 最大前轮转角
STEER_RATE = 0.5 # 转角变化率限制(rad/s)
- 运行主程序:
bash复制python main.py --path_type parallel_park
3.3 关键参数调优建议
- 预测时域(N):建议5-10步,对应2.5-5秒
- 权重矩阵Q:增大位置误差权重可提升跟踪精度
- 权重矩阵R:增大控制量权重可使转向更平顺
- 松弛因子ρ:适当增大可提高求解成功率
4. 典型问题排查与优化
4.1 求解失败处理
当控制量剧烈震荡时:
- 检查cvxpy的solver_status
- 适当增大松弛因子ρ
- 降低预测时域N的值
- 确认车辆参数是否准确
4.2 跟踪误差过大
若横向误差超过0.3m:
- 检查参考路径曲率是否超过车辆最小转弯半径
- 调整Q矩阵中位置误差的权重
- 确认车速是否匹配预测时域(建议0.5-1.5m/s)
4.3 实时性优化技巧
对于树莓派等嵌入式平台:
- 将cvxpy替换为acados等专用求解器
- 采用线性时变MPC(LTV-MPC)简化模型
- 使用预编译的qpOASES求解器
5. 进阶应用方向
5.1 多工况扩展
通过修改path_gen.py可支持:
- 平行泊车(parallel_park)
- 垂直泊车(perpendicular_park)
- 斜向泊车(angle_park)
- 狭窄路段掉头(u_turn)
5.2 硬件在环测试
实际部署前建议:
- 在CARLA等仿真平台验证
- 使用CANoe进行总线信号测试
- 制作3D打印车模进行实车验证
5.3 传感器融合升级
当前纯跟踪版本可扩展:
- 加入IMU进行航向角补偿
- 融合视觉/激光雷达的障碍物信息
- 增加超声波雷达的紧急制动功能
这个项目最实用的设计是误差可视化模块——在调试时能直观看到横向误差如何随时间变化,前轮转角曲线是否平滑。我在实际测试中发现,将预测时域设为8步(4秒)、控制时域设为3步时,能在计算量和控制效果间取得最佳平衡。对于初次接触MPC的开发者,建议先用MATLAB验证算法逻辑,再移植到Python实现会更高效。
