Prescan基础知识总结

article/2025/8/27 19:13:32

文章目录

  • 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:\Users\Public\Documents\Experiments';%所有实验存储的根目录
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_coltrajectory(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);endif prescan.experiment.validate(models) == 1%验证更改后的模型是否有效prescan.experiment.writeDataModels(models,data_file_path);prescan.experiment.runWithDataModels(models);%在simulink中运行修改后的data model
end
%matrix = traj.trajectory;end

http://chatgpt.dhexx.cn/article/3rbuhgGS.shtml

相关文章

Prescan基础知识

文章目录 前言一、PreScan干什么的?二、学习PreScan基本操作总结 前言 因为毕设是自动场景下的多目标检测跟踪与轨迹预测研究,所以需要学习到自动驾驶仿真软件PreScan,这周的主要工作是对PreScan进行一定的了解:首先是了解PreScan…

PreScan快速入门到精通第二讲PreScan功能介绍

智驾社 小明师兄 PreScan产品功能包含如下: 1. Pre-processor or GUI: 预处理器或GUI 2. Engineering Workspace or Compilation Sheet:工程工作区或编译表 3. Main modules:主要模块 4. Process Manager:进程管理 5. Miscellaneous:其它项 1.1 预处理器或GUI GUI的关键…

【prescan入门】prescan入门教程(场景搭建、参数设置、连接MATLAB实现仿真)

环境 windows10PreScan8.5.0MATLAB2019bvs2019社区版 场景搭建 双击打开【PreScan GUI 8.5.0】【File】->【New Experiment】新建实验 搭建环境(草地、水泥地、砖地等) 这里我选择草地场景,将【Grass】拖入网格区域 选择基础设施&…

数据库与缓存一致性解决方案

数据库与缓存一致性解决方案 文章目录 数据库与缓存一致性解决方案前言几种方案的分析方案的实现 前言 项目中如果用到了缓存,就会涉及到数据库与缓存的双写,由于这两个操作不是原子性的,在并发的场景下,容易产生数据库与缓存不一…

数据库实时同步技术解决方案_两个数据库同步_数据库双向同步方案

SyncNavigator v8.6.2 SyncNavigator是一款功能强大的数据库同步软件,适用于SQL SERVER, MySQL,具有自动/定时同步数据、无人值守、故障自动恢复、同构/异构数据库同步、断点续传和增量同步等功能,支持Windows xp以上所有操作系统,适用于大容量数据库快速同步。 安装包下…

MySQL数据库主从双向同步

MySQL数据库主从双向同步 一 环境二 主从同步1.主服务器配置2.从服务器配置 二 双向同步三 其他相关参数配置四 后记 一 环境 由于开发需要,需要两台服务器进行负载均衡,两台服务器配置完全相同,均为windows server 2012,且MySQL数据库版本为…

容灾解决方案介绍

1.容灾需求 2.容灾挑战 3. 什么是HA 4.什么是容灾 5.HA和DR的关系 6.容灾和备份的区别 7.衡量容灾系统的主要指标 8.容灾系统的级别 9.灾备系统建设的国际标准 10.华为业务连续性灾备解决方案全景图 11.容灾备份解决方案框架 12.容灾设计模式-同步、异步相结合 13.主备容灾方…

数据库容灾方案

**数据库容灾方案** 场景一 “阵列硬盘坏了,数据库读写文件异常,系统停运啦!”场景二 “不小心执行了TRUNCATE操作,核心业务表被清空,系统关键功能无法使用!”场景三 “在硬件投入变化不大的情况下&#xf…

MySql数据库从库同步的延迟问题及解决方案

1)、MySQL数据库主从同步延迟原理mysql主从同步原理: 主库针对写操作,顺序写binlog,从库单线程去主库顺序读”写操作的binlog”,从库取到binlog在本地原样执行(随机写),来保证主从数据逻辑上一致…

数据同步解决方案-canal

1、canal简介 canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据。 canal是应对阿里巴巴存在杭州和美国的双机房部署,存在跨机房同步的业务需求而提出的。 阿里系公司开始逐步的尝试基于数据库的日志解析,获…

数据库灾备解决方案

文章目录 行业背景解决方案优势核心产品灾备设计及技术指标DBS冷备热备份同城容灾同城容灾——复制加高可用同城容灾——A-S同城容灾——A-A更多信息 行业背景 数据是企业重要的生产资料,关键数据的丢失可能会给企业致命一击,因为数据是计算机系统存在的…

【解决方案 三十一】Navicat数据库结构同步

最近在开发过程中遇到一个问题:刚经历了一个两个月的长迭代,导致测试库已经被改的面目全非了,最关键的是所有的变更语句都没有记录,这上线的时候怎么办啊,一百多张表呢,幸好组里的老程序猿说用过一个工具&a…

Redis与数据库数据同步解决方案

本文转自:http://3gods.com/2016/06/23/Redis-Sync-DB.html 部分图片来自:http://blog.csdn.net/stubborn_cow/article/details/50586990 数据库同步到Redis 我们大多倾向于使用这种方式,也就是将数据库中的变化同步到Redis,这种…

跨数据库同步方案汇总

Datax 一般比较适合于全量数据同步,对全量数据同步效率很高(任务可以拆分,并发同步,所以效率高),对于增量数据同步支持的不太好(可以依靠时间戳定时调度来实现,但是不能做到实时&…

唯一性约束(unique)

在字段类型后面加一个unique,表示这个字段的值是唯一的,不能够有相同的值出现。 给某一列添加unique 给两个字段加唯一性约束,不同的方式的约束范围不同 联合加约束时只有两个字段的值都是一样的才会出错 单独加约束时,只要有一个…

ORA-00001: 违反唯一约束条件 的解决办法

最近在做项目是测试的时候出现了这种错误:ORA-00001: 违反唯一约束条件 其实说白了这种错误就是 数据库的ID值,小于他的next number 由于表的ID是唯一的,所以用 select max(id) from test 查的该ID大于Sequences里面的开始ID,所以…

ORA-00001: 违反唯一约束条件 -- 解决方法

1、错误 Caused by: java.sql.BatchUpdateException:ORA-00001: 违反唯一约束条件 (SOLEX.SYS_C0012537) 2、分析 ①通过SYS_C0012537找到对应的表 select a.constraint_name,a.constraint_type,b.column_name,b.table_name from user_constraints a inner join user_cons_col…

ORA-00001: 违反唯一约束条件解决方案(oracle 00001)

原因 主要原因是在进行插入INSERT或者更新UPDATE的时候,违反唯一约束,导致操作某行数据时出现重复的值。 解决方案 删除或者更改唯一约束。 修改你使用的插入INSERT或者更新UPDATE的语句。 如果当有多个表进行操作时,你不知道哪个表出现…

ORA-00001: 违反唯一约束条件(SOLEX.SYS_C0012537) --解决方法

1、错误 Caused by: java.sql.BatchUpdateException:ORA-00001: 违反唯一约束条件 (SOLEX.SYS_C0012537) 2、分析 ①通过SYS_C0012537找到对应的表 select a.constraint_name,a.constraint_type,b.column_name,b.table_name from user_constraints a inner join user_cons_colu…