1. 自动泊车系统开发实战:EKF与MPC的黄金组合
自动泊车系统看似只是让车辆自己停进车位,实则包含了状态估计、路径规划、运动控制等多个核心技术难点。我在开发这套系统时,发现扩展卡尔曼滤波(EKF)和模型预测控制(MPC)的组合能完美解决泊车场景中的三个核心问题:传感器噪声干扰、模型不准确性以及复杂环境约束。
这个方案在实测中达到了令人满意的效果:
- 平行车位泊入时间<25秒
- 最终定位误差<5cm
- 航向角偏差<1度
- 计算频率稳定在100Hz(i5处理器)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 整体方案设计
系统采用典型的感知-决策-控制三层架构:
code复制传感器数据 → EKF状态估计 → MPC轨迹规划 → 车辆执行
↑ ↑ ↑
环境信息 反馈校正 约束条件
关键创新点在于:
- 动态雅可比矩阵计算:提升模型调整效率
- 多目标代价函数设计:平衡各项性能指标
- 传感器偏置在线估计:消除系统误差
2.2 车辆建模与验证
采用简化自行车模型主要基于三点考虑:
- 泊车场景车速低(<5km/h),可忽略轮胎动力学
- 计算复杂度适合实时控制
- 参数辨识简单(仅需轴距和转向比)
模型验证时发现一个有趣现象:当转向角>30°时,标准模型会产生明显误差。通过引入转向几何修正项,误差从2.1°降至0.3°:
matlab复制beta = atan(0.5*tan(u(2))); % 转向几何修正
3. EKF实现细节
3.1 状态方程设计
系统状态定义为:
code复制x = [x_pos, y_pos, heading, velocity, sensor_bias]'
状态转移采用数值雅可比计算,相比解析方法有三个优势:
- 避免推导复杂导数
- 模型修改时无需重新推导
- 可灵活处理非线性项
matlab复制% 数值计算雅可比矩阵
for i=1:5
dx = zeros(5,1);
dx(i) = 1e-6;
F(:,i) = (vehicle_model(x+dx(1:4),u,dt) - vehicle_model(x,u,dt))/1e-6;
end
3.2 传感器数据处理
针对超声波传感器的典型问题,开发了三级滤波方案:
- 移动平均滤波(窗口=5):消除随机噪声
- 变化率阈值:剔除突变干扰
- 一致性检查:排除多径反射
实测表明,这套方案可将墙角误检率从23%降至2%以下。
4. MPC控制器实现
4.1 代价函数设计
代价函数包含五项关键指标:
matlab复制cost = 0;
for k = 1:N
cost = cost + 1000*(X(k,end)-target_pose(1))^2 ... % 终端位置
+ 1000*(X(k,end-1)-target_pose(2))^2 ...
+ 500*(X(k,3)-target_pose(3))^2 ... % 航向角
+ 0.1*u_traj(k,1)^2 ... % 加速度惩罚
+ 10*u_traj(k,2)^2; % 转向角惩罚
end
权重调节经验:
- 位置误差权重应>航向角权重(建议20:1)
- 转向惩罚需随车速动态调整
- 终端代价应占主导地位
4.2 约束条件处理
设置三类约束:
- 物理约束:转向角±35°,加速度±0.3g
- 安全约束:障碍物距离>0.2m
- 舒适约束:加加速度<0.1g/s
采用软化约束技术处理冲突情况,避免优化失败。
5. 实测问题与解决方案
5.1 典型故障排查
| 现象 | 原因 | 解决方案 |
|---|---|---|
| 终点抖动 | 速度过高 | 限制末速度<0.15m/s |
| 路径震荡 | 预测时域过长 | 优化时域2-3秒 |
| 定位漂移 | 传感器偏置 | 增加偏置估计状态 |
5.2 参数调试技巧
-
轮胎参数标定:
- 空载/满载分别测量
- 重点校准转向几何关系
- 考虑胎压影响
-
控制器采样周期:
- 建议50-100ms
- 与传感器同步
- 需匹配车辆响应
-
代价函数权重:
- 先调终端代价
- 再平衡过程代价
- 最后微调控制量
6. 工程实践建议
-
仿真验证流程:
- 先静态测试(零速状态估计)
- 再开环测试(固定控制输入)
- 最后闭环测试
-
实车部署注意事项:
- 逐步提高车速(0.2m/s起步)
- 准备急停开关
- 记录完整数据包
-
性能优化方向:
- 热启动MPC求解器
- 使用C代码生成
- 并行化EKF计算
这套系统在20多款车型上验证过,最关键的是要根据实车参数重新校准模型。特别是轮胎转向特性,不同车型差异可能高达30%,直接套用参数可能导致控制失效。
