前言

以编程方式创建使用驾驶方案设计器应用生成的驾驶方案的变体,便于基元场景的快速组合生成,能够在多个条件下快速测试驾驶算法,一般在自动化测试时很有用。主流的自动驾驶仿真软件中都支持在程序中直接改变场景,比如PreScan、Carla、Apollo和PanoSim等,MATLAB也支持。

国产自动驾驶仿真软件PanoSim的自动化测试操作流程可见下面链接:

PanoSim 5 功能模块简介--TestBuilder - 知乎 (zhihu.com)

MATLAB具体流程如下图所示:

步骤简要介绍如下:

  1. 使用驾驶方案设计器应用以交互方式生成初始交通场景(包含道路,交通参与者的位置,运动学参数等基础信息)。

  2. 导出一个生成与此方案等效的 MATLAB 代码的 MATLAB 函数,此函数便是后续场景更改的基础。

  3. 在 MATLAB 编辑器中,修改导出的函数以创建原始场景的变体。

  4. 调用该函数以生成表示方案的驱动对象。

  5. 将方案对象导入应用以模拟修改后的方案或生成其他方案。或者,要在 Simulink中模拟修改后的方案,请使用方案读取模块将对象导入到 Simulink 模型中。

详细步骤:

第一步:将示例文件夹添加到 MATLAB 搜索路径。(便于通过程序的方式直接调用软件自带的实例)。在命令行直接输入如下代码:

addpath(genpath(fullfile(matlabroot,'examples','driving')))

第二步:构建初始场景。

不是本文重点,这里从驾驶方案设计器应用加载的预生成场景之一的驾驶场景。在命令行直接输入如下代码:

drivingScenarioDesigner('LeftTurnScenarioNoSensors.mat')

打开了对应的预定义场景文件。

单击“运行”以模拟该场景。在这种情况下,自车向北行驶并直接穿过一个十字路口。同时,一辆从十字路口左侧驶来的车辆左转,最终在相邻车道上的自车前方。

第三步:导出上述场景的MATLAB函数

查看和模拟运行场景后,可以将场景导出到 MATLAB 命令行。从“驾驶方案设计器”应用工具栏中,选择“导出>导出 MATLAB 函数”。导出的函数包含用于生成在应用程序中创建的方案的 MATLAB 代码。打开导出的函数。

如果不是示例文件,需要将导出的函数重命名并保存下来。

本文是示例文件,可以通过指令打开对应的函数。代码如下:

open LeftTurnScenarioNoSensors.m

函数如下图所示:

调用此函数将返回驾驶方案的这些方面。

  • scenario— 场景的道路和参与者,作为场景对象返回。

  • egoVehicle— 场景中定义的自车,作为对象返回。

如果场景包含传感器,则返回的函数将包含用于生成传感器的其他代码。如果模拟了包含这些传感器的场景,则该函数还可以生成这些传感器生成的检测。本文不做过多考虑。

第四步:修改函数以创建场景变体

通过修改导出的 MATLAB 函数中的代码,可以生成单个方案的多个变体。一个常见的变化是以不同的速度测试自车。在导出的 MATLAB 函数中,自车辆的速度设置为每秒 10 米的常量值 (speed = 10)。要生成不同的 ego 车辆速度,可以将速度变量转换为函数的输入参数。

由于是示例文件,这里可以打开包含导出函数的修改版本的脚本。

open LeftTurnScenarioNoSensorsModified.m

下图表述了修改前与修改后的区别:

而且修改后的egoSpeed是作为函数的输入的

生成其他变体,可以考虑如下几点:

  • 修改道路和车道参数以查看对车道检测的影响

  • 修改车辆的轨迹或起始位置

  • 修改车辆的尺寸

第五步:调用函数以生成场景

使用修改后的函数,生成自车以每秒 20 米的恒定速度行驶的场景变体。代码如下:

scenario = LeftTurnScenarioNoSensorsModified(20) % m/s

第六步:将修改后的场景导入仿真应用

使用如下代码直接生成新的仿真界面,不影响原有的仿真。

drivingScenarioDesigner(scenario)

在应用程序中处理对象时,请记住这些要点。

  • 要尝试不同的自车速度,请再次调用导出的函数,然后使用该函数导入新对象。该应用程序不包含用于导入这些对象的菜单选项。

  • 如果场景包括传感器,则可以使用以下语法重新打开方案和传感器。

drivingScenarioDesigner(scenario,sensors)
  • 如果对执行组件的维度进行重大更改,请确保执行组件的属性对应于应用中指定的类 ID 值。例如,在应用程序中,汽车的类 ID 为1 ,卡车的类 ID 为 2。如果以编程方式将汽车更改为具有卡车的尺寸,请将该车辆的属性从(汽车)更新为(卡车)。

第七步:将修改后的场景导入Simulink模型中

