# MIL模型在环测试 ## 1. 第三方软件联合仿真兼容性声明
软件 兼容版本 备注
Matlab 2018a 以及之后的版本 2015-2018 的版本需要进行版本转换,更早的版本不建议使用
Carmaker 9.0 其余版本未测试
CarSim 2017,2018,2019 其余版本未测试
通过案例教学帮助用户学习和理解联合其他应用进行联合仿真测试。 ## 2. Matlab 联合仿真 本教程以 AEB 算法为例演示 Simulink 如何接入 SimOne 运行联合仿真。
### 2.1 视频教程 ### 2.2 首次接入步骤 如果首次接入 Simulink 运行联合仿真,请完成以下步骤。 #### 2.2.1 找到内置 Simulink 算法 打开 **算法管理** 界面,在算法列表里找到内置算法 **Simulink** **算法** ,勾选算法名称左边的框,选中该算法。 ![](images/16_MIL_model_in_Loop_Test/image1.png) #### 2.2.2 进入 Simulink 参数设置 **鼠标右键** 点击内置的 Simulink 算法,选择 **参数设置 。** ![](images/16_MIL_model_in_Loop_Test/image2.png) 进入 Simulink 参数设置弹窗,如下。 ![](images/16_MIL_model_in_Loop_Test/image3.png) ### 2.3 运行联合仿真 #### 2.3.1 选择运行模式 SimOne 提供自动运行及手动运行联合仿真。 ![](images/16_MIL_model_in_Loop_Test/image4.png) * **手动运行模式**:每次联合仿真前配置好 Matlab,打开需要测试的 Simulink 工程,**用户手动点击 Simulink 的运行按钮进行单个用例的联合仿真**。**(适用于: SimOne 和 Simulink 不一定在同一台电脑上)** * **自动运行模式**:每次联合仿真前配置好 Matlab,打开需要测试的 Simulink 工程,**SimOne 将自动连续运行已打开的(鼠标最近激活)Simulink 工程进行联合仿真。**(**适用于: SimOne 和 Simulink 在同一台电脑上,如不在同一台电脑上,想要使用【自动运行】则需要自己写程序同时监控 SimOne 和 Simulink ,不在SimOne 自带功能范畴之内。**) #### 2.3.2 编辑测试用例 ##### 2.3.2.1 打开用例库,新建标准用例。 1. 进入用例编辑器后,可使用 默认地图 - **三车道路口**,拖入 主车。 2. 主车世界坐标为 X: 300 Y: -6.5 Z: 0,坐标仅供参考,用户可自定义主车位置。 3. 在同车道距离主车 120 米处摆放一个静态障碍物 水马 01 坐标为 X:420 Y:-5.5 Z:0 ,最后点击编辑器左上角 **保存** 用例。 ![](images/16_MIL_model_in_Loop_Test/image5.png) ##### 2.3.2.2 **启动并配置** **Matlab** ```{admonition} 注意 :class: tip 【手动运行】模式及【自动运行】模式都需按以下步骤配置。 ``` ```{admonition} 注意 :class: tip 若在1.3.1选择打开指定路径的 Simulink 工程,SimOne 将自动启动该工程,可跳过此步骤。 ``` 启动本地 Matlab,随跟以下步骤完成 Matlab 与 SimOne 的通信。 1. 点击设置路径,按照下图序号,选择 **添加并包含子文件夹** 将 matlab 目录切换到 *SimOneAPI/Matlab/sfunction\_R2018a/SimOneModule* ,点击 **保存**。 ![](images/16_MIL_model_in_Loop_Test/image6.png) 2. 将左侧当前文件夹定位至 *SimOneAPI/Matlab/sfunction\_R2018a/SimOneModule*。 ![](images/16_MIL_model_in_Loop_Test/image7.png) 3. 创建 bus 信号,在命令行窗口运行 `Simulink.importExternalCTypes('SimOneIOStructBus.h')`*;* 如下图所示,右边工作区的 bus 信号说明创建成功。 ![](images/16_MIL_model_in_Loop_Test/image8.png) 4. 创建通信连接,在命令行窗口运行 *`matlab.engine.shareEngine`*。 ![](images/16_MIL_model_in_Loop_Test/image9.png) 5. 如下图打开 SimOne 提供的 AEB 样例,*`SimOneAPI/Matlab/sfunction_R2018a/Examples/AEB/AEB_Test_module.slx`* ![](images/16_MIL_model_in_Loop_Test/image10.png) 6. 设置 Simulink 仿真 Sample Time,在 Simulink 工程中点击 Simuliation 选择 Model Configuration Parameters,将 **Solver selection** 的 **Type** 设置成 **Fixed-step。** ```{admonition} 注意 :class: tip 若采用帧同步模式,则需要将 Fixed-step 的 size 设置成与 SimOne 运行频率相同或相近的时间,例如 SimOne 60Hz 时,设置为 1/60; 若不采用帧同步模式,则需要将 Fixed-step 的 size 设置成略大于 SimOne 运行频率,例如 SimOne 60Hz,Simulink 100Hz 时,设置为 1/100。 ``` ![](images/16_MIL_model_in_Loop_Test/image11.png) ![](images/16_MIL_model_in_Loop_Test/image12.png) ##### 2.3.2.3 **自动连续运行联合仿真** 1. 回到 SimOne 用例库,选择 Step 5 保存的用例,右键复制粘贴。 ![](images/16_MIL_model_in_Loop_Test/image13.png) 2. 同时选中复制两个用例,点击运行,主车类型保持 **用例设置** 即可。 ![](images/16_MIL_model_in_Loop_Test/image14.png) ![](images/16_MIL_model_in_Loop_Test/image15.png) 3. 打开 **任务管理** -> **正在测试** 列表点击摄像头按钮,打开观察者视窗。 ![](images/16_MIL_model_in_Loop_Test/image16.png) ![](images/16_MIL_model_in_Loop_Test/image17.png) 4. 可看到 Simulink 工程开始自动运行,第一个用例以碰撞失败后,第二个用例自动启动。 ### 2.4 一键启动功能 一键启动是在同一台电脑上通过 MatlabEngine 方式启动 Simulink,并自动生成算法框架的功能。 * 点击右侧属性面板 **一键启动 Simulink** **开发环境** 按钮,程序将自动打开 Matlab,并新建有 SimOne 开发模块的 Simulink 工程文件,请耐心等待。 ![](images/16_MIL_model_in_Loop_Test/image18.png) * 车辆控制默认选择**控制信号**,表示通过油门、刹车、方向盘来控制车辆;**坐标**则是通过坐标输入来挪动车辆,用户按需选择。 * 启动完成后,如下图所示,在此工程完成算法对接即可。 ![](images/16_MIL_model_in_Loop_Test/image19.png) ## 3. CarMaker 联合仿真 ### 3.1 操作步骤 1. 在 SimOne 中将主车资源库中的 CarMaker 拖入主车编辑视窗; 2. 运行 SimOne 测试,CarMaker 将自动启动;请勿操作 CarMaker; 3. 系统正常运行后,能看到 SimOne 中的主车运动;打开 CarMaker 的 Movie 窗口,也能看到 CarMaker 里面车辆的运动; 4. 连续运行 SimOne,不需要在 CarMaker 中进行任何操作;CarMaker 的 TestRun 会自动运行和停止; 5. 如果需要替换 CarMaker 中的主车模型,请打开 Dynamic Interface 项目后,选择指定的主车模型。 6. 所有测试用例运行结束后,手动关闭 CarMaker。 ### 3.2 CarMaker 和 SimOne 使用同一个地图 动力学接入时默认运行的 CarMaker TestRun 使用的是一个大平面地图。如果 SimOne 使用的地图有高低起伏,则动力学接入将忽略这些路面高度信息。 在 CarMaker 中导入和 SimOne 中同样的 OpenDriveOpenDrive 地图,修改 TestRun,则能是动力学匹配和地图/地面高度完全匹配。 具体操作和注意事项如下: 1. CarMaker8 中打开我们提供的 Dynamic\_Interface 项目,打开 TestRun“TestRun”,编辑场景,导入 SimOne 案例中使用的 OpenDriver 地图;添加 route 并放置主车; 2. CarMaker 中打开 Session Log 窗口,运行 TestRun。Log 窗口将输出车辆的坐标; ![](images/16_MIL_model_in_Loop_Test/image20.png) 2. 打开 SimOne 的案例编辑器,将主车位置坐标设置为和 CarMaker 一样; ![](images/16_MIL_model_in_Loop_Test/image21.png) 3. 和普通案例一样,运行测试,可以看到 CarMaker 里面的车辆和 SimOne 的车辆运行在同样的道路上; ![](images/16_MIL_model_in_Loop_Test/image22.png) ```{admonition} 注意 :class: tip 如果主车开出道路边界,CarMaker 将终止测试。 CarMaker 中主车的 Route 有终点,尽量将终点设置为车辆不会到达的位置,否则车辆运行时遇到该位置,CarMaker 也将结束测试。 ``` ## 4. CarSim 联合仿真 ### 4.1 CarSim 配置与运行 1. 在 CarSim 中配置完成车辆模型并运行之后,CarSim 会针对当前配置的模型产生 *`.par`* 文件。 2. 如下图所示,通过 CarSim 主界面上的 **View -> Open Results Folder for this Run in Windows** 可以打开储存该 *`.par`* 文件的文件夹, 3. 保存该文件夹中的 *`LastRun_all.par`* 文件,它对应当前的车辆参数。 ![](images/16_MIL_model_in_Loop_Test/image23.png) ### 4.2 CarSim Solver DLL 配置 在 CarSim 中配置完成车辆模型并点击运行之后,CarSim 会针对当前配置的模型产生*`.sim`* 文件, 该文件位于安装 CarSim 时所指定的数据目录中,例如 *`/CarSim2019.0_Data/simfile.sim`*,该文件中包含 VEHICLE\_CODE 信息,例如 *`“VEHICLE_CODEi_i”`* 。 **对于 CarSim2018 及以上的版本**: * CarSim Solver DLL 位于 CarSim 安装目录下的 *`Programs\CarSim2019.0_Data\simfile.sim`* 文件夹 * 请将该文件夹下的* carsim\_64.dll *复制到 SimOne 程序包的 *`Core\Windows\ThirdParty2019\CarSim\CarSim_Prog\Programs\solvers\Default64`* 目录下。 * 根据 simfile.sim 中的 VEHICLE\_CODE 字段进行重命名,例如,VEHICLE\_CODE 字段为 i\_i,则重命名为 i\_i.dll。 **对于 CarSim2017**: * 64 位的 CarSim Solver DLL 位于 CarSim 安装目录下的*`Programs\solvers\Default64`* 文件夹下 * 根据* simfile.sim *中的 VEHICLE\_CODE 字段将相应的 dll 复制到 SimOne 程序包的*`Core\Windows\ThirdParty\CarSim\CarSim_Prog\Programs\solvers\Default64\carsim2017`* 目录下。例如,*VEHICLE\_CODE* 字段为 i\_i,则复制 *i\_i.dll*。 ### 4.3 SimOne 动力学接入 1. 使用 CarSim 动力学接入,需要打开 SimOne 的主车编辑器页面,在页面下方的 **动力学** 一栏选择 **CarSim** 并使用鼠标拖入主车编辑视窗,如下图所示。 2. 右上角将显示 CarSim 接入的参数设置: * 通过版本下拉框选择相应的 Carsim 版本,“2017”对应 CarSim2017 版本,“2018 或更新” 对应 CarSim2018 及以上版本。 * 单击 **浏览** 导入 3.1.1 中介绍的.par 文件,然后保存该主车。 ![](images/16_MIL_model_in_Loop_Test/image24.png) ### 4.4 仿真前的准备 1. 在运行 SimOne 进行仿真之前,需要启动 CarSim License 服务。 2. 可以运行 cslm.exe 或者启动 CarSim 软件。 ```{admonition} 注意 :class: tip CarSim2019 车辆模型的制动系统配置不能是压强。需要选择制动压力。 ``` ## 5. TruckSim 联合仿真 ### 5.1 TruckSim 配置与运行 1. 在 TruckSim 中配置完成车辆模型并运行之后,TruckSim 会针对当前配置的模型产生 *`.par`* 文件以及 *`.sim`* 文件。 2. *`.sim`* 文件位于 TruckSim 的数据目录中,例如*`/TruckSim2016.1_Data/simfile.sim`* ,该文件包含 FILEBASE 信息,例如 *`FILEBASE C:\Users\Public\Documents\TruckSim2016.1_Data\Runs\Run_f02bf0b3-4066-447e-bb5e-40a929b281c7`* 3. 据此可以得到当前模型的 par 文件为 *`C:\Users\Public\Documents\TruckSim2016.1_Data\Runs\Run_f02bf0b3-4066-447e-bb5e-40a929b281c7_all.par`* ### 5.2 修改 .par 文件 *`simfile.sim`* 包含 VEHICLE\_CODE 信息,需要将该信息写入上述 *`.par`* 文件。 例如,例如 simfile 中包含 “VEHICLE\_CODEs\_s”,则在 .par 文件中新添加一行“VEHICLE\_CODEs\_s”,如下图,然后保存该文件。 ![](images/16_MIL_model_in_Loop_Test/image25.png) ### 5.3 TruckSim Solver DLL 配置 1. *`simfile.sim`* 文件包含 VEHICLE\_CODE 信息,例如“VEHICLE\_CODE s\_s”。 2. 64 位的 TruckSim Solver DLL 位于 TruckSim 安装目录下的 *`\Programs\solvers\default64`* 文件夹。 3. 根据 *`simfile.sim`* 中的 VEHICLE\_CODE 字段将相应的 dll 复制到 SimOne 程序包的 *`Core\Windows\ThirdParty\CarSim\CarSim_Prog\Programs\solvers\Default64\trucksim2016`* 目录下。 4. 例如,VEHICLE\_CODE 字段为 s\_s,则复制 s\_s.dll; ### 5.4 SimOne 动力学接入 1. 同 Carsim 联合仿真 第三步 介绍的编辑方式,通过版本下拉框选择 “TruckSim2016”。 ### 5.5 仿真前的准备 1. 在运行 SimOne 进行仿真之前,需要启动 TruckSim License 服务 2. 可以运行 vslm.exe 或者启动 TruckSim 软件。