主要内容

drivingScenario

创建驾驶场景

描述

drivingScenario对象代表了一个3 d领域包含道路、停车场、车辆、行人、障碍,和其他方面的驾驶场景。使用这个对象模型真实的交通场景和为测试控制器或生成合成检测传感器融合算法。

  • 增加道路,使用函数。指定车道的道路,创建一个lanespec对象。你也可以从第三方进口道路道路网络使用roadNetwork函数。

  • 增加停车场使用停车场函数。

  • 添加演员(汽车、行人、自行车、等等),使用演员函数。添加演员与属性专门为车辆使用车辆函数。添加障碍,使用障碍函数。所有的演员,包括车辆和障碍,被建模为长方体(盒子形状)。

  • 模拟一个场景中,调用推进函数在一个循环中,提出了仿真时间步。

您还可以创建驾驶场景交互地使用驾驶场景设计师应用。此外,你可以出口drivingScenario对象的应用程序产生场景变化用于应用程序或仿真软件金宝app®。更多细节,请参阅通过编程方式创建驾驶场景变化

创建

描述

例子

场景= drivingScenario创建一个空的驾驶场景。

例子

场景= drivingScenario (名称,值)设置SampleTime,StopTime,GeoReference属性使用名称-值对。例如,drivingScenario (“GeoReference”, [42.3 - -71.0 0])设置场景的地理起源的经度坐标(42.3,-71.0)和0的高度。

属性

全部展开

之间的时间间隔场景仿真的步骤,指定为一个积极的真正的标量。单位是秒。

例子:1.5

结束时间的模拟,指定为一个积极的真正的标量。单位是秒。默认的StopTime导致仿真结束当第一个演员结束其轨迹。

例子:60.0

这个属性是只读的。

当前时间的模拟,指定为一个积极的真正的标量。重置为0的时候,调用重新启动函数。单位是秒。

这个属性是只读的。

模拟状态,指定为真正的。如果模拟运行,正在真正的

这个属性是只读的。

演员和车辆包含在该方案中,指定为异构的数组演员车辆对象。添加演员和车辆驾驶的情况下,使用演员车辆功能。

壁垒中包含的场景中,指定为异构的数组障碍对象。添加障碍驾驶的情况下,使用障碍函数。

停车场中包含的场景中,指定为异构的数组停车场对象。增加停车场开车的情况下,使用停车场函数。

这个属性是只读的。

道路网络的地理坐标原点,指定为一个三元素数字行向量的形式纬度,,alt),地点:

  • 纬度是纬度的协调度。

  • 是经度的协调度。

  • alt在米的高度协调。

这些值的WGS84参考椭球体,这是一个标准的椭球由GPS数据使用。

你可以设置GeoReference当您创建驱动的场景。的roadNetwork函数还设置这个属性,当你道路导入到一个空的驾驶场景。

  • 如果你进口道路通过指定坐标,那么roadNetwork函数集GeoReference第一个(或)指定的坐标。

  • 如果你进口道路通过指定区域或地图文件,然后roadNetworkGeoReference地区或地图的中心点。

roadNetwork函数将覆盖任何之前设置GeoReference价值。

驾驶场景设计师应用程序,当你导入地图数据和导出drivingScenario对象,GeoReference属性的对象设置为地理参考的应用场景。

通过指定这些坐标的原点latlon2local功能,你可以行驶路线的地理坐标转换成当地的驾驶场景的坐标。然后,您可以指定该路线的车辆轨迹场景转换。

如果你的驾驶场景不使用地理坐标,然后GeoReference是一个空数组,[]

对象的功能

全部展开

推进 推进驾驶场景模拟时间步
情节 情节驱动场景
记录 开车运行场景和演员状态记录
重新启动 从开始重启驾驶场景模拟
updatePlots 更新驱动场景情节
出口 出口驱动的场景ASAM OpenDRIVEASAM OpenSCENARIO文件
演员 加上演员驾驶场景
actorPoses 位置、速度和方向的演员驾驶场景
actorProfiles 演员的身体和雷达特征驱动的场景
车辆 添加车辆驾驶场景
障碍 添加一个障碍驾驶场景
chasePlot 自我中心投影角度的阴谋
轨迹 创建演员或驾驶场景中车辆轨迹
smoothTrajectory 驾驶场景中创建平滑,jerk-limited演员轨迹
targetPoses 目标位置和方向相对于自我
targetOutlines 概述了目标被演员
driving.scenario.targetsToEgo 把目标从场景构成自我坐标
driving.scenario.targetsToScenario 转换目标提出了从自我到场景坐标
添加道路驾驶场景或道路
roadNetwork 增加道路网络驱动的场景
roadBoundaries 得到道路边界
driving.scenario.roadBoundariesToEgo 道路边界转化为自我车辆坐标
lanespec 创建道路车道规范
laneMarking 创建道路车道标记对象
laneMarkingVertices 车道标记顶点和在驾驶场景
currentLane 得到当前车道的演员
laneBoundaries 把演员巷巷边界
clothoidLaneBoundary Clothoid-shaped车道边界模型
computeBoundaryModel 从回旋曲线车道边界模型计算车道边界点
laneType 创建道路车道类型对象
停车场 增加停车场开车的场景
parkingSpace 定义停车场的停车位
insertParkingSpaces 停车位插入停车场
parkingLaneMarkingVertices 停车车道标记顶点和在驾驶场景

