文章目录

  • 用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.sensorsprescan.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文件中的参数相关推荐

  1. 找出100以内所有能被3整除的数,并把结果写入d:\xxx\data.dat文件中

    给一位CSDN朋友写的一个demo 描述:找出100以内所有能被3整除的数,并把结果写入d:\xxx\data.dat文件中. import java.io.File; import java.io. ...

  2. 【数据结构笔记42】哈希表应用:文件中单词词频统计

    本次笔记内容: 11.5 文件中单词词频统计 文章目录 题目 分析 程序框架 题目 如上图,对单词词频进行统计. 分析 如上图,涉及到对已有单词进行查找,因此要进行单词的管理,使用散列表. 程序框架 ...

  3. matlab 判断文件有多少行,在Matlab中有没有办法确定文件中的行数,而不是循环遍历每一行?...

    我喜欢使用以下代码完成这项任务 fid = fopen('someTextFile.txt', 'rb'); %# Get file size. fseek(fid, 0, 'eof'); fileS ...

  4. 从Matlab的 .fig 图窗文件中提取相关数据

    首先我们需要知道,Matlab的 .fig 图形体系分成4级:root-figure-axes-line.这种分层结构可在图窗的"属性检查器"里看到,此外还能看到每个层级的父/子以 ...

  5. r导入txt乱码_R学习笔记系列—R语言从文本和Excel文件中读取数据-excel打开是乱码...

    1.4.1 从文本文件中导入数据 可以使用 read.table() 函数从带分隔符的文本文件中导入数.调用格式为: 这个函数看上去很复杂,但其实很多参数在使用时不用明确指出来,使用默认值可以满足绝大 ...

  6. matlab设置数组输出到文件中,Matlab将元胞数组输出到txt或者dat文件中

    我目前遇上了元胞数组无法输出或无法完整输出到txt/dat文件的问题.网上有用 fprintf 和writetable两种方法,可是用fprintf的方法提示没有为'cell'输入定义函数,可是我明明 ...

  7. 《Python Cookbook 3rd》笔记(5.2):打印输出至文件中

    打印输出至文件中 问题 你想将 print() 函数的输出重定向到一个文件中去. 解法 在 print() 函数中指定 file 关键字参数,像下面这样: with open('d:/work/tes ...

  8. MATLAB将数据存在TXT文件中

    %%记录结果,将数据保存到txt文件中 fid = fopen('结果记录.txt','a'); %结果记录.txt是存储数据的文件,a是数据向后增加的意思 fprintf(fid,'%f\t',hz ...

  9. Introduction to Computer Networking学习笔记(十五):Queue Model 包交换中的缓冲模型

    本章知识点比较零散,因此一篇文章进行总结,并且不具有连贯性,仅记录自己认为有价值的内容. 将较大的包拆分为小包进行传输,可以减小端对端延迟,原因如下图: 数据传输时,突发大量的数据包会增加延迟,简单周 ...

  10. MATLAB学习笔记2:MATLAB基础知识(下)

    阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...

最新文章

  1. hive操作create,alter等
  2. 产品经理必备的14大效率工具
  3. 笔记-高项案例题-2018年上-人力资源管理-建设项目团队
  4. Indian Scientists Design Device to Collect Solar Energy 印度科学家设计太阳能收集设备
  5. 模仿黑产破解12306验证码,验证码产品的未来是?
  6. scala学习-类与对象
  7. 在服务器上远程使用tensorboard查看训练loss和准确率
  8. 麒麟操作系统|Linux下低延时RTMP|RTSP直播播放实现
  9. “Device eth0 does not seem to be present”解决办法
  10. Bzoj 4147: [AMPPZ2014]Euclidean Nim(博弈)
  11. centos7部署posgresql和kong总结
  12. java学习资料总结
  13. Mac 安装 MAT内存分析工具
  14. asp mysql rs.recordcount_asp 中rs.fields.count,rs.recordcount代表什么意思
  15. 编码格式转换--常见编码间的转换以及中文简繁互换
  16. html5 cms结构,cms产品架构图.html
  17. 美通企业日报 | 陶氏杜邦完成对新陶氏的分拆;英特尔1.17亿美元投资14家创新公司...
  18. 在 Linux 上以 All-in-One 模式安装 KubeSphere
  19. java之学习记录 3 - 2 - es6
  20. leetcode:641. 设计循环双端队列

热门文章

  1. SAP-MM知识精解-批次管理(01)- 概览及物料的批次启用
  2. 最小二乘法拟合直线-C++实现
  3. [C/C++]Windows下的getch函数实现
  4. UDP socket查询高速缓存
  5. php网站 小偷源代码
  6. javascript电子书下载
  7. 翻译助手-免费翻译助手下载
  8. 2011年浙江计算机二级vfp是什么,2011年计算机二级VFP考试基础教程(21)
  9. easyflash 教程
  10. swagger 上传文件 参数_如何使用Swagger上传文件