基于Matlab/Simulink、CarSim、PreScan的联合仿真

目录

1.整体思路

2.Matlab/Simulink与CarSim的连通

2.1新建datasets

2.2新建工作目录

2.3新建Simulink模型

2.5设置工作目录和Simulink模型

2.6设置输入和输出

2.7设置车辆参数

2.8设置初速度

2.9Advanced settings

2.11CarSim S-Function

3.Matlab/Simulink与PreScan的连通

3.1新建Experiment

3.2新建道路

3.3新建车辆

3.4设置动力学模型

3.5设置虚拟传感器

3.6Parse&Build 

4.模型组成及注意事项

4.1软件打开的注意事项

4.2Simulink模型组成部分 

4.3感知信息的处理

4.4控制算法

4.5CarSim动力学模型

4.6其它注意事项

5.联合仿真结果


1.整体思路

所使用的软件版本如下:

Matlab 2021b:作为仿真平台,连通CarSim和PreScan,开发控制算法,处理感知数据

CarSim 2019.0:提供车辆动力学模型

PreScan 8.5.0:提供仿真场景,包括车辆、道路、虚拟传感器等,提供仿真的可视化动画

       若想进行Matlab/Simulink、CarSim、PreScan的三方联合仿真,需要分别连通Matlab/Simulink与CarSim以及Matlab/Simulink与PreScan

2.Matlab/Simulink与CarSim的连通

2.1新建datasets

       点击Duplicate按钮,命名为S_C_P_demo

2.2新建工作目录

       在D:\carsim\carsim2019\CarSim2019.0_Data\Extensions\Simulink下新建文件夹S_C_P_demo

2.3新建Simulink模型

       在S_C_P_demo文件夹下新建mdl或slx文件(博主建立的是mdl文件)

       点击Model下拉页,选择Model:Simulink,即可出现Send to Simulink按钮

2.5设置工作目录和Simulink模型

       点击如下按钮进行工作目录和Simulink模型的设置,工作目录见2.2节,Simulink模型见2.3节

2.6设置输入和输出

输入量参数含义
IMP_SPEED车速
IMP_STEER_SW方向盘转角
IMP_STEER_L1左前轮转角
IMP_STEER_R1右前轮转角

IMP_MUX_L1

IMP_MUX_L2

IMP_MUX_R1

IMP_MUX_R1

IMP_MUY_L1

IMP_MUY_L2

IMP_MUY_R1

IMP_MUY_R1

左前轮的地面纵向摩擦

左后轮的地面纵向摩擦

右前轮的地面纵向摩擦

右后轮的地面纵向摩擦

左前轮的地面横向摩擦

左后轮的地面横向摩擦

右前轮的地面横向摩擦

右后轮的地面横向摩擦

输出量参数含义
vx纵向车速
vy横向车速

输入量
输入量
输出量

将以下内容复制粘贴到输出量设置界面的Optional equations之中

DEFINE_OUTPUT mod1_L1 = 0; - ; mod1_L1
DEFINE_OUTPUT mod2_L1 = 0; - ; mod2_L1 
DEFINE_OUTPUT mod3_L1 = 0; - ; mod3_L1 
DEFINE_OUTPUT mod4_L1 = 0; - ; mod4_L1 
DEFINE_OUTPUT mod1_R1 = 0; - ; mod1_R1 
DEFINE_OUTPUT mod2_R1 = 0; - ; mod2_R1 
DEFINE_OUTPUT mod3_R1 = 0; - ; mod3_R1 
DEFINE_OUTPUT mod4_R1 = 0; - ; mod4_R1 
DEFINE_OUTPUT mod1_L2 = 0; - ; mod1_L2 
DEFINE_OUTPUT mod2_L2 = 0; - ; mod2_L2 
DEFINE_OUTPUT mod3_L2 = 0; - ; mod3_L2 
DEFINE_OUTPUT mod4_L2 = 0; - ; mod4_L2 
DEFINE_OUTPUT mod1_R2 = 0; - ; mod1_R2 
DEFINE_OUTPUT mod2_R2 = 0; - ; mod2_R2 
DEFINE_OUTPUT mod3_R2 = 0; - ; mod3_R2 
DEFINE_OUTPUT mod4_R2 = 0; - ; mod4_R2

