概述
文章目录
- 1. Prescan 基本介绍
- 2. 场景搭建
- 2.1 静态部分
- 环境和天气
- 基础设施之路段、路面、路标和交通信号
- 基础设施之静态物体
- 2.2 动态部分
- 路线
- 行人和车辆
- 2.3 监测部分——传感器和可视化
- 传感器
- 3D VisViewer
- 2.4 整体——地图导入
- 3. 测试部分
- 3.1 Parse和Build
- 3.2 MATLAB配置
- 3.3 MATLAB脚本改场景参数和数据
自己也算是Prescan小白一枚,还在不断学习中。我也通过本文把这段时间的内容总结一下。跟老师交流了之后发现自己之前看手册的时候 忽视了各模块之间的逻辑关系,因此在写这篇文章的时候仔细构思了下文章的框架结构,其中一个目的是把这些组件分分类,也就是尽可能地有逻辑地把这些模块组织在一起。 有不足之处请指正!
1. Prescan 基本介绍
关于Prescan的基本介绍请参考我的博客:Prescan笔记(1)——first demo这篇文章里的第一节内容,这里再简单总结下。详细的还是阅读下官方手册。(使用的是Prescan 8.5版本)
根据我目前所学到的内容,Prescan,简单来说整合了一个以场景为导向的GUI,连接了用于模拟汽车在不同场景下的行为的MATLAB Simulink,提供了可视化的VisViewer窗口,从而完成了从前端到后端的一条链。当然也可以在GUI中导入第三方软件提供的车辆型号或者设置单个车辆的动力模型等。
2. 场景搭建
场景搭建就是在提前设定好的“大环境”下把各个场景元素拼接在一起,这些元素,或者是“积木”大概可以分成两部分吧,静态模块和动态模块。(突然想到自己在坐车还有学开车的时候,好像更关注于动态的车辆行人了,把静态的路标,各种类型的路当成理所当然的了。)
2.1 静态部分
环境和天气
静态部分首先是做一些基础设定:设置天气、阳光照射条件,甚至是设置空气密度和重力加速度(便于精确计算车辆的速度变化曲线)
设置天气有雾天、降雨、降雪。 雾天可以设置其能见度,和雾的颜色。 (??这可能是要模仿沙尘暴天气吧) 设置界面如下图:
降雨和降雪被统一归到降水(Precipitation)这一栏中,可以设定其z轴的下降速度,颗粒密度(Particle Density)和颗粒直径(Diameter),设置界面如下:
除了设置天气,还可以设置大背景和阳光照射条件(Sky and Sun)。设置大背景基于图像的有四个选项:None, Air, Desert和Mountain,可以说是设置场景外部的背景,我自己也试了下,将sky的设置改成了mountain,效果如下,哈哈真的挺炫酷!
是指设置阳光照射条件的时候可以选择设置太阳的坐标,会产生不同的方位角,还可以设置太阳的光照强度,具体设置界面如下:
不过个人认为Prescan要是能把这些场景元素用某种编程语言转化为可调用的库可能搭建场景会更方便吧。
基础设施之路段、路面、路标和交通信号
设置完了整体的“幕布”,接下来就该正式进入工况的搭建了。首先是路段,Prescan GUI中提供了13种路段,排列组合一下至少也得有 1 3 n 13^n 13n种组合,具体界面请参照我的博客:Prescan笔记(1)——first demo中搭建场景的具体步骤中的第二步——添加道路。
有了路段之后,再具体一层就是具体的路面信息。平时我们难免会抱怨路面凹凸不平啊,路面脏啊等等。 Prescan GUI在Environment一栏中也专门提供了dirt spot来应对这种情况。“脏东西”具体有泥泞路面,积水积雪路面,沙尘路面, 鹅卵石路面等,还可以通过设置让传感器识别到这些“脏污”。具体类型如下图:
有了路段和路面,接下来的操作肯定是放置路标来管控交通了。Prescan在“Infrastructure → to →Road Markings”提供了多种路面标记,比如左右转向、掉头、人行横道、车辆汇入等等。除了路标,Prescan还提供了交通信号,具体的有四个国家:荷兰、德国、日本、美国的交通信号集合,具体情况可以具体选择。Prescan还提供了各种各样的红绿灯,道路信息牌等。
基础设施之静态物体
搭完了道路主体部分,接下来的任务就是稍作点缀了,通过加一些静态物体让整个工况逼真一些。Prescan提供的静态物体有两大类:自然物体和建筑物。自然物体包括许多不同品种的树,建筑物囊括了住房、博物馆、农场、汽车加油站、消防站等。
2.2 动态部分
到2.1节为止,静态部分的搭建已经完工了,接下来就要考虑核心部分——车辆行人的路线和具体的速度了,这些在Prescan中合称为轨迹Trajectory(路线,路径,轨迹的概念区别请参见我的博客PreScan笔记(3)——设置车速(Speed Profile Editor)的第一部分)。
路线
画路线有两种方法,第一种方法是通过继承路段的标志点来画,比如说给定一个环岛路段,如果要从环岛的一端行驶到或走到另一端可以直接连接路段上的相应黄色圆圈即可,如下图:
第二种方法是画任意路线,点击上图中inherited from path中的上方图标即可。
行人和车辆
路线画完就可以把场景中的“演员”放到路线上了,直接把行人或车辆拖到画好的路线上即可。拖好之后Prescan默认所有车辆和行人都是匀速运动,当然这在现实中不可能。我们可以通过点击Prescan右侧的“Experiment Component → to →SpeedProfiles”中的对应的“SpeedProfile_n”来设置速度曲线,具体操作请参见我的博客PreScan笔记(3)——设置车速(Speed Profile Editor)的二三部分)
2.3 监测部分——传感器和可视化
传感器
之前看了手册上关于传感器的一些大概内容,没有看完,以后用到了再看一遍然后看看用一整篇博客来总结吧, 这一部分先做个关于传感器的简单总结。
Prescan中提供了非常多的传感器。例如,理想条件下的传感器AIR,它能够获取车辆的速度,坐标等信息,但是它会无视车前方的障碍检测到另外的车辆,这也是为什么它属于理想传感器的原因。AIR传感器的simulink示意图为:
它能够输出车辆的坐标值、速度和水平偏向角,通过在simulink界面中添加示波器等sink模块可以看到这些输出的曲线。
除了AIR传感器之外,理想传感器还有红外、射频传感器。其他传感器还有用于自动驾驶中环境感知的摄像头、激光雷达(LIDAR)、传统雷达(RADAR)、超声波传感器等。还有用于标定真值(Ground Truth)的图像分割传感器,点云传感器(Point Cloud Sensor)等。
传感器分类总结如下图:
3D VisViewer
Prescan提供了非常实用的3D可视化功能。这里先看下可视化之后的效果:(可视化之前的编译步骤见第3节内容)
左图是加入human视角之后的效果(驾驶员视角直接将“Visu Aids
→
to
→Human View”拖拽到车辆上即可),右图是整体场景的效果图。
2.4 整体——地图导入
Prescan中也支持Opendrive和Openstreetmap的导入,我只按照手册中讲openstreetmap中的步骤试了下导入荷兰某地区的地图,但出现错误的路段,之后学习完我再加上这部分的内容。
3. 测试部分
在获得2.3节中的3D动画之前,要将Prescan和MATLAB耦合在在一起,其步骤是“Parse → to →Build → to →Invoke MATLAB”,点击MATLAB Simulink中的“RUN”按键,就可以得到所建场景的动画。
3.1 Parse和Build
Parse就是对当前场景的检查和编译,如果出现错误路段,错误的设置等,Prescan不会编译成功,会提醒报错(如果只显示Warnings也需要认真阅读下原因,可以不做改动)。Build就是Prescan自动生成该场景与MATLAB相耦合所需要的文件,比如专门用来存储场景数据的pb文件(关于pb文件的详细请参见这篇:PreScan笔记(2.1)——MATLAB更改初始data model文件中的参数),还有simulink文件等。
3.2 MATLAB配置
想要完整的在Prescan中搭建并运行场景需要安装适合Prescan版本的MATLAB版本和C语言编译器,我安装的是MATLAB 2016和Visual Studio 2015。我在安装的时候遇到了MATLAB和VS版本不兼容的问题(参考该博客中“与MALTAB连接问题”一节)
3.3 MATLAB脚本改场景参数和数据
除了在Prescan中设置车辆和行人的速度,还可以通过MATLAB脚本(Prescan提供的MATLAB接口)来改已搭建场景的参数,比如车辆的速度,自己写了个简单的MATLAB脚本更改车速(下文附上了代码),可以运行并且在Simulink中可以显示,但是3D可视化看不出改变的效果,之后能显示出来之后再做更新~
function matrix = modify(v)
root_path = 'C:UsersPublicDocumentsExperiments';%所有实验存储的根目录
exp_name = 'simple_demo';%实验的名字,可修改,后改为函数自变量!
data_file_name = [exp_name, '.pb'];%data文件的名字,data文件的扩展名是.pb
data_file_path = [root_path,'',exp_name,'',data_file_name];%构造data文件的路径
models = prescan.experiment.readDataModels(data_file_path);%读取数据文件中的各个参数
%读取trajectory,以mat文件存储,直接修改数组的值
%当有多条轨迹的时候,需要具体说明是哪条路径。
traj_name = 'Trajectory_2';
%拼接轨迹的路径
traj_path = [root_path,'',exp_name,'','Trajectories',traj_name, '.mat'];
disp(traj_path)
%加载轨迹mat文件
traj = load(traj_path);
%把轨迹中的数据存到矩阵中
trajectory = traj.trajectory;
num_col = length(traj.trajectory);
%修改矩阵中的参数,矩阵的第1行为时间轴信息,第8行为速度曲线
if length(v)==num_col
trajectory(8,:) = v(1:num_col);%让人为设置的速度曲线维度与轨迹中的一致
save(traj_path,'trajectory');
else
%报错信息
msg = ['The length of velocity array is ',num2str(num_col),...
'. Please keep the dimension consistent'];
error(msg);
end
if prescan.experiment.validate(models) == 1%验证更改后的模型是否有效
prescan.experiment.writeDataModels(models,data_file_path);
prescan.experiment.runWithDataModels(models);%在simulink中运行修改后的data model
end
%matrix = traj.trajectory;
end
最后
以上就是孤独八宝粥为你收集整理的Prescan基础知识总结1. Prescan 基本介绍2. 场景搭建3. 测试部分的全部内容,希望文章能够帮你解决Prescan基础知识总结1. Prescan 基本介绍2. 场景搭建3. 测试部分所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复