例子

全部折叠

创建一个驾驶场景包含一个弯曲的路,两个笔直的道路,和两个演员:一辆汽车和一辆自行车。两个角色都沿着路60秒钟。

创建驾驶场景对象。

场景= drivingScenario (“SampleTime”0.1”,“StopTime”、60);

使用道路中心创建弯曲的路点弧后800米半径的一个圆。弧始于0°,结束于90°,采样在5°的增量。

ang = [0:5:90] ';R = 800;roadcenters = R * [cosd (ang)信德(ang) 0(大小(ang))];roadwidth = 10;路(场景、roadcenters roadwidth);

添加两个笔直的道路使用默认宽度,使用道路中心分两端。

roadcenters = [700 0 0;100 0 0];路(场景,roadcenters)
ans =道路的属性:名称:“RoadID: 2 RoadCenters: [2 x3双]RoadWidth: 6 BankAngle: [2 x1双]标题:[2 x1双)
roadcenters = (400 400 0;0 0 0];路(场景,roadcenters)
ans =道路的属性:名称:“RoadID: 3 RoadCenters: [2 x3双]RoadWidth: 6 BankAngle: [2 x1双]标题:[2 x1双)

道路边界。

rbdry = roadBoundaries(场景);

一辆汽车和一辆自行车添加到场景。位置汽车的开头第一个直路。

车=车辆(场景中,“ClassID”,1“位置”(700 0 0),“长度”3,“宽度”2,“高度”,1.6);

自行车位置更远。

自行车=演员(场景中,“ClassID”3,“位置”,(706 376 0)',“长度”2,“宽度”,0.45,“高度”,1.5);

画出场景。

情节(场景中,“中心线”,“上”,“RoadCenters”,“上”);标题(“场景”);

图包含一个坐标轴对象。坐标轴对象与场景标题包含1219个对象类型的补丁,线。

显示演员的姿态和概要文件。

提出了= actorPoses(场景)
提出了=2×1结构体数组字段:辊距偏航AngularVelocity ActorID位置速度
概要文件= actorProfiles(场景)
概要文件=2×1结构体数组字段:ActorID ClassID长度宽度高度OriginOffset MeshVertices MeshFaces RCSPattern RCSAzimuthAngles RCSElevationAngles

创建一个驾驶场景和展示目标轮廓变化模拟的进展。

创建一个驾驶场景组成的两个相交的笔直的道路。第一段路是45米长。第二个直路是32米长泽壁垒沿着它的边缘,和第一道路相交。一辆车以每秒12.0米的速度沿着前路方法运行人行横道的十字路口为2.0米每秒。

场景= drivingScenario (“SampleTime”,0.1,“StopTime”1);road1 =路(场景中,[-10 0 0;45 -20 0]);road2 =路(场景中,(-10 -10 0;35 10 0]);障碍(场景,road1)屏障(场景、road1“RoadEdge”,“左”)ped =演员(场景中,“ClassID”4“长度”,0.4,“宽度”,0.6,“高度”,1.7);车=车辆(场景中,“ClassID”1);pedspeed = 2.0;carspeed = 12.0;smoothTrajectory (ped [15 3 0;15日3 0],pedspeed);smoothTrajectory(车,-10 -10 0;35 10 0],carspeed);

创建一个自我中心车辆追逐情节。

chasePlot(车,“中心线”,“上”)

创建一个空鸟瞰的情节和添加一个大纲绘图仪和车道边界绘图仪。然后,运行仿真。在每个仿真步骤:

  • 更新追逐情节显示道路边界和目标轮廓。

  • 更新鸟瞰的情节显示更新后的道路边界和目标轮廓。情节的角度总是对自我的车辆。

