当前位置: 首页 > news >正文

老司机教你玩转智能避撞:从五次多项式到模型预测控制的那些事儿

基于MPC模型预测控制的轨迹跟踪控制,主动避撞,紧急转向避撞,采用五次多项式进行换道轨迹规划,可自定义换道轨迹,在s-function模块中修改,计算出转向避撞临界纵向安全距离,从而确定转向避撞五次多项式起点,建立了三自由度转向避撞动力学模型,轮胎模型处于线性区间,然后结合模型预测控制结构特性,利用状态轨迹法对所建立的非线性动力学模型进行线性化,同时为了与轨迹规划结合将其离散化采样控制,考虑横向转向规划轨迹需求,设计了考虑轨迹跟踪控制精度、执行器平稳过渡特性、能量消耗以及幅值大小的目标函数,并以避撞输出边界和执行器执行能力为约束条件,转化为二次规划问题进行求解。 注意本模型加入了侧偏角约束和侧向位移约束。 (也有不加侧偏角约束的模型) 控制效果:自车在第1s时通过自车的传感器发现目标前车后经主动避撞决策后开始进行紧急转向避撞,轨迹跟踪效果较好,横向位移误差在0.14m范围内,因为约束更多,会导致误差相对不加侧偏角约束容忍度增大。 前轮转角控制量和控制量增量在设定的约束范围内,保证了底层执行机构能够顺利将车辆前轮转角控制量执行。 见图所示。 Matlab/Simulink版本:2021a Carsim版本:2019.0 有完整的运行视频。 提供参考资料。

最近在搞车辆紧急避撞的仿真,发现这玩意儿比科目二倒车入库刺激多了。今天就拿Matlab/Simulink和Carsim联仿的案例,聊聊怎么用五次多项式规划出一条优雅的逃生路线。

轨迹规划是避撞系统的灵魂。咱们用五次多项式生成换道轨迹可不是随便选的——它能保证位移、速度、加速度三阶连续,就像老司机换道时油门和方向盘的丝滑配合。来看个实际代码片段:

% 横向轨迹生成参数 t0 = 0; t1 = 3; % 换道起止时间 lat0 = [0, 0, 0]; % 初始横向状态 lat1 = [3.5, 0, 0]; % 目标横向状态 A = [1 t0 t0^2 t0^3 t0^4 t0^5; 0 1 2*t0 3*t0^2 4*t0^3 5*t0^4; 0 0 2 6*t0 12*t0^2 20*t0^3; 1 t1 t1^2 t1^3 t1^4 t1^5; 0 1 2*t1 3*t1^2 4*t1^3 5*t1^4; 0 0 2 6*t1 12*t1^2 20*t1^3]; b = [lat0'; lat1']; coeff = A\b; % 解多项式系数

这段代码的精髓在于边界条件的设置。t1=3秒的换道时间可不是拍脑袋定的,是通过纵向安全距离公式算出来的临界值。当雷达在第1秒检测到前车时,系统会立即计算这个"安全红线"。

说到动力学模型,咱们的三自由度模型可不是玩具车级别的。看看这个状态方程的核心部分:

function dx = vehicleModel(x, u) beta = x(1); % 质心侧偏角 r = x(2); % 横摆角速度 psi = x(3); % 航向角 delta = u(1); % 前轮转角 % 轮胎侧向力计算(线性区间) Fyf = C_alpha_f * (delta - (beta + a*r)/Vx); Fyr = C_alpha_r * (b*r - beta)/Vx; dx = zeros(3,1); dx(1) = (Fyf + Fyr)/(m*Vx) - r; dx(2) = (a*Fyf - b*Fyr)/Iz; dx(3) = r; end

特别注意这里的侧偏角约束——就像漂移时轮胎的抓地极限,超过这个阈值模型就会报警。这也是为什么带约束的版本误差容忍度更大,毕竟多戴了个紧箍咒。

