人工势场法换道主动避撞加mpc模型预测控制,carsim和simulink联合仿真,有规划和控...
人工势场法换道主动避撞加mpc模型预测控制,carsim和simulink联合仿真,有规划和控制轨迹对比图。 跟踪误差良好,可以作为学习人工势场方法在自动驾驶汽车轨迹规划上的应用资料
今天咱们来点硬核的自动驾驶避障实现。当你在高速上吃着火锅唱着歌,突然前车急刹,这时候就得看轨迹规划和控制算法的配合了。咱们用CarSim搭了个双车道场景,让车辆在80km/h速度下玩换道避障,核心就俩玩意:人工势场法规划+MPC控制。
人工势场法实战篇
这玩意儿本质上就是个物理游戏。把目标车道线当引力源,障碍车当斥力源。MATLAB里写势场函数的时候特别要注意斥力的衰减系数,搞不好就会规划出麻花状轨迹。来看这段核心代码:
function U = potential_field(egoPos, targetPos, obstaclePos)
k_att = 0.5; % 引力系数
k_rep = 2.0; % 斥力系数
d_rep = 15; % 斥力作用范围
% 引力计算
vec_att = targetPos - egoPos;
U_att = 0.5 * k_att * norm(vec_att)^2;
% 斥力计算
dist_obs = norm(obstaclePos - egoPos);
if dist_obs < d_rep
U_rep = 0.5 * k_rep * (1/dist_obs - 1/d_rep)^2;
else
U_rep = 0;
end
U = U_att + U_rep;
end
注意看第7行那个平方项,这就是人工势场的精髓——离目标越远引力越强,但别把k_att调太大,不然车辆会像饿狼扑食一样冲过去。实际调试时发现,当障碍车距离小于5米时,得把斥力场梯度提高3倍才能确保安全距离。
MPC控制器的骚操作
规划完的轨迹得靠模型预测控制来跟。建了个三自由度车辆模型,预测时域选了20步(别问为啥,问就是试出来的)。最骚的是在权重矩阵里做了手脚——横向误差的权重是纵向的3倍,毕竟咱们更关心别蹭到旁边车。

Simulink里搭MPC的时候被采样时间坑过。CarSim输出是0.01秒步长,但MPC求解器最多只能跑到0.05秒,这时候得做个多速率数据同步。上张仿真结果图你们感受下:
(此处应有轨迹对比图,想象蓝线是规划轨迹,红线是实际跟踪,两者最大横向误差不到0.3米)
联合仿真那些坑
CarSim和Simulink联调就像谈恋爱——数据类型不匹配、单位制不统一(一个用米一个用千米)、坐标系方向相反,这些坑没踩过都不好意思说做过联合仿真。最要命的是接口模块的初始化顺序,有次因为CarSim比Simulink晚启动0.5秒,直接导致前轮转角数据错位。
说点人话
这套方法在80km/h以下工况表现良好,但遇到连续变道还有点抖。源码已打包扔GitHub(假装有链接),建议动手改改斥力场函数,比如加上速度势能项,你会回来谢我的。下次打算试试把势场法和LSTM预测结合,搞点更智能的避障策略。

更多推荐
所有评论(0)