bepPlot = birdsEyePlot (“XLim”50 [-50],“YLim”,40 [-40]);outlineplotter = outlineplotter (bepPlot);laneplotter = laneBoundaryPlotter (bepPlot);传奇(“关闭”)推进(场景)rb = roadBoundaries(车);(位置、偏航、长度、宽度、originOffset color] = targetOutlines(车);[bposition, byaw blength、bwidth boriginOffset, bcolor, barrierSegments] = targetOutlines(车,“障碍”);plotLaneBoundary (laneplotter, rb) plotOutline (outlineplotter、位置、偏航、长度、宽度、“OriginOffset”originOffset,“颜色”(颜色)plotBarrierOutline outlineplotter、barrierSegments bposition, byaw, blength, bwidth,“OriginOffset”boriginOffset,“颜色”bcolor)暂停(0.01)结束

图包含一个坐标轴对象。坐标轴对象是空的。

创建一个驾驶场景包含一个自我车辆和目标车辆沿着三车道公路旅行。检测车道边界通过使用视觉检测发电机。

场景= drivingScenario;

创建一个三车道公路通过车道规范。

roadCenters = [0 0 0;60 0 0;120年30 0];lspc = lanespec (3);路(场景、roadCenters“道”,lspc);

指定车辆自我中心巷在30 m / s。

egovehicle =车辆(场景中,“ClassID”1);egopath = (1.5 0 0;60 0 0;111年25 0];egospeed = 30;smoothTrajectory (egovehicle egopath egospeed);

指定目标车辆旅行前的自我车辆40 m / s和变更车道车辆接近自我。

targetcar =车辆(场景中,“ClassID”1);定位路径= [8 2;60 -3.2;120年33];targetspeed = 40;定位路径,smoothTrajectory (targetcar targetspeed);

的3 d视图显示一个追逐情节场景从自我后面车辆。

chasePlot (egovehicle)

创建一个视觉检测发电机检测车道和对象。场上的传感器点一度下降。

visionSensor = visionDetectionGenerator (“节”,1.0);visionSensor。DetectorOutput =车道和对象的;visionSensor。演员Profiles = actorProfiles(scenario);

运行仿真。

  1. 创建一个鸟瞰的情节和相关的策划者。

  2. 显示传感器覆盖范围。

  3. 显示车道标记。

  4. 在路上获得地面实况提出的目标。

  5. 获得理想的车道边界点提前60米。

  6. 从理想目标姿态和生成检测车道边界。

  7. 显示目标的轮廓。

  8. 显示对象时检测对象检测是有效的。

  9. 显示巷巷时边界检测是有效的。

cep = birdsEyePlot (“XLim”,60 [0],“YLim”35 [-35]);caPlotter = coverageAreaPlotter (cep),“DisplayName的”,“覆盖范围”,“FaceColor”,“蓝”);detPlotter = detectionPlotter (cep),“DisplayName的”,“对象检测”);lmPlotter = laneMarkingPlotter (cep),“DisplayName的”,“车道标记”);lbPlotter = laneBoundaryPlotter (cep),“DisplayName的”,“车道边界检测”,“颜色”,“红色”);olPlotter = outlinePlotter (cep);plotCoverageArea (caPlotter visionSensor.SensorLocation,visionSensor.MaxRange visionSensor.Yaw,visionSensor.FieldOfView (1));推进(场景)(lmv, lmf) = laneMarkingVertices (egovehicle);plotLaneMarking (lmv lmPlotter, lmf) tgtpose = targetPoses (egovehicle);lookaheadDistance = 0:0.5:60;磅= laneBoundaries (egovehicle,“XDistance”lookaheadDistance,“LocationType”,“内心”);[obdets, nobdets obValid、lb_dets nlb_dets, lbValid] =visionSensor (tgtpose磅,scenario.SimulationTime);[objposition, objyaw objlength、objwidth objoriginOffset, color] = targetOutlines (egovehicle);plotOutline (olPlotter、objposition objyaw、objlength objwidth,“OriginOffset”objoriginOffset,“颜色”、颜色)如果obValid detPos = cellfun (@ (d) d.Measurement (1:2), obdets,“UniformOutput”、假);detPos = vertcat (0 (0, 2), cell2mat (detPos ') ');plotDetection (detPlotter detPos)结束如果lbValid plotLaneBoundary (lbPlotter vertcat (lb_dets.LaneBoundaries))结束结束

算法

全部展开

介绍了R2017a