drivingScenario

建立驾驶场景

描述

drivingScenario对象表示含有道路,车辆,行人,以及驱动方案的其它方面,3-d竞技场。使用此对象模型逼真通信量的情况,并且生成用于测试控制器或传感器融合算法合成检测。

  • 若要添加道路,请使用函数。要指定道路中的车道,请创建alanespec对象。还可以使用。从第三方道路网络导入道路roadNetwork函数。

  • 要添加参与者(汽车,行人,自行车等),使用演员函数。若要添加具有专门为车辆设计的属性的角色,请使用车辆函数。所有的角色,包括车辆,都被建模为长方体(盒子形状)。

  • 要模拟场景,请调用预先在一个循环中执行函数,每次只执行一个时间步长。

还可以通过使用驾驶场景设计师另外,你还可以导出drivingScenario对象生成场景变化,以在应用程序或Simulink中使用金宝app®。有关更多细节,请参见以编程方式创建驾驶场景变化

创建

描述

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

场景= drivingScenario (名称,值设置采样时间停止时间使用名称-值对的属性。例如,drivingScenario (SampleTime, 0.1”、“StopTime”, 10)每0.1秒对场景进行一次采样,持续10秒。将每个属性名括在引号中。

属性

全部展开

情景模拟步骤之间的时间间隔,指定为正实标。单位是秒。

例子:1.5

仿真结束时间,指定为正实标量。单位是秒。默认的停止时间天道酬勤导致模拟在第一个参与者到达其轨迹末端时结束。

例子:60.0

此属性是只读的。

模拟的当前时间,指定为正实标。到时候归零,请致电重新启动函数。单位是秒。

此属性是只读的。

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

此属性是只读的。

行动者和车辆包含在场景中,指定为异构阵列演员车辆对象。若要将参与者和车辆添加到驾驶场景,请使用演员车辆功能。

此属性是只读的。

路网原点的地理坐标,指定为三元素数值行向量的形式[纬度alt),地点:

  • 纬度是在度坐标纬度。

  • 是坐标的经度(以度为单位)。

  • alt是坐标的高度,单位是米。

这些值是相对于所述WGS84参考椭球,这是椭球使用的GPS数据的标准。

道路网络原点对应于第一组地理坐标指定为输入到roadNetwork函数。如果指定按区域导入道路,则此点对应于指定矩形区域的中心点。

drivingScenario对象从所生成的驾驶场景设计师app,如果从地图导入路网,则路网原点对应于指定的第一组(或唯一一组)地理坐标。

方法将这些坐标指定为latlon2local函数,可以将行车路线的地理坐标转换为行车场景的本地坐标。然后,您可以将此转换后的路线指定为场景中的车辆轨迹。

依赖关系

要启用此属性,请从HERE HD Live映射导入道路[1]方法将web服务引入到驾驶场景中roadNetwork函数或驾驶场景设计师应用程序。

对象函数

全部展开

预先 通过一个时间步进推进驾驶场景模拟
情节 创建驾驶场景图
记录 运行驾驶场景并记录参与者状态
重新启动 重启从开始驾驶情景模拟
updatePlots 更新驾驶场景图
演员 将角色添加到驾驶场景
actorPoses 角色在驾驶场景中的位置、速度和方向
actorProfiles 在驾驶场景的演员物理和雷达特征
车辆 将车辆添加到驾驶场景
chasePlot 自我中心投影透视图
弹道 在驾驶场景中创建角色或车辆轨迹
targetPoses 目标位置和方向相对于自我车辆
targetOutlines 目标轮廓由演员观看
driving.scenario.targetsToEgo 将目标姿态从场景转换为自我坐标
driving.scenario.targetsToScenario 转换目标姿态从自我到场景坐标
添加道路到驾驶场景
roadNetwork 路网添加到驾驶场景
roadBoundaries 获取道路边界
driving.scenario.roadBoundariesToEgo 转换道路边界自车辆坐标
currentLane 找演员的当前车道
lanespec 创建道路车道规范
标平 创建道路标线对象
laneMarkingVertices 在驾驶场景中标记顶点和面
laneBoundaries 找演员车道的车道边界
clothoidLaneBoundary 回旋形车道边界模型
computeBoundaryModel 从回旋车道边界模型计算车道边界点
laneType 创建道路车道类型的对象

例子

全部折叠

创建一个包含弯道,两米连胜的道路,和两位演员的驱动场景:一辆汽车和一辆自行车。既是演员沿着60秒的道路移动。

创建驱动脚本对象。

场景= drivingScenario (“SampleTime”0.1' ,“停止时间”、60);

创建使用道路中心点的圆的,以800米半径圆弧沿弯曲的道路。电弧开始在0℃,在90°的端部,并且在5℃的增量进行采样。

angs = [0:5:90]';R = 800;roadcenters = R * [COSD(angs)信德(angs)零(大小(angs))];roadwidth = 10;路(场景,roadcenters,roadwidth);

添加两个直路与默认宽度,在每一端使用道路中心点。

道路中心= [700 00;100 0 0];道路(场景,道路中心)道路中心= [400 400 0;0 0 0];路(场景,roadcenters)

确定道路边界。

rbdry = roadBoundaries(场景);

在场景中添加一辆汽车和一辆自行车。将车停在第一条直路的起点。

汽车=车辆(的情况下,'位置'(700 0 0),“长度”3,“宽度”2,'高度',1.6);

自行车越往下的道路位置。

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

绘制场景。

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

显示演员的姿势和个人资料。

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

创建一个驾驶场景,并显示随着模拟的进展目标如何概述变化。

创建一个由两个相交的直路的驱动方案。第一个路段长有45米第二个直道长32米和相交的第一条公路。一辆汽车以每秒12.0米沿着第一道路行驶接近运行行人过的交点以每秒2.0米。

场景= drivingScenario (“SampleTime”,0.1%,“停止时间”,1);路(场景中,[ -  10 0 0 45 -20 0]);路(场景中,[ -  10 -10 0 35 10 0]);PED =演员(的情况下,“长度”,0.4,“宽度”,0.6,'高度',1.7);车=车辆(场景);pedspeed = 2.0;carspeed = 12.0;轨迹(ped [15 3 0;15日3 0],pedspeed);轨迹(车,-10 -10 0;35 10 0],carspeed);

创建车辆的以自我为中心的追逐情节。

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

创建一个空的鸟瞰图和添加一个轮廓绘图和车道边界绘图仪。然后,运行模拟。在每个模拟步骤:

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

  • 更新鸟瞰图以显示更新的道路边界和目标轮廓。情节视角总是与自我载体有关。

bepPlot = birdsEyePlot('XLIM'50 [-50],'YLim',40 [-40]);outlineplotter = outlineplotter (bepPlot);laneplotter = laneBoundaryPlotter (bepPlot);传奇(“关闭”advance(scenario) rb =道路边界(car);(位置、偏航、长度、宽度、originOffset color] = targetOutlines(车);plotLaneBoundary (laneplotter, rb) plotOutline (outlineplotter、位置、偏航、长度、宽度、“OriginOffset”,originOffset,“颜色”,颜色)暂停(0.01)结束

创建一个包含自我车辆和目标车辆沿着三车道道路行驶的驾驶场景。使用视觉检测生成器检测车道边界。

场景= drivingScenario;

使用车道规范创建一个三车道的道路。

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

指定该自身车辆跟随中心车道在30米/秒。

egovehicle =车辆(场景);egopath = [1.5 0 0;60 0 0;111年25 0];egospeed = 30;轨迹(egovehicle egopath egospeed);

指定目标车辆以40米/秒的速度在ego车辆前面行驶,并在ego车辆附近改变车道。

targetcar =车辆(场景中,'班级号',2);TARGETPATH = [8 2;60 -3.2;120 33];targetspeed = 40;轨迹(targetcar,TARGETPATH,targetspeed);

显示追逐情节,从后面的自我车辆的三维场景。

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',[0 60],'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));advance(scenario) [lmv,lmf] = laneMarkingVertices(egovehicle);plotLaneMarking(lmPlotter,lmv,lmf) tgtpose = targetpose (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,2),cell2mat(detPos ')');plotDetection(detPlotter,detPos)结束如果lbValid plotLaneBoundary (lbPlotter vertcat (lb_dets.LaneBoundaries))结束结束

算法

全部展开

介绍了在R2017a


[1]你需要和……签订一份单独的协议这里为了获得对HDLM服务的访问权,并获得使用HERE服务所需的凭证(app_id和app_code)。