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

技术分享】CarSim与Simulink联合仿真,实现超车换道的动态规划路径控制【附视频演示

CarSim与Simulink联合仿真,实时检测,动态规划路径,实现超车换道,基于mpc,模型预测控制实现,距离效果见视频 carsim参数配置文件,导入即可运行simulink模型文件 模型说明文档

最近在搞CarSim和Simulink联合仿真玩超车换道,这玩意儿真不是一般的有意思。直接把我折腾好的参数配置文件甩进CarSim,Simulink那边模型加载就能跑,实测视频里能看到车辆嗖的一下完成换道超车,整个过程稳如老狗。

先说说联合仿真这茬。CarSim里设置车辆动力学参数的时候,重点注意轮胎模型选MF轮胎,悬架刚度系数建议用默认值别乱动。Simulink这边需要搞个IO接口模块,核心是这个配置代码:

vs_config = vsSetup(); vs_config.sample_time = 0.01; % 10ms步长 vs_config.vehicle = 'Sedan'; % 对应CarSim车型 vs_build(vs_config); % 生成S-Function

这代码相当于给两个软件牵了条数据线。特别说下sample_time参数,改大了车辆会飘,0.01秒是实测最佳值。之前试过0.05秒,好家伙,车辆轨迹抖得跟帕金森似的。

动态规划这块搞了个五次多项式轨迹生成。核心是这段路径生成代码:

function path = generate_trajectory(start, goal) T = 3; % 换道用时 coeff_x = quintic_poly(start.x, goal.x, T); coeff_y = quintic_poly(start.y, goal.y, T); % 省略中间解方程组的过程... path = @(t)[polyval(coeff_x, t); polyval(coeff_y, t)]; end

这玩意儿能根据前车速度动态调整T参数。重点在五次多项式的加速度连续,实测比三次多项式顺滑太多。之前用三次多项式的时候,方向盘转角突变太猛,CarSim直接报错甩脸色。

CarSim与Simulink联合仿真,实时检测,动态规划路径,实现超车换道,基于mpc,模型预测控制实现,距离效果见视频 carsim参数配置文件,导入即可运行simulink模型文件 模型说明文档

MPC控制器才是重头戏,在Simulink里搭了个自定义模块。核心是优化问题的构建代码:

for k = 1:N cost = cost + 0.5*weights(1)*(X(k)-ref_x(k))^2 + ... 0.3*weights(2)*(Y(k)-ref_y(k))^2; if k > 1 cost = cost + 0.2*weights(3)*(delta(k)-delta(k-1))^2; end end

权重系数weights=[1.2, 0.8, 0.5]是调参调出来的玄学参数。这里给横向误差的权重加了buff,毕竟换道首要保证别怼上隔壁车道的车。有个坑是必须加方向盘转角变化率的惩罚项,不然方向盘能给你扭成麻花。

实时检测模块里埋了个超声波雷达的模拟器,代码里这个判断逻辑贼关键:

if (relative_speed < -2) && (distance < 15) trigger_lane_change(); end

当后车逼近速度超过2m/s且距离小于15米时触发强制换道。实测这个阈值在80km/h工况下最稳妥。之前用10米阈值翻过车——雨天制动距离不够,直接给干出护栏了。

跑起来之后在CarSim里能看到方向盘转角曲线像过山车一样刺激,但车身横摆角始终稳在2度以内。视频里那蓝色轨迹线跟刀切的一样直,跟旁边那辆慢车擦肩而过的时候,最近距离控制在0.8米左右——别紧张,这在国标里算合格水平。

配置文件里有个隐藏参数Steer_ratio=16.5千万别乱改,这数值对应某德系车的转向特性。之前手贱改成14,结果车辆入弯时直接spin,活脱脱排水渠过弯失败现场。整套模型跑完大概吃8个G内存,显卡不好的兄弟记得把CarSim的渲染精度调低点。

http://www.jsqmd.com/news/518564/

相关文章:

  • leetcode 1457. Pseudo-Palindromic Paths in a Binary Tree 二叉树中的伪回文路径
  • Hackintool终极指南:从零开始轻松配置完美黑苹果系统
  • Gradle 7.1.1构建Flink项目报错?可能是你的IDEA版本太老了!
  • 从GMT到UTC:时间标准的演进与计算机系统的应用
  • COMSOL 光学 手性 BIC 仿真 光子晶体板中连续域束缚态 BIC 赋予的手性。 包含正...
  • leetcode 困难题 1458. Max Dot Product of Two Subsequences 两个子序列的最大点积
  • 用Go写个命令行AI客户端,到底值不值?
  • 告别Elasticsearch!用SkyWalking 10.0.1 + BanyanDB + Docker搭建新一代链路监控(含IDEA/Java-Jar双启动配置)
  • 基于同步旋转坐标系的高效无位置传感器永磁同步电机控制策略——采用三相电压重构,告别传统电压采集...
  • leetcode 1460. Make Two Arrays Equal by Reversing Subarrays 通过翻转子数组使两个数组相等-耗时100
  • 智能汽车视觉导航(4)——基于动态阈值的赛道中线精准定位
  • 国产电车的意外惊喜,油价将重回9元拯救电车,但无法指望海外
  • 告别普通CardView!用MaterialCardView这5个属性,让你的Android应用卡片颜值飙升
  • 别再只会git push了!用-u参数关联远程分支,让Git协作效率翻倍
  • 基于Simulink和Carsim的车辆主动悬架防侧翻控制项目报告
  • 解决前端TIFF预览难题:tiff.js与canvas/base64的完美结合
  • 编写程序让智能空气质量仪检测PM2.5,分等级显示空气质量,给出开窗通风的建议。
  • Element UI中el-tabs的before-leave钩子实战:如何优雅拦截未保存表单的切换请求
  • AI Agent框架选型:OpenClaw、LangChain、AutoGPT、CrewAI,到底该选哪个?
  • OBS Studio直播软件下载安装图文教程:2026直播录制必备软件 - xiema
  • 从BDD到Cucumber:如何用行为驱动开发提升团队协作效率(附实战案例)
  • 从Polar CTF 2024春季赛看Web安全实战:PHP反序列化与SQL注入攻防解析
  • 生物信息学避坑指南:用Singularity重建可复现分析环境的3个关键技巧
  • 麒麟系统v10 SP3上MariaDB的5个隐藏技巧,新手必看!
  • 编写程序实现智能饮水机水温检测,水温适用饮用时,绿灯常亮,不用试水温。
  • KD-Tree 学习笔记
  • 手把手教你写一个简单的油猴脚本:以实验室安全考试自动答题为例
  • COMSOL光学波导传输仿真 光纤等波导的三维弯曲 模场分布 波束包络方法 FDTD计算模式弯曲损耗
  • 编写程序实现智能快递柜湿度检测,湿度过高,提示“防潮”,保护包裹内物品。
  • 基于YOLOv8/YOLOv10/YOLOv11/YOLOv12与SpringBoot的杂草检测系统(DeepSeek智能分析+web交互界面+前后端分离+YOLO数据)