概述
文章目录
- 用MATLAB更改初始data model文件中的参数(1)
- 什么是Data Model文件?
- Data Model API
- 如何读取data model里面的内容?
- 还有哪些其他实用的API?(从属于prescan.experiment下)
- 用Data Model API修改参数的优势
用MATLAB更改初始data model文件中的参数(1)
最近导师让我看下PreScan帮助文档中如何用MATLAB脚本修改已搭建模型的参数的部分,虽然说还没想好有哪些具体场景可以搭建,但阅读过文档之后,还是在这记录一下相关知识点和相关API,语法感觉比较简单好记。(我只重点看了utility functions下的prescan.experiment,之后的我以后看了或有用到就马上补上)
什么是Data Model文件?
先说什么是Data Model。我们都知道在PreScan GUI中parse并build之后,我们会打开MATLAB Simulink窗口,这时进入相关项目所在路径(和.slx文件同路径),我们能发现一个后缀为.pb的文件(名字和你的实验名称相同,experiment_name.pb),这个就是初始的data model文件了。在Simulink模块运行之前这个文件会被MATLAB初始化,这其中包含了很多参数,比如worldmodel, cammodel, cameramodel或者还有一些特定的传感器模型(sensor specific models)等。
这些所包含的信息中worldmodel类最为重要,它含有整个搭建的工况的信息。cammodel和cameramodel包含了一些关于可视化相机的信息。用户们可以在模块运行之前自行更改这些参数的值,一些改变可以在运行中被发现,或者说不需要regeneration(比如我们可以替换不同的参与车辆),但是有些变动则会破坏整个仿真。
Data Model API
有了关于data model文件的一些基本理解,接下来就是如何用API写一些语句读取并进一步修改这些数据了。
如何读取data model里面的内容?
读取有两种方式,第一是不标明路径,第二则是输入具体路径。
如果你已经运行了simulink的模块,可以直接输入models=prescan.experiment.readDataModels();
来把data model的数据存储到类型为struct的变量models中。点击工作区的此变量,可以看到如图所示的一些子变量(或者说子数据)
正如上文所说,models里面含有worldmodel, cammodel, cameramodel和一些其他传感器的信息,这些信息都以struct或者cell类型进行存储。接下来点击worldmodel,可以看到它包含了许多重要的参数(如下图),诸如,experimentID(本实验的名称),object, sky, terrain, weather (操作条件的信息)等。
如果我们想运行特定的文件,可以把上一个语句改为models=prescan.experiment.readDataModels('pathExperimentFileName.pb');
括号里为.pb文件的具体路径即可。
还有哪些其他实用的API?(从属于prescan.experiment下)
除了读取data model中的参数之外,如果我们想修改一些参数,可以采用直接赋值的方法,比如
%change the camera resolution to 1900x1080 px
models.cameramodel.sensor{1}.resolution = struct('x', 1900, 'y', 1080);
当然,除此之外MATLAB还提供了其他的函数,比如prescan.experiment
系列的函数。(因为我重点看了这一部分,其他的诸如prescan.sensors
,prescan.worldmodel
,和prescan.types
等我用到了之后再补上)
prescan.experiment
系列一些我觉得我之后可能会用到的API总结:(具体语法使用的时候直接参考帮助文档即可)
API名称 | 简要用途 |
---|---|
getFieldValue | 得到data model子变量的数据 |
readDataModels | 读取data model中的内容 |
replaceWorldObjectByName | 从另外一个数据模型中用名字的方式替换现有文件的对应数据 |
runWithDataModels | 用制定的data model运行simulink文件 |
setFieldValue | 设置某个子数据的数值 |
worldObjectsDeleteByName | 通过名字删除对象 |
worldObjectsDeleteByTypeId | 通过typeID删除对象 |
worldObjectsDeleteIf | 使用MATLAB匿名函数删除某个对象 |
writeDataModels | 将数据重新写入.pb文件中 |
我从文档中复制了一个例子过来:
% read data models from the 'default' file
models = prescan.experiment.readDataModels();
% run unmodified simulation
simOut = prescan.experiment.run('StopTime', '5');
% change the camera azimuth FOV to 1.2 rad (~69 degrees)
models.cameramodel.sensor{1} = prescan.experiment.setFieldValue(models.cameramodel.sensor{1}, 'fovAzimuth', 1.2);
% change the camera elevation FOV to 1.0 rad (~57 degrees)
models.cameramodel.sensor{1} = prescan.experiment.setFieldValue(models.cameramodel.sensor{1}, 'fovElevation', 1.0);
% run simulation with modified camera sensor
simOut = prescan.experiment.runWithDataModels(models, 'StopTime', '5');
效果如图:
用Data Model API修改参数的优势
最后是关于使用这些MATLAB API的优点:
1.不需要重复建模(画不同的scenarios),非常节省时间。
2.用户可以具体到修改某一个目标或者对象的参数。
3.可以利用结构化的数据。
最后
以上就是高大眼睛为你收集整理的PreScan笔记(2.1)——MATLAB更改初始data model文件中的参数用MATLAB更改初始data model文件中的参数(1)的全部内容,希望文章能够帮你解决PreScan笔记(2.1)——MATLAB更改初始data model文件中的参数用MATLAB更改初始data model文件中的参数(1)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复