EQ_OUT MOD1_L1 = (ABS(FY_L1)/FZ_REF(1,1))*MUY_L1;
EQ_OUT MOD2_L1 = SIN(MIN(ABS(ALPHL_L1), 15/DR))*ABS(VXCENL1);
EQ_OUT MOD3_L1 = (ABS(FX_L1)/FZ_REF(1,1))*MUX_L1;
EQ_OUT MOD4_L1 = MIN(ABS(KAPPL_L1), 1)*ABS(VXCENL1);
EQ_OUT MOD1_R1 = (ABS(FY_R1)/FZ_REF(1,2))*MUY_R1;
EQ_OUT MOD2_R1 = SIN(MIN(ABS(ALPHL_R1), 15/DR))*ABS(VXCENR1);
EQ_OUT MOD3_R1 = (ABS(FX_R1)/FZ_REF(1,2))*MUX_R1;
EQ_OUT MOD4_R1 = MIN(ABS(KAPPL_R1), 1)*ABS(VXCENR1);
EQ_OUT MOD1_L2 = (ABS(FY_L2)/FZ_REF(2,1))*MUY_L2;
EQ_OUT MOD1_L2 = SIN(MIN(ABS(ALPHL_L2), 15/DR))*ABS(VXCENL2);
EQ_OUT MOD3_L2 = (ABS(FX_L2)/FZ_REF(2,1))*MUX_L2;
EQ_OUT MOD4_L2 = MIN(ABS(KAPPL_L2), 1)*ABS(VXCENL2);
EQ_OUT MOD1_R2 = (ABS(FY_R2)/FZ_REF(2,2))*MUY_R2;
EQ_OUT MOD2_R2 = SIN(MIN(ABS(ALPHL_R2), 15/DR))*ABS(VXCENR2);
EQ_OUT MOD3_R2 = (ABS(FX_R2)/FZ_REF(2,2))*MUX_R2;
EQ_OUT MOD4_R2 = MIN(ABS(KAPPL_R2), 1)*ABS(VXCENR2);

2.7设置车辆参数

该界面可对车辆具体参数进行修改

2.8设置初速度

       由于博主想在Simulink中更改车辆初速度,因此进行如下设置

1.Procedures下新建Events
2.进行如上图所示设置,点击蓝色按钮
3.进行如上图所示设置

2.9Advanced settings

       勾选Advanced settings前面的方框,添加如下内容,即可不通过方向盘直接控制前轮转角

opt_steer_ext(1) 4

       点击Send to Simulink按钮(当在CarSim中进行修改后,也需要点击该按钮),工作目录下生成simfile.sim文件,同时在simulink中会新打开一个页面包含CarSim S-Function模块,即可表明Matlab/Simulink与CarSim连通成功

2.11CarSim S-Function

       控制算法的开发过程中,需要使用CarSim S-Function模块,针对其输入和输出进行车辆控制

       在Simulink库浏览器中搜索carsim,可以找到CarSim S-Function模块,在使用该模块时,双击后在Simfile name一栏中填入2.10节中生成的simfile.sim文件地址(如下图所示)

3.Matlab/Simulink与PreScan的连通

3.1新建Experiment

3.2新建道路

       点击Infrastructure,点击Straight Road拖拽至中间 

3.3新建车辆

       点击Actors,点击Audi A8 Sedan拖拽至画面中央的道路上 

3.4设置动力学模型

       (1)点击车辆,右键,点击Object configuration

       (2)点击Dynamics,选择User specified,选择CarSim Contact,选择2.3中建立的mdl模型,Apply,OK

       (3)点击Animation,勾选Wheel displacement,Apply,OK

3.5设置虚拟传感器

       (1)点击Sensor,点击Detailed,将Camera拖拽至画面中央的车辆上,松开按键

       (2)点击Ground Truth,将Lane Marker拖拽至画面中央的车辆上,松开按键

       Lane Marker传感器如下图所示,会沿不同纵向距离划线(一个Lane Marker传感器可设置四个纵向距离),与车道线相交,最终获取这些相交点与传感器之间的横向距离,后续利用这些数据来获取车道线相关参数。(关于该传感器的详细说明,可查看PreScan帮助文档)

3.6Parse&Build 

        分别点击Parse、Build和Invoke Simulink Run Mode

4.模型组成及注意事项

4.1软件打开的注意事项

       Matlab/Simulink、CarSim、PreScan三方联合仿真时,需要先打开PreScan GUI,在PreScan Process Manager中Matlab一栏点击Start按钮(不能直接双击Matlab打开,否则会报错),之后打开CarSim。

4.2Simulink模型组成部分 

对上图各部分进行说明:

PreScan自车信息:有关自车状态变化的信息,用于更新可视化动画中的画面

LaneMarker传感器:获取车道线相关数据,见3.5节

摄像头:摄像头传感器,可查看仿真时摄像头拍摄画面

感知信息:借由LaneMarker传感器获取的数据,进行车道线拟合,获取车道线参数

控制算法:借由横向误差控制模型,进行LQR横向控制,计算得到前轮转角

CarSim动力学模型:借由CarSim S-Function模块,进行输入、输出的设置

