Carsim与Simulink联合仿真及MPC轨迹跟踪控制实践

自动驾驶横向控制:Carsim与Simulink联合仿真实践 车辆横向控制是自动驾驶系统的关键技术,涉及PID控制、模型预测控制(MPC)和模糊逻辑等多种算法。这些控制方法通过调节转向角实现轨迹跟踪,直接影响行车安全性和舒适性。在工程实践中,Carsim与Simulink的联合仿真成为验证算法的标准方法,其中Carsim提供高精度的车辆动力学模型,Simulink则用于快速算法原型开发。通过硬件在环测试,可以评估不同算法在双移线、正弦扫频等典型工况下的表现,包括跟踪误差、计算耗时等关键指标。对于需要实车部署的场景,还可利用MATLAB Coder将算法转换为C代码,兼 阅读详情

1. 联合仿真环境搭建与配置

在开始Carsim与Simulink联合仿真前,需要确保软硬件环境正确配置。我推荐使用Carsim2020.0与Matlab2017b组合,这两个版本经过长期测试验证具有最佳兼容性。以下是详细的配置步骤:

1.1 软件安装与接口配置

首先需要正确安装两个软件并配置接口。安装顺序建议先安装Matlab2017b,再安装Carsim2020.0。安装完成后,在Carsim的"Simulink"选项卡中设置Matlab路径,确保Carsim能正确调用Simulink。

注意:安装路径不要包含中文或特殊字符,否则可能导致接口调用失败。

配置完成后,在Matlab命令行输入"carsim"测试接口是否正常。如果返回Carsim版本信息,说明接口配置成功。如果失败,检查环境变量PATH是否包含Carsim的bin目录。

1.2 车辆参数设置

在Carsim中新建项目时,需要准确设置车辆参数。对于变道仿真,以下几个参数尤为关键:

  • 车辆质量:影响动力学响应
  • 轴距:决定转向特性
  • 轮胎参数:影响抓地力和侧向力
  • 转向系统参数:决定转向响应速度

建议先使用Carsim自带的示例车辆参数作为基础,再根据实际需求调整。例如,对于轿车仿真,可以参考"Sedan"类别的默认参数。

1.3 道路场景搭建

弯道场景的搭建需要注意:

  1. 设置合理的弯道半径(建议50-200米)
  2. 定义清晰的车道线
  3. 设置合适的道路摩擦系数(干燥沥青路面约0.8-1.0)
  4. 考虑加入其他交通参与者增加仿真真实性

在Carsim的道路编辑器中,可以使用"Arc"工具创建精确的弯道,并通过"Lane"工具定义车道宽度和数量。建议初始测试使用标准3.5米车道宽度。

车辆横向轨迹跟踪算法对比:MPC、PID、Stanley与PP 车辆横向轨迹跟踪是自动驾驶和ADAS系统的核心技术之一,涉及多种控制算法的应用与优化。模型预测控制(MPC)、比例积分微分控制(PID)、斯坦利控制(Stanley)和纯追踪算法(PP)是四种经典算法,各自在计算效率、跟踪精度和鲁棒性方面表现不同。MPC通过滚动优化和反馈校正实现高精度控制,但计算复杂度较高;PID结构简单,适合快速验证;Stanley和PP则基于几何原理,适用于特定场景。在工程实践中,算法选型需结合具体应用场景,如结构化道路推荐MPC+Stanley组合,低速场景则PP性价比更高。通过Si 阅读详情

相关推荐

carsim与simulink联合仿真轨迹规划及跟踪

