prescan:感知 道路
carsim:车辆动力学模型
matlab:写算法,跑仿真
vs2019:prescan和matlab连仿需要2019的C 编译器
总结: 1.testemplanner:在prescan一辆车建在中间 2. 通过carsim打开prescan自带车辆动力学模型demo_PreScarsim3D.cpar,把这个文件放进去experients下面 2.2.prescan将动力学模型添加到型,设置模型频率—build一下发到simulink里面变成slx文件 4.在matlab打开刚刚的prescan中型车文件tslx 5.配置carsim输入输出-在simulink中间配置(参考)sim-pre官方参考模板)
1.打开prescan
2.新建一个experiment,命名为“hhtestemplanner”
3.左侧栏Actors-Audi A8 Sedan(奥迪A8轿车)
4.设置车位:location 的x-y为0 0, Z不变
1.打开carsim-选择右下角 Create a new databased fromxx–continue–打开carsim一个实验文件cpar文件:C:\用户\公用\公用文档\Experiments\Demo Templates\Demo_PreScanCarSim3D(这是prescan自己做的和carsim类似接口连仿的东西,他打包了carsim有些数据:转向、轮盘等,如压缩包,需要使用carsim自己提取)–显示选择文件夹:选择将这些数据提取到哪个文件夹下:推荐prescan的experiment下面(C:\用户\公用\公用文档\Experiments),新文件夹命名为DynamicModel–确认解压
2.可以在Carsim在界面上选择Run Control with Simulink”-Carsim_VehicleDynamics,可以“Input”和“output看输入输出
3.按菜单栏Home”回主题页
1.回到prescan,选中图中车右击Object configuration”-选择“Dynamics‘-选择“User specified用户自定义-选择之前DynamicModel文件下的Extensions\simulink\CarSim_VehicleDynamics.mdl(C:\用户\公用\公用文档\Experiments\DynamicModel\Extensions\simulink\CarSim_VehicleDynamics.mdl)-确认之后–选择Apply-再OK
2.菜单栏的时钟(Simulation Scheduler模拟调度程序)—这是设置仿真频率,或者说迭代步长,对于Carsim对于这力学模型需要10000Hz,否则不会收敛,所以选择Compilation sheet frequency”为1000HZ,注意前面“Simulation core frequency”是prescan提供传感器信息,所以20HZ可以)-然后再Aplly”-‘OK’ (频率越高,跑得越慢,但至少要2000HZ,这样Carsim也得200HZ)
3.菜单栏“Build”-(把prescan生成相关数据simulink模型)注意:无论变化有多小,即使你移动汽车的位置,你也应该Build一下
1.打开matlab(不能直接双击)电脑右下角prescan右击小图标open-在弹框中点击matlab”的“Start”
2.等几分钟,会配置一些和谐prescan如果是第一次prescan和matlab会调用的vs2019年,编译一系列相关程序,第一次大约5-10min)
3.此时matlab工作路径会自动跳转至C:\用户\公用\公用文档\Experiments
4.选择matlab左侧当前文件夹hhtestemplanner文件是我之前建立的;点击上面菜单栏的浏览文件夹,选择hhtestemplanner”
5.此时左侧多了一些文件,slx文件:是prescan build出的simulink选择此文件并将其拖到命令行窗口以打开该文件(将首先阅读)pb生成相关配置的文件
6.在生成的matlab在模拟文件中,在prescan右上方有按钮Regenerate,它表示在prescan里面build之后,在simulink还要点一下Regenerate,重生,让他刷一下,然后这个变化就可以了simulink它在里面生效(这里我们不会regenerate了,因为每次新打开都会自动打开regenerate)
7.双击车,看一看:Dynamics_UserSpercified:点击向下的箭头,点击左边的箭头carsim S-Function选择图标 Simfile name,但现在还没有,所以要生成一下,方法如下:点开carsim软件,点“Run Control with Simulink”下的“Send to Simulink(如果灰点不能起来,应该是右上角Lock)—会自动调用matlab,所以要等一会儿,matlab调用后,这个 Simfile 文件就是在DynamicModel文件夹中,找到文件后,右击复制路径,然后粘贴到matlab的Simfile name中
8.配置一下Carsim输入输出:点开carsim-选择“Run Control with Simulink”下的“carsim VehicleDynamics”,再点“Input”:
1.STEER_SW:方向盘转向
2.THROTTLE_ENGINE:油门
3.PCON_BK: 制动压力
4-15:坡度
16-23:路面附着
如何设置参数输入prescan和carsim本身的连续模仿目标,刚才我的红车matlab打开模拟页面中的文件:C:\用户\公用\公用文档\Experiments\DemoTemplates\Demo_PrescanCarsim3D\Demo_preScanCarsim3D_cs,然后打开第三框(有车的那个),然后向下按钮,然后可以复制车左侧的输入,然后连接Input和车一起,车头要删;输出也要粘贴调整,具体不细说。把我复制的输出和原来的输出连接起来(Control选择这两个)
看输入:点击,是[1 1 1 12 正好对着Carsim的Input,正好也是23个
然后在前面设置Input接口,前三个,12个接地,因为我们没有坡度,8个是附着系数,设置为0.9:constant模块:(1,8)*0.9
再次设置输出接口:vx vy ax ay,前两个可以直接连接,后两个不需要Carsim加:点开Carsim输出原本是35,现在要增加到37:categories”选择“selected by units下面选择g",”Output variables双击选择Ax-Long, acceleration, vehicle(g)“和”Ay-Lateral acceleration, vehicle(g)这样在variables Activated for export"有37个变量,就搞好了.回到主页点"send to simulink"
再回到simulink,点击原始输出的向下箭头,查看输出[3 3 3 -1],所以已经有9个了,但是总共有37个,所以后面有28个,创了一个Demuc接口,值为28,再搞一下ax ay但要注意输出g=9.8的换算
再出来连接原模型。ax ay
打开 EMPlanner文件夹中的emplanner_init、table_calibration、testctrl复制三个文件,粘贴到C:\用户\公用\公用文档\Experiments\hhtestemplanner文件夹下
在matlab的hhtestemplanner下regenerate一下
现在看看这三个文件是什么:matlab的左侧选中emplanner_init文件,右击打开:加载油门制动校准表、前轮角和方向盘角的映射关系(是的Carsim自带)、转向系统C特性、弧角转换、车辆参数、横向LQR参数设置 、纵向双PID参数,跑的参数LQR(LQR(linear quadratic regulator)即线性二次调节器,基本控制方法),车辆初始位置。这些都是车辆控制算法所需的参数。在操作脚本时,工作区域有这些变量。这些都是车辆控制算法所需的参数。在操作脚本下,工作区域有这些变量。这些变量是控制算法所必需的参数
打开王老师的算法: EMPlanner文件夹中EMPlanner_cs.slx打开文件,点击下车,复制粘贴输入输出和算法hhtestemplanner里面
构建模拟平台
简要了解这个算法:
定位模块:prescan自带
决策规划模块:这是王先生之前所说的控制,以验证轨迹跟踪性能
控制模块:输入是定位、规划和预描的时间,输出是航向角、油门、制动器和相关时间debug(调试信息);Control main它是控制的主函数,分为横向控制(LQR)、横向控制(双PID),还有understeer compensate:转向不足的积分补偿(目前未开启,已关闭),chassic steering system:从前轮角到方向盘角(但该模型有点错误,校准表应该是右前轮与转向系统齿条的位移、齿条位移和C-fact这种映射关系变成了方向盘角。但是这里的输入LQR_final_angle左前轮和右前轮应合并(在自行车模型中)angle),但汽车不是自行车,所以这里的自行车前轮要转换为汽车左右前轮的转角,这里还需要一个Ackermann转向几何转换一下右前轮转角。这个有问题,后面王老师会修一下,修的话我怎么改??????
又规划模块的时间T=30,所以仿真也30s,在hhtestemplanner的matla下设置stop time为30,再运行一下:点这里的车,再按”run“,这里报错了,说