4.3感知信息的处理

       通过PreScan中的Lane Marker传感器中的感知数据,进行车道线拟合得到车道线参数,通常会以三次多项式来描述车道线

y = {C_0} + {C_1}x + {C_2}{x^2} + {C_3}{x^3}

       具体的车道线拟合方法见:自动驾驶车道线拟合,由此可求得车道线参数C0到C3,后续会使用这些参数去表示车辆与车道中心线之间的误差。

4.4控制算法

       本博客中采用基于车辆动力学模型的横向控制算法,具体可见:基于车辆动力学模型的自动驾驶车辆横向控制

4.5CarSim动力学模型

       4.2节中图片所示的CarSim动力学模型为封装模块,点击模块左下角向下的箭头即可打开该模块,进行具体设置后的模块内部如下图所示

       现对上图所示的具体部分进行说明:

       ①Mux模块,双击后设置为[15 8 1 1 1],对应CarSim中的26个输入

       ②Ground模块,15个输入变量无需设置,接地即可

       ③Constant模块,设置为0.8*ones(8,1),对应8个输入(前后轮的横纵向摩擦系数)

       ④车速

       ⑤左前轮、右前轮转角,暂未考虑阿克曼转向

       ⑥CarSim S-Function,具体见2.11节

       ⑦vx、vy

4.6其它注意事项

       (1)每一次CarSim动力学模型更改完成后,都需要点击Send to Simulink,重新生成simfile.sim文件

       (2)每一次PreScan模型更改完成后,都需要点击Parse和Build,同时在simulink模型中需要点击Regenerate按钮,同时会弹出显示Regenerate完成情况的对话框

       (3)LQR离线求解:每一次在CarSim更改车辆相关参数或更改Q、R矩阵中的权重值后,都需要对如下m文件重新运行以生成新的K矩阵

cf=-145777;
cr=-119580;
m=1820;
Iz=4095;
a=1.265;
b=2.947-1.265;
k=zeros(5000,4);
for i=1:5000
    vx=0.01*i;
    A=[0,1,0,0;
       0,(cf+cr)/(m*vx),-(cf+cr)/m,(a*cf-b*cr)/(m*vx);
       0,0,0,1;
       0,(a*cf-b*cr)/(Iz*vx),-(a*cf-b*cr)/Iz,(a*a*cf+b*b*cr)/(Iz*vx)];
    B=[0;-cf/m;0;-a*cf/Iz];
    Q=[1 0 0 0;
       0 1 0 0;
       0 0 1 0;
       0 0 0 1];
    R=50;
    k(i,:)=lqr(A,B,Q,R);
end
k1=k(:,1)';
k2=k(:,2)';
k3=k(:,3)';
k4=k(:,4)';

       (4)仿真频率的设置

       ①CarSim仿真频率设置

       ②PreScan仿真频率设置

       点击页面中的Simulation scheduler进行频率设置

5.联合仿真结果

       由于PreScan中Lane Marker传感器的精度以及在拟合时使用的拟合点较少,使得拟合得到的车道线参数呈现小幅的周期波动,从而造成车辆与车道中心线之间的距离误差呈现小幅的周期波动,后续对感知信息的处理可以再进一步优化。

CarsimMatlab和Prescan都是用于车辆动态仿真的工具。Carsim是一种车辆动力学仿真软件,用于模拟车辆在不同道路和行驶条件下的运动行为。它模拟了车辆的动力系统、车辆控制系统和驱动环境,并提供了准确的车辆动态性能分析结果。 Matlab是一种数学计算和仿真软件,以其强大的数值计算和仿真能力而闻名。它可以与Carsim结合使用,用于分析和处理Carsim模拟结果,并进行更加复杂的算法开发和优化。 Prescan是一种先进的虚拟仿真平台,用于汽车感知、控制和测试。它可以生成逼真的虚拟环境,并模拟车辆在其中的行驶过程。Prescan还可以与CarsimMatlab进行集成,使车辆动力学仿真与实际环境感知和控制系统交互更加紧密。 通过CarsimMatlab和Prescan的联合仿真,我们可以更加准确地模拟和分析车辆在不同场景下的行驶情况。首先,我们可以使用Carsim进行车辆动力学仿真,得到车辆在不同驾驶条件下的动态性能,如加速度、制动距离等。然后,我们可以将Carsim模拟结果导入Matlab进行进一步分析和处理,比如开发车辆控制算法,优化车辆性能等。最后,我们可以将Matlab开发的算法与Prescan进行集成,模拟车辆在虚拟环境中的感知和控制过程,以及与其他交通参与者的交互。 通过CarsimMatlab和Prescan的联合仿真,我们可以更好地理解车辆动力学行为,开发更准确和高效的车辆控制系统,并进行更加全面的场景测试和评估。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值