文章目录一、仿真目的二、carsim和matlab版本说明三、carsim中车辆及工况设置四、carsim和simulink联合仿真方法1、点击carsim中间列Models右侧的下三角,选择Models:Simulink2、建立新的数据集并进入该数据集3、在simulink中创建一个新的模型,在新建的mysimulinkmodel数据集的Simulink Model中导入新建的simulink模型,如图:![在这里插入图片描述](https://img-blog.csdnimg.cn/2020102111

qq_35921616的博客 1万+

Simulink+carsim轨迹跟踪联合仿真

从结果可以看出轨迹的跟踪误差在合理的范围内,实现了对参考轨迹的有效跟踪。横向主要采用MPC控制,通过CarSim输出的车辆状态信息,计算出最优的前轮转角,以达到成功追踪目标轨迹。

The @MMiL algoDves & programming space 3611

基于prescan carsim simulink联合仿真的车辆换道轨迹规划与轨迹跟踪控制

基于prescan carsim simulink联合仿真的车辆换道轨迹规划与轨迹跟踪控制,可提供实验图。仿真环境设置的道路由2车道组成,策略目标为换道超车规划与控制。换道轨迹采用五次多项式。车辆动力学仿真模型采用二自由度模型,横向模型预测lqr控制 包含carsim/simulink/presacan联合仿真。

2501_90804007的博客 1895

基于carsim Simulink联合仿真的车辆换道轨迹规划与轨迹跟踪模型

基于carsim Simulink联合仿真的车辆换道轨迹规划与轨迹跟踪模型仿真环境设置的道路由2车道组成,策略目标为换道超车规划与控制。道路方向和x轴方向平行。车道1中心线的y坐标是4。车道2中心线的y坐标是0。变道轨迹采用5次多项式拟合,在程序中,通过生成多段轨迹之后再组合成一段轨迹做为期望轨迹来进行控制。车辆动力学仿真模型采用侧向二自由度模型,横纵向MPC控制,将纵向控制误差模型和横向控制误差模型集成到一起,误差状态变量分别对应横向误差lateral_error。

2501_90804007的博客 1677

Carsim和Simulink联合仿真,基于MPC和二自由度动力学模型的车辆轨迹跟踪控制,横向控制。

Carsim和Simulink联合仿真,基于MPC和二自由度动力学模型的车辆轨迹跟踪控制,横向控制。还有PID,PP,Stanley,四种控制算法均采用了相同的轨迹。在simulink里都有横向误差,航向误差的输出170以下是一个基于Carsim和Simulink联合仿真的示例,使用MPC、PID、Pure Pursuit (PP) 和 Stanley 四种控制算法实现车辆轨迹跟踪的横向控制。假设你已经设置好Carsim与Simulink的联合仿真环境,并且有一个预定义的参考轨迹。

2501_90804007的博客 1172

基于MPC的CarSim与Simulink车辆轨迹跟踪联合仿真实践

模型预测控制(MPC)是一种先进的控制策略,它通过在线求解带约束的优化问题来预测和控制系统未来行为。其核心原理是在每个采样周期内,基于当前系统状态和预测模型,滚动求解一个有限时域的最优控制序列,并将第一个控制量作用于系统。这种控制方法在处理多变量、带约束的复杂系统时展现出巨大技术价值,尤其在自动驾驶和车辆控制领域,能够有效平衡跟踪精度、稳定性和执行器约束。在工程实践中,MPC常与高精度仿真环境结合,用于验证算法在接近真实场景下的性能。本文聚焦于利用MPC实现车辆轨迹跟踪,通过CarSim提供高保真车辆动力学

weixin_29184371的博客 284

便携式水下动态实时视频色彩还原设备,一键快速实现对水下偏色视频和图像的色彩还原处理

便携式水下动态实时视频色彩还原,一键快速对水下图像进行色彩校正,清晰度提升和亮度均衡处理,为水下资源勘探和科学考古,海洋生态环境监测,水下机器作业等应用提供有力的协助

weixin_43518680的博客 633

探索niri:让你的Linux桌面布局无拘无束

niri是一款基于Wayland的滚动平铺合成器,采用创新的窗口管理方式。它将窗口排列为向右无限延伸的条目,支持独立显示器布局和动态垂直工作区,确保多任务操作流畅性。核心功能包括概要视图、截图界面、屏幕投射、手势操作、窗口分组等,并支持自定义布局和动画效果。niri具备良好的稳定性,兼容xwayland-satellite工具,灵感来自PaperWM但突破了GNOME限制。该项目为追求高效桌面管理的用户提供了全新解决方案,欢迎加入社区交流体验。

weixin_44626085的博客 1803

Zemax显微镜设计:从物镜到目镜的完整光学系统优化

本文详细介绍了使用Zemax进行显微镜光学系统设计的完整流程,从物镜到目镜的优化技巧。通过实战案例和关键参数设置,帮助读者掌握数值孔径、视场角等核心概念,实现高分辨率显微镜设计。文章特别强调了系统级优化和公差分析的重要性,为科研和工业检测提供可靠的光学解决方案。

weixin_42549451的博客 430

WSL2 Ubuntu复现FoundationPose项目(docker)

复现一个基于深度学习的物体姿态估计框架FoundationPose项目,使用docker,WSL2

woaidawangwang的博客 1992

SAP-ABAP:字符与数值类型转换详细指南

SAP-ABAP:字符与数值类型转换详细指南

baidu_35680696的博客 1463

【01】总目录——软件设计师50讲通关地图|从零基础到工程师职称

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏的01篇总目录,系统梳理了50篇博文的完整架构与核心逻辑。专栏覆盖软考软件设计师(中级)全部考点,分为导学规划、基础知识、设计模式、下午题专项、算法实战、冲刺模拟、收官进阶七大模块,既兼顾上午题75道单选题的理论攻坚,也聚焦下午题案例分析的解题能力提升。每篇博文均包含考点精讲、真题解析、实战技巧与速记方法,配套可运行代码、解题模板及备考资源。无论你是零基础转行、在校学生还是在职程序员,都能通过这份学习地图明确进度、精准定位薄弱环节,高效搭建知识体系

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1259

【QT/C++】事件过滤器之基于重写 eventFilter 方法的多种常见应用场景及实现

Qt事件过滤器通过重写eventFilter方法实现多种实用功能:1)鼠标事件处理(点击全选文本、禁用滚轮、悬停提示);2)键盘事件处理(输入内容限制、快捷键提交);3)焦点事件处理(自动弹出下拉框、实时验证);4)绘图事件处理(自定义控件绘制);5)窗口事件处理(防止意外关闭、尺寸限制)。事件过滤器提供非侵入式的事件处理方案,相比传统子类化方式更灵活,通过installEventFilter安装到目标控件即可实现各种交互增强功能。

yuhuasheng1997的博客 1482

13、离散时间系统建模与分析

本文系统介绍了离散时间系统的建模与分析方法,涵盖连续时间模型的离散化过程、系统稳定性判断准则、输入输出模型转换方法以及有限脉冲响应和阶跃响应模型的应用。通过多个示例详细展示了不同系统在离散化过程中的特性变化,并探讨了采样间隔对系统动态特性的影响。此外,文章还分析了时间延迟的处理方法,并总结了关键知识点及操作步骤,为离散时间系统的实际应用提供了理论基础和实践指导。

2w3e4r5t6y的博客 183

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: AI论文写作工具全攻略:从文献检索到格式排版
下一篇: 领域专用语言模型微调实战:从数据到部署全流程指南
congran6617
博客等级 码龄11年 70粉丝 201原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值