本文主要是介绍prescan学习之二:自动化测试--prescan.experiment的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
看了prescan的自动化测试,将所得写下来。
- 1.搭建模型
- 2.Data Model Api
- 3.各个函数使用举例
- 3.1 getDefaultFilename
- 3.2 getFieldValue
- 3.3 readDataModels
- 3.4 replaceWorldObjectByName
- 3.5 run
- 3.6 runWithDataModels
- 3.7 setFieldValue
- 3.8 worldObjectsDeleteByName
- 3.9 worldObjectsDeleteByTypeId
- 3.10 worldObjectsDeleteByUniqueId
- 4.运用脚本修改参数
- 5.结束
1.搭建模型
2.Data Model Api
编写脚本文件之前,借助帮助文档看一下Data Model Api包含的函数。如下为prescan.experiment层次的函数。
name | 含义 |
---|---|
getDefaultFilename | 获取试验的名称 |
getFieldValue | 返回相应的参数值 |
readDataModels | 读取模型数据 |
replaceWorldObjectByName | 使用一个数据结构中的对象代替另一个 |
run | 默认编译表运行模型 |
runWithDataModels | 运行更改后的模型 |
setFieldValue | 设置相关参数的值 |
worldObjectsDeleteByName | 通过提供的名字删除对象 |
worldObjectsDeleteByTypeId | 通过提供的typeid删除对象 |
worldObjectsDeleteByUniqueId | 通过uniqueid删除对象 |
worldObjectsDeleteIf | 使用matlab匿名函数删除对象 |
writeDataModels | 将数据写入文件 |
3.各个函数使用举例
3.1 getDefaultFilename
语法:
filename = prescan.experiment.getDefaultFilename()
3.2 getFieldValue
语法:
[value, result] = prescan.experiment.getFieldValue(inStruct, name)
描述:
返回与提供的名称对应的第一个字段的值(如果出现在输入结构指示中)。除了结构之外,还可以提供单元格数组,在这种情况下,函数将遍历数组并返回数组元素中第一个匹配的字段。该函数还检查所有嵌套结构和单元格数组以搜索字段。如果函数返回的结果(第二个返回参数)等于false(或0),则指定的字段未找到。
输入:
需要搜索字段的结构或单元格数组(所有嵌套结构和单元格数组也需要搜索,直到找到字段
输出:
value:字段搜索的结果
result:1 = true,如果字段被找到,0 = false
3.3 readDataModels
语法:
model= prescan.experiment.readDataModels(文件名)
描述:
从指定的.pb文件中读取数据模型,由文件名指定。如果没有提供文件名,此函数将使用prescan.experiment。getDefaultFilename来确定加载模型的文件名。如果实验文件夹包含多个.pb文件,请使用文件名参数。如果指定的文件不存在,函数将返回一个没有字段的结构。
输入:
filename:可选的字符数组,包含要加载的文件的名称
输出:
一个具有多个字段的结构(数量取决于Prescan中当前激活的插件/模块),这些字段表示属于实验的不同模型(如worldmodel, cameramodel等)。
3.4 replaceWorldObjectByName
语法:
model=prescan.experiment.replaceWorldObjectByName(inmodel, inName, outmodel, outName)
描述:
通过名称将outModels中的一个world对象替换为inModels中的另一个world对象。
3.5 run
语法:
simOut = prescan.experiment.run(varargin)
描述:
运行Prescan模拟。这个函数使用存储在实验文件夹中的数据模型。
在对数据模型API函数进行任何更改之前,可以使用这个函数来运行实验,以便进行比较。
输入:
varargin:可选的参数列表(名称/值对),用于控制实验的执行。可以使用以下参数:
·“regenerate”、“on”—强制重新生成编译表。这是默认行为,例如,如果没有指定参数,编译表将自动重新生成
·“regenerate”、“关闭”——禁用编译表的再生。在某些情况下,禁用再生可能导致执行错误。
·其他参数请参见Matlab文档https://www.mathworks.com/help/simulink/slref/sim.html输出:
包含日志模拟结果的模拟对象
3.6 runWithDataModels
语法:
simOut = prescan.experiment.runWithDataModels(model, varargin)
描述:
运行Prescan模拟。在执行模拟之前,此函数使用提供的数据模型生成新的编译表。
使用此函数在数据模型中使用修改过的参数运行多个实验。
请注意,更改数据模型中的某些参数,即摄像机传感器的FOV不需要重新生成编译表。函数内部将提供的数据模型中间存储到默认的.pb实验文件中(执行前创建备份,simulink完成后恢复原始文件)
3.7 setFieldValue
语法:
[instruct,result]= prescan.experiment.setFieldValue(inStruct, name, value)
描述:
设置结构指示中的某个字段的值。除了结构之外,您还可以提供一个单元格数组,在这种情况下,函数将遍历输入数组并设置数组元素的第一个找到的字段。该函数还检查所有嵌套结构和单元格数组以搜索字段。如果函数返回的结果(第二个返回参数)等于false(或0),则表示没有找到指定的字段。
输入:
instruct:需要搜索字段的结构或单元格数组(所有嵌套结构和单元格数组也要搜索,直到找到字段)
name:应该设置值的字段的名称
value:应该为字段设置的值
输出:
instruct:已修改的输入结构和已执行的修改(如果找到了所请求的字段)
result:字段搜索的结果:1 = true如果找到字段,0 = false如果没有找到字段
3.8 worldObjectsDeleteByName
语法:
models=prescan.experiment.worldObjectsDeleteByName(models, name)
描述:
根据世界对象的名称删除它们。这个函数还删除了所有与这些对象关联的传感器、关联的参与者以及models.worldmodel.userObjectType 数组。
输入:
models:包含prescan.experiment.readDataModels返回的所有数据模型的结构。
name:要删除的对象名称列表
输出:
模型:已修改的输入结构,它不包含已删除的对象及其关联元素
3.9 worldObjectsDeleteByTypeId
语法:
models=prescan.experiment.worldObjectsDeleteByTypeId(models、typeid)
3.10 worldObjectsDeleteByUniqueId
语法:
modes=prescan.experiment.worldObjectsDeleteByUniqueId(models, uniqueId)
4.运用脚本修改参数
models=prescan.experiment.readDataModels();
models= prescan.experiment.worldObjectsDeleteByName(models, 'Mazda_RX8');
indices_bwn = prescan.worldmodel.objectsFindByName(models.worldmodel, 'BMW_X5');
position=prescan.experiment.getFieldValue(models.worldmodel.object{indices_bwn,1},'position');
models.worldmodel.object{indices_bwn,1}.pose.position=prescan.experiment.setFieldValue(...
models.worldmodel.object{indices_bwn,1}.pose.position,'x',1300);
simOut = prescan.experiment.runWithDataModels(models, 'StopTime', '10');
5.结束
这篇关于prescan学习之二:自动化测试--prescan.experiment的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!