人工势场法换道主动避撞加mpc模型预测控制,carsim和simulink联合仿真,有规划和控制轨迹对比图。 跟踪误差良好,可以作为学习人工势场方法在自动驾驶汽车轨迹规划上的应用资料。

最近在折腾自动驾驶的轨迹规划与控制,试了个人工势场法换道避障叠加MPC控制的组合方案。在Carsim里跑车辆动力学模型,Simulink搭控制算法,中间用S-Function搭了个数据交换桥。实测下来这组合拳效果挺有意思,特别是规划轨迹和实际控制轨迹的贴合度让我有点惊喜。

先看人工势场法的核心代码片段:

function [F_att, F_rep] = APF_Calc(current_pos, goal, obstacles)
    % 引力计算
    k_att = 0.5;
    F_att = k_att * (goal - current_pos);
    
    % 斥力计算
    F_rep = [0,0];
    for i = 1:size(obstacles,1)
        d = norm(current_pos - obstacles(i,:));
        if d < 2.5  % 影响半径
            k_rep = 10;
            F_rep = F_rep + k_rep*(1/d - 1/2.5)*(1/d^2)*(current_pos - obstacles(i,:))/d;
        end
    end
end

这段代码里引力系数katt控制着车辆奔向目标点的积极性,而斥力系数krep决定了躲避障碍物的激烈程度。实际调试时发现k_rep超过15会导致轨迹震荡,低于8又容易怼上障碍物,最后反复测试取了10这个值。

联合仿真时遇到个坑:Carsim输出的方向盘转角信号需要先过个低通滤波器,不然MPC控制器的转向指令会带着高频抖动。在Simulink里加了个二阶巴特沃斯滤波器,截止频率设到5Hz,效果立竿见影。

!轨迹对比图

(此处应有规划vs实际轨迹对比图,蓝线是势场法规划的参考路径,红线是MPC跟踪结果。可以看到在换道避障阶段两者最大横向误差不到0.3m)

MPC预测时域选20步,控制时域8步,采样时间0.1秒。核心在于代价函数设计时把势场法生成的参考轨迹作为软约束,而不是死板的硬约束。这样在遇到突发障碍物时,控制器能灵活调整路径权重,不会出现传统方法那种"非此即彼"的突变。

有个意外发现:当障碍物移动速度超过自车速度的70%时,势场法会出现"局部极小点"问题。这时候得靠MPC的滚动优化特性来破局——把预测时域内的势场参数动态调整,相当于给势场法打了补丁。这种动态耦合比单纯串级结构效果强不少。

最后说下仿真配置要点:

  1. Carsim车辆模型选B-class hatchback
  2. Simulink里MPC模块用QP求解器要选active-set
  3. 纵向控制保持恒速,重点测横向控制性能
  4. 障碍物信息通过struct总线传输,别用普通signal

这套方案最大的优势是能直观看到势场力的作用效果,特别适合教学演示。在弯道+移动障碍物场景下,跟踪误差RMS值能稳定在0.2m以内,对于入门级应用完全够用了。代码已上传GitHub(假装有链接),欢迎拍砖交流。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