基于MPC模型预测控制的轨迹跟踪控制,主动避撞,紧急转向避撞,采用五次多项式进行换道轨迹规划,可自定义换道轨迹,在s-function模块中修改,计算出转向避撞临界纵向安全距离,从而确定转向避撞五次多项式起点,建立了三自由度转向避撞动力学模型,轮胎模型处于线性区间,然后结合模型预测控制结构特性,利用状态轨迹法对所建立的非线性动力学模型进行线性化,同时为了与轨迹规划结合将其离散化采样控制,考虑横向转向规划轨迹需求,设计了考虑轨迹跟踪控制精度、执行器平稳过渡特性、能量消耗以及幅值大小的目标函数,并以避撞输出边界和执行器执行能力为约束条件,转化为二次规划问题进行求解。 注意本模型加入了侧偏角约束和侧向位移约束。 (也有不加侧偏角约束的模型) 控制效果:自车在第1s时通过自车的传感器发现目标前车后经主动避撞决策后开始进行紧急转向避撞,轨迹跟踪效果较好,横向位移误差在0.14m范围内,因为约束更多,会导致误差相对不加侧偏角约束容忍度增大。 前轮转角控制量和控制量增量在设定的约束范围内,保证了底层执行机构能够顺利将车辆前轮转角控制量执行。 见图所示。 Matlab/Simulink版本:2021a Carsim版本:2019.0 有完整的运行视频。 提供参考资料。

模型预测控制的核心在于目标函数的拿捏。咱们设计了四维度的代价函数:

Q = diag([10, 5, 2, 1]); % 跟踪误差、控制量、增量、能量消耗 for k = 1:N cost = cost + (Y(:,k)-Y_ref(:,k))'*Q(1:3,1:3)*(Y(:,k)-Y_ref(:,k)); cost = cost + U(:,k)'*Q(4,4)*U(:,k); end

这个权重矩阵的调参过程堪比火锅底料的配比,多一分执行器震荡,少一分跟踪滞后。最后转化为二次规划问题时,还得考虑转向电机的最大转角(±30度)和转角速率限制(10度/秒)。

联仿结果挺有意思:带侧偏角约束时横向误差最大0.14m,比无约束版本大了约40%。但就像开性能车必须接受油耗高一样,这是保证轮胎不抱死的必要妥协。前轮转角曲线平滑得像德芙巧克力,底层执行器表示毫无压力。

最后给想复现的朋友提个醒:Carsim的车辆参数记得与Simulink模型同步,特别是轴距和质心位置参数,不然会出现"灵魂出窍"的奇葩现象。完整代码里有个s-function模块藏着安全距离计算的秘密,下次可以单独聊聊这个临界值的计算门道。

参考资料:

  1. 《车辆动力学及控制》第2章
  2. MPC工具箱官方文档
  3. Carsim与Simulink联合仿真白皮书
http://www.jsqmd.com/news/478858/

相关文章:

  • 2026-03-14
  • YOLOv10全网首发:AAAI2026 | 融合PartialNet Block的C3k2-YOLO高效目标检测网络 | 轻量化涨点设计
  • 2026年好用的北京GEO优化公司排名出炉,哪家会是你的心头好?
  • 联合省选 2026
  • sdut-程序设计基础Ⅰ-实验四for循环(11-22)
  • 使用Conda和pip创建Python环境
  • 蓝牙连接不上的解决方法
  • 淘宝系逆向@阿里巴巴商家版-转人工逆向
  • 迁移学习中的负迁移风险:成因、检测与规避方案
  • 国家网络与信息安全信息通报中心通报OpenClaw安全风险预警
  • 三部六层电梯仿真群控联动系统:基于西门子S7-1200 PLC与博图v15.1及以上版本实现方...
  • 告别学术焦虑,您的 AI 级个人科研大脑 —— “openclaw论文助手”现已发布!
  • openclaw 使用飞书官方插件连接飞书
  • COMSOL光学模型中的等离激元BIC非偏振结构
  • 多任务学习的任务冲突问题
  • 探索双级式储能模型:充放电转换、低电压故障穿越与负序抑制
  • 【论文解读】隐马尔可夫模型:语音识别领域的奠基之作
  • Web前端开发技术必备基础知识
  • 1103: PIPI的数学题I
  • 显示系统中的 Gamma 校正原理解析
  • 写给同龄人的转行指南:28岁、大专学历,如何打破局限闯入网络安全领域?
  • 从入门到精通Python:零基础可落地的学习指南,解锁2026年编程新机遇
  • python环境
  • 出海必备跨境电商短视频群控系统怎么选?新手必看方法!
  • 基于单片机的瓦斯监测系统设计
  • ionic 浮动框:实现与优化指南
  • No.44 S7-200 PLC糖果包装控制系统
  • pickingNumbers
  • Go 分布式事务实战:本地消息表、事务消息、SAGA、TCC 四大方案深度解析与选型指南
  • Julia 交互式命令详解