PreScan笔记(2.1)——MATLAB更改初始data model文件中的参数
文章目录
- 用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('\path\ExperimentFileName.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文件中的参数相关推荐
- 找出100以内所有能被3整除的数,并把结果写入d:\xxx\data.dat文件中
给一位CSDN朋友写的一个demo 描述:找出100以内所有能被3整除的数,并把结果写入d:\xxx\data.dat文件中. import java.io.File; import java.io. ...
- 【数据结构笔记42】哈希表应用:文件中单词词频统计
本次笔记内容: 11.5 文件中单词词频统计 文章目录 题目 分析 程序框架 题目 如上图,对单词词频进行统计. 分析 如上图,涉及到对已有单词进行查找,因此要进行单词的管理,使用散列表. 程序框架 ...
- matlab 判断文件有多少行,在Matlab中有没有办法确定文件中的行数,而不是循环遍历每一行?...
我喜欢使用以下代码完成这项任务 fid = fopen('someTextFile.txt', 'rb'); %# Get file size. fseek(fid, 0, 'eof'); fileS ...
- 从Matlab的 .fig 图窗文件中提取相关数据
首先我们需要知道,Matlab的 .fig 图形体系分成4级:root-figure-axes-line.这种分层结构可在图窗的"属性检查器"里看到,此外还能看到每个层级的父/子以 ...
- r导入txt乱码_R学习笔记系列—R语言从文本和Excel文件中读取数据-excel打开是乱码...
1.4.1 从文本文件中导入数据 可以使用 read.table() 函数从带分隔符的文本文件中导入数.调用格式为: 这个函数看上去很复杂,但其实很多参数在使用时不用明确指出来,使用默认值可以满足绝大 ...
- matlab设置数组输出到文件中,Matlab将元胞数组输出到txt或者dat文件中
我目前遇上了元胞数组无法输出或无法完整输出到txt/dat文件的问题.网上有用 fprintf 和writetable两种方法,可是用fprintf的方法提示没有为'cell'输入定义函数,可是我明明 ...
- 《Python Cookbook 3rd》笔记(5.2):打印输出至文件中
打印输出至文件中 问题 你想将 print() 函数的输出重定向到一个文件中去. 解法 在 print() 函数中指定 file 关键字参数,像下面这样: with open('d:/work/tes ...
- MATLAB将数据存在TXT文件中
%%记录结果,将数据保存到txt文件中 fid = fopen('结果记录.txt','a'); %结果记录.txt是存储数据的文件,a是数据向后增加的意思 fprintf(fid,'%f\t',hz ...
- Introduction to Computer Networking学习笔记(十五):Queue Model 包交换中的缓冲模型
本章知识点比较零散,因此一篇文章进行总结,并且不具有连贯性,仅记录自己认为有价值的内容. 将较大的包拆分为小包进行传输,可以减小端对端延迟,原因如下图: 数据传输时,突发大量的数据包会增加延迟,简单周 ...
- MATLAB学习笔记2:MATLAB基础知识(下)
阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...
最新文章
- hive操作create,alter等
- 产品经理必备的14大效率工具
- 笔记-高项案例题-2018年上-人力资源管理-建设项目团队
- Indian Scientists Design Device to Collect Solar Energy 印度科学家设计太阳能收集设备
- 模仿黑产破解12306验证码,验证码产品的未来是?
- scala学习-类与对象
- 在服务器上远程使用tensorboard查看训练loss和准确率
- 麒麟操作系统|Linux下低延时RTMP|RTSP直播播放实现
- “Device eth0 does not seem to be present”解决办法
- Bzoj 4147: [AMPPZ2014]Euclidean Nim(博弈)
- centos7部署posgresql和kong总结
- java学习资料总结
- Mac 安装 MAT内存分析工具
- asp mysql rs.recordcount_asp 中rs.fields.count,rs.recordcount代表什么意思
- 编码格式转换--常见编码间的转换以及中文简繁互换
- html5 cms结构,cms产品架构图.html
- 美通企业日报 | 陶氏杜邦完成对新陶氏的分拆;英特尔1.17亿美元投资14家创新公司...
- 在 Linux 上以 All-in-One 模式安装 KubeSphere
- java之学习记录 3 - 2 - es6
- leetcode:641. 设计循环双端队列