# 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** **算法** ,勾选算法名称左边的框,选中该算法。

#### 2.2.2 进入 Simulink 参数设置
**鼠标右键** 点击内置的 Simulink 算法,选择 **参数设置 。**

进入 Simulink 参数设置弹窗,如下。

### 2.3 运行联合仿真
#### 2.3.1 选择运行模式
SimOne 提供自动运行及手动运行联合仿真。

* **手动运行模式**:每次联合仿真前配置好 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 ,最后点击编辑器左上角 **保存** 用例。

##### 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* ,点击 **保存**。

2. 将左侧当前文件夹定位至 *SimOneAPI/Matlab/sfunction\_R2018a/SimOneModule*。

3. 创建 bus 信号,在命令行窗口运行 `Simulink.importExternalCTypes('SimOneIOStructBus.h')`*;*
如下图所示,右边工作区的 bus 信号说明创建成功。

4. 创建通信连接,在命令行窗口运行 *`matlab.engine.shareEngine`*。

5. 如下图打开 SimOne 提供的 AEB 样例,*`SimOneAPI/Matlab/sfunction_R2018a/Examples/AEB/AEB_Test_module.slx`*

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。
```


##### 2.3.2.3 **自动连续运行联合仿真**
1. 回到 SimOne 用例库,选择 Step 5 保存的用例,右键复制粘贴。

2. 同时选中复制两个用例,点击运行,主车类型保持 **用例设置** 即可。


3. 打开 **任务管理** -> **正在测试** 列表点击摄像头按钮,打开观察者视窗。


4. 可看到 Simulink 工程开始自动运行,第一个用例以碰撞失败后,第二个用例自动启动。
### 2.4 一键启动功能
一键启动是在同一台电脑上通过 MatlabEngine 方式启动 Simulink,并自动生成算法框架的功能。
* 点击右侧属性面板 **一键启动 Simulink** **开发环境** 按钮,程序将自动打开 Matlab,并新建有 SimOne 开发模块的 Simulink 工程文件,请耐心等待。

* 车辆控制默认选择**控制信号**,表示通过油门、刹车、方向盘来控制车辆;**坐标**则是通过坐标输入来挪动车辆,用户按需选择。
* 启动完成后,如下图所示,在此工程完成算法对接即可。

## 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 窗口将输出车辆的坐标;

2. 打开 SimOne 的案例编辑器,将主车位置坐标设置为和 CarMaker 一样;

3. 和普通案例一样,运行测试,可以看到 CarMaker 里面的车辆和 SimOne 的车辆运行在同样的道路上;

```{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`* 文件,它对应当前的车辆参数。

### 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 文件,然后保存该主车。

### 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”,如下图,然后保存该文件。

### 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 软件。