要将修改后的方案导入 Simulink 模型,使用场景读取(Scenario Reader)模块。此块从从应用程序保存的方案文件或保存到 MATLAB 工作区或模型工作区的变量中读取道路和参与者。将方案读取器块添加到模型并设置这些参数。

  1. “驾驶方案的来源”设置为 From workspace。

  2. 将 MATLAB 或模型工作区变量名称设置为工作区中变量的名称。

第八步:完成后从 MATLAB 搜索路径中删除示例文件夹。

rmpath(genpath(fullfile(matlabroot,'examples','driving')))

MATLAB自动驾驶学习(3)——以编程方式创建驾驶场景的变体相关推荐

  1. 动态生成word文档原来如此简单!Aspose.Words助力以Java编程方式创建丰富的Word文档

    近年来,Word文档的动态生成已成为组成报告,报价,发票和其他类型文档的流行功能.各种制造公司都基于数据库中存储的数据生成发票.在这种情况下,文档自动化可以节省手动文档创建过程中所需的时间,精力和资源 ...

  2. java生成和读取keystore_java-如何以编程方式创建新的KeyStore?

    java-如何以编程方式创建新的KeyStore? 我正在尝试以编程方式在Java中创建新的密钥库. 如下代码: KeyStore keyStore = KeyStore.getInstance(Ke ...

  3. labview圆环里实物动画图形_LabVIEW编程技巧:功能强大的变体数据类型用法

    变体数据类型简介 LabVIEW是一种图形化编程语言,所以也叫G语言,在程序框图上连线时,必须相同类型或者能强制相互转换的类型端口才能连接在一起,例如我们不能将一个数值型的控件连接到布尔型的控件上,也 ...

  4. java 创建web项目_java – Eclipse:以编程方式创建动态Web项目

    我尝试通过首先通过IProject创建 java项目然后使用IFacetedProject将其转换为动态Web项目来创建动态Web项目,但是只创建了静态项目-这是我已经完成的代码-请帮助我这--谢谢. ...

  5. java解析odt,如何用java以编程方式创建odt文件?

    How can I create an odt (LibreOffice/OpenOffice Writer) file with Java programmatically? A "hel ...

  6. 怎么用java编程_如何使用java编程方式创建一个odt文件?

    看看 ODFDOM – the OpenDocument API ODFDOM is a free OpenDocument Format (ODF) library. Its purpose is ...

  7. android attributeset,如何在android中以编程方式创建时传递AttributeSet

    当您的视图从xml中膨胀时,将使用具有Context和AttributeSet的构造函数.您不应该使用它来创建对象.您应该使用带有Context作为参数的构造函数. AttributeSet是接口,您 ...

  8. 如何在Java中以编程方式阅读,添加或删除PPT中的幻灯片便笺?

    幻灯片注释用于添加其他信息,作为演示文稿中的参考.演示者添加了这些注释,以回顾与他们的演示相关的要点.在本文中,将学习如何以编程方式操作演示文稿中的幻灯片注释.特别是,本文将介绍如何使用Java读取, ...

  9. 以编程方式进行NLog的配置【转】

    步骤如下: 1.   创建一个LoggingConfiguration对象,用来保存配置信息 2.   至少创建一个输出目标对象 3.   设置该输出目标对象的属性 4.   设置LoggingRul ...

最新文章

  1. R语言使用persp函数绘制三维图像实战(3D):自定义3D图、图像旋转、添加轴标签
  2. nodejs fs path
  3. 强人工智能是潘多拉魔盒吗
  4. Java 面试经典题解析:谈谈你对 Java 平台的理解?
  5. JavaEE PO VO BO DTO POJO DAO 整理总结(转)
  6. tcp抓包返回fin_TCP/IP学习二TCP链接建立与断开
  7. Celery 源码解析六:Events 的实现
  8. 刘作虎:今年一加9系列不会送测DxO
  9. 2020各大网站rss订阅源地址_2020-20-18——DJANGO复习
  10. 随想录(关于ucore)
  11. cv2中函数名的规则
  12. 最新QQ空间免费导航代码
  13. 如何求绝对值最小的数
  14. 计算机分析学生表字段,巧用Excel数据透视表统计分析学生成绩
  15. 阿里巴巴图标库iconfont的使用
  16. matlab 汉字是方块,linux下Matlab 2020中文字体方框问题解决方法
  17. vivo是安卓手机吗_拜托你看看vivo手机自带的翻译功能,这么强大的功能浪费了合适吗...
  18. 高德地图API创建地理围栏
  19. ECDH secp256k1 集成
  20. Composer 基础使用

热门文章

  1. Vue中引入外部字体
  2. 金和C6协同办公中对用户密码的处理
  3. coms_ov7740驱动
  4. consumer editions和business editions的区别
  5. 点状字符的一种简便识别方式
  6. 2021年国考计算机网络原理,2021国考行测技巧:数字推理考点之“构造网络”
  7. MayaMel:UI—窗口简介
  8. python工程师需要什么技能_江门北大青鸟:Python工程师都会哪些技能?
  9. 如何做好网站建设需求分析
  10. 腾讯软件测试工程师工资,[深圳] 腾讯-招聘高级软件测试工程师,待遇福利从优!...