主要内容

将道路添加到驾驶场景或道路组

描述

在驾驶场景中添加道路

例子

路(场景roadcenters在驾驶场景中添加道路,场景.你可以通过一组道路中心在二维平面上指定道路的形状和方向,roadcenters,在离散点上。当您指定道路上的车道数时,这些车道是相对于道路中心进行编号的。有关更多信息,请参见绘制道路方向及车道编号

路(场景roadcentersroadwidth添加指定宽度的道路,roadwidth

例子

路(场景roadcentersroadwidthbankingangle添加一条具有指定宽度和倾斜角度的道路,bankingangle

例子

路(场景roadcenters“道”,lspec添加一条具有指定车道的道路,lspec

路(场景roadcentersbankingangle“道”,lspec添加一条具有指定倾斜角度和车道的道路。

例子

路(___“标题”,roadheadings添加一条具有指定航向角度的道路roadheadings,使用以前语法中的任何输入参数组合。

路(___“名称”,的名字指定道路的名称。

理查德·道金斯=路(___返回一个对象,该对象存储所创建道路的属性。

将道路添加到道路组

例子

路(rgroadcenters将道路段添加到道路组,rg.使用道路组创建一个路口或十字路口。通过一组道路中心,你可以在二维平面上指定道路段的形状和方向,roadcenters,在离散点上。当您指定道路段上的车道数时,这些车道将相对于道路中心进行编号。有关更多信息,请参见绘制道路方向及车道编号

例子

路(rgroadcentersroadwidth添加指定宽度的道路段,roadwidth,到路组。

路(rgroadcentersroadwidthbankingangle添加具有指定宽度和倾斜角度的道路段,bankingangle,到路组。

例子

路(rgroadcenters“道”,lspec添加指定车道的路段,lspec,到路组。

例子

路(rgroadcentersbankingangle“道”,lspec将具有指定倾斜角度和车道的道路段添加到道路组。

例子

路(___“标题”,roadheadings添加具有指定航向角度的道路段roadheadings到road组,使用以前语法中的任何输入参数组合。

例子

路(___“名称”,的名字指定道路段的名称。

例子

全部折叠

创建一个驾驶场景,包含一条弯曲的道路,两条笔直的道路,以及两个角色:一辆汽车和一辆自行车。两个演员都在路上移动了60秒。

创建驱动场景对象。

scenario = driving (“SampleTime”0.1”,“StopTime”、60);

使用道路中心点沿着半径800米的圆弧创建弯曲的道路。弧开始于0°,结束于90°,并以5°增量采样。

Angs = [0:5:90]';R = 800;道路中心= R*[cosd(angs) sind(angs) 0(尺寸(angs))];路宽= 10;Cr =道路(场景,道路中心,道路宽度);

使用默认宽度添加两条直线道路,在每一端使用道路中心点。在第一条直道两侧设置障碍物。

道路中心= [700 00;100 00];Sr1 =道路(场景,道路中心);障碍(场景,sr1)屏障(场景,sr1,“RoadEdge”“左”)道路中心= [400 400 0;0 0 0];路(场景,roadcenters);

弄清楚道路边界。

rbdry =道路边界(场景);

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

汽车=车辆(场景,“ClassID”, 1“位置”,[700 00],...“长度”3,“宽度”2,“高度”, 1.6);

把自行车放远一点。

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

画出场景。

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

图中包含一个轴对象。标题为Scenario的axes对象包含1221个类型为patch、line的对象。

显示演员的姿势和简介。

allactorpositions = actorpositions(场景)
allActorPoses =242×1包含字段的struct数组:横摇俯仰偏航角速度
allActorProfiles = actorProfiles(场景)
allActorProfiles =242×1包含字段的struct数组:ActorID ClassID长度宽度高度OriginOffset MeshVertices MeshFaces rcpattern RCSAzimuthAngles RCSElevationAngles

因为在这个场景中有障碍,每个障碍片段都被认为是一个参与者,actorPosesactorProfiles函数返回所有静止和非静止参与者的姿态。方法获取非静止角色(如车辆和自行车)的姿态和配置文件,首先获取它们对应的角色idscenario.Actors.ActorID财产。

movableactorid = [scenario.Actors.ActorID];

然后,使用这些id仅过滤非静止的演员姿势和配置文件。

movableactorposeindexes = ismember([allActorPoses.ActorID],movableActorIDs);movableactorpositions = allactorpositions (movableActorPoseIndices)
movableActorPoses =2×1包含字段的struct数组:横摇俯仰偏航角速度
movableActorProfiles = allActorProfiles(movableActorPoseIndices)
movableActorProfiles =2×1包含字段的struct数组:ActorID ClassID长度宽度高度OriginOffset MeshVertices MeshFaces rcpattern RCSAzimuthAngles RCSElevationAngles

创建一个驾驶场景,其中包含在场景的世界坐标中指定的数字8道路。将场景的世界坐标转换为自我运载工具的坐标系统。

创建一个空的驾驶场景。

scenario = drivingScenario;

在场景中添加一条8字形道路。显示场景。

roadCenters = [0 0 1 20 -20 1 20 20 1 -20 -20 1 -20 20 1 0 0 1];roadWidth = 3;bankAngle = [0 15 15 -15 -15 0];路(场景、roadCenters roadWidth bankAngle);情节(场景)

图中包含一个轴对象。axis对象包含patch、line类型的4个对象。

在场景中添加一个自我载体。将车辆定位在世界坐标(20,-20),并将其定位在-15度偏航角。

自我=行动者(场景,“ClassID”, 1“位置”,[20 -20 0],“偏航”, -15);

图中包含一个轴对象。axis对象包含5个类型为patch、line的对象。

方法在自我车辆坐标中获得道路边界roadBoundaries函数。指定自我载体作为输入参数。

rbEgo1 =道路边界(自我);

在鸟瞰图上显示结果。

bep = birdsEyePlot;lbp =车道边界绘图仪(bep,“DisplayName的”“路”);rbEgo1 plotLaneBoundary (lbp)

图中包含一个轴对象。axis对象包含一个line类型的对象。这个对象代表Road。

方法获得世界坐标中的道路边界roadBoundaries函数。指定场景作为输入参数。

rbScenario =路界(场景);

方法在自我车辆坐标中获得道路边界driving.scenario.roadBoundariesToEgo函数。

rbEgo2 = driving.scenario.roadBoundariesToEgo(rbScenario,ego);

在鸟瞰图上显示道路边界。

bep = birdsEyePlot;lbp =车道边界绘图仪(bep,“DisplayName的”“道路边界”);plotLaneBoundary(枸杞多糖,{rbEgo2})

图中包含一个轴对象。axis对象包含一个line类型的对象。该对象表示道路边界。

创建一个驾驶场景,包括一辆汽车和行人在一条笔直的道路上。然后,在鸟瞰图上创建并显示道路的车道标记。

创建一个空的驾驶场景。

scenario = drivingScenario;

创建一个25米长的直线路段,在一个方向上有两条车道。

lm = [laneMarking(“固体”) laneMarking (“冲”“长度”2,“空间”4) laneMarking (“固体”));L = lanespec(“标记”、lm);路(场景,[0 0 0;25 0 0],“道”l);

在驾驶场景中,一个行人以每秒1米的速度过马路,一辆汽车以每秒10米的速度沿着马路行驶。

Ped =演员(场景,“ClassID”4“长度”, 0.2,“宽度”, 0.4,“高度”, 1.7);汽车=车辆(场景,“ClassID”1);平滑轨迹(ped,[15 -3 0;15 3 0],1);smoothTrajectory(汽车,汽车。RearOverhang 0;25-car.Length +车。RearOverhang 0 0],10);

展示剧情和相应的追逐情节。

情节(场景)

chasePlot(汽车)

运行模拟。

  1. 创建一个鸟瞰图。

  2. 为鸟瞰图创建一个轮廓绘图仪、车道边界绘图仪和车道标记绘图仪。

  3. 获取道路边界和目标轮廓。

  4. 获得标记顶点和面的车道。

  5. 显示车道边界和车道标记。

  6. 运行模拟循环。

bep = birdsEyePlot(“XLim”25 [-25],“YLim”, -10年[10]);olPlotter = outlinePlotter(bep);lbPlotter = laneBoundaryPlotter(bep);lmPlotter = laneMarkingPlotter(bep,“DisplayName的”“道”);传奇(“关闭”);advance(scenario) rb = roadBoundaries(car);[位置,偏航,长度,宽度,originOffset,颜色]= targetoutline(汽车);[lmv,lmf] = laneMarkingVertices(car);plotLaneBoundary (lbPlotter, rb);plotLaneMarking (lmPlotter lmv lmf);plotOutline (olPlotter、位置、偏航、长度、宽度、...“OriginOffset”originOffset,“颜色”、颜色);结束

创建一个包含两条连接的弯曲道路的驾驶场景。指定每个道路中心的方向角度,以微调连接区域的道路形状。

创建一个空的驾驶场景。

scenario = drivingScenario;

通过定义道路中心和道路方向角,向驾驶场景中添加两条道路。

添加第一条路roadCenters = [-7 20;0 0;30 0;30 -20;10 -30];roadheading = [-90;0;南;南;-90); laneMark = laneMarking(“固体”);lanspecification = lanespec(2,Marking=laneMark);路(场景、roadCenters“道”laneSpecification,...“标题”roadHeadings,“名字”“路1”);添加第二条路roadCenters = [10 -30;30 -40;30 -60;0 -60;7 -80];roadheading = [-90;南;南;180;-90); laneMark = laneMarking(“冲”);lanspecification = lanespec(2,Marking=laneMark);路(场景、roadCenters“道”laneSpecification,...“标题”roadHeadings,“名字”《路2》);

画出场景。

情节(场景中,“RoadCenters”“上”

图中包含一个轴对象。axis对象包含5个类型为patch、line的对象。

如图所示,相邻的两条道路以钝角与第三条道路相交,即为y型路口。为了连接这三条道路,您将通过添加三个路段来创建一个Y-Junction。

yintersection.png

在驾驶场景中添加三条路

创建一个空的驾驶场景。

scenario = drivingScenario;

指定道路上车道的数量和每条车道的宽度。

Ls = lanespec(2,“宽度”5);

定义三条道路的道路中心,并将它们添加到驾驶场景中。第一条道路对角指向场景画布的左侧,第二条道路对角指向场景画布的右侧,第三条道路垂直指向。

添加第一条路roadCenters = [-20 0;6 0];路(场景、roadCenters“名字”“路1”“道”、ls);添加第二条路roadCenters = [23 7;50 33];路(场景、roadCenters“名字”《路2》“道”、ls);添加第三条路roadCenters = [23 -7;50 -33];路(场景、roadCenters“名字”“路3”“道”、ls);

画出场景。

图绘制(场景)

图中包含一个轴对象。axis对象包含5个类型为patch、line的对象。

创建y型路口来连接道路

创建一个RoadGroup对象。指定构成y型路口的每个路段的宽度。

rg = driving.scenario.RoadGroup(“名字”三通接头的);roadWidth = 10;

指定三个路段的道路中心,并将这些路段添加到RoadGroup对象,使用函数。这些路段互相交叉。

添加第一个路段roadCenters = [23 7;14 1;6 0];路(rg roadCenters roadWidth,“名字”“段1”);添加第二条道路段roadCenters = [23 -7;14 1;6 0];路(rg roadCenters roadWidth,“名字”“分段2”);添加第三个路段roadCenters = [23 7;21 4;21 4;23日7];路(rg roadCenters roadWidth,“名字”“段3”);

在驾驶场景中增加y路口

中存储的道路段RoadGroup对象添加到驾驶场景roadGroup函数。在驾驶场景中,这些路段形成一个连接三条道路的y型路口。

roadGroup(场景,rg);

图中包含一个轴对象。axis对象包含三个类型为patch、line的对象。

创建一个有三条路的驾驶场景,并使用一个路口连接它们,如图所示。

heading_to_roadgroup.png

在驾驶场景中添加三条路

创建一个空的驾驶场景。

scenario = drivingScenario;

指定道路上车道的数量和每条车道的宽度。

Ls = lanespec(2,“宽度”5);

定义三条道路的道路中心,并将它们添加到驾驶场景中。第一条和第二条道路是垂直方向的,分别位于场景画布的左侧和中心。第三条路是水平方向的,在前两条路的右边,垂直在它们之间。

添加第一条路roadCenters = [70 30;30 30);路(场景、roadCenters“名字”“路1”“道”、ls);添加第二条路roadCenters = [0 0;-40 0];路(场景、roadCenters“名字”《路2》“道”、ls);添加第三条路roadCenters = [15 -20;15 -60];路(场景、roadCenters“名字”“路3”“道”、ls);

画出场景。

情节(场景)

图中包含一个轴对象。axis对象包含5个类型为patch、line的对象。

创建一个连接道路的路口

创建一个RoadGroup对象。指定构成路口的每段道路的宽度。

rg = driving.scenario.RoadGroup(“名字”“结”);roadWidth = 10;

为两个路段指定道路中心,并为第一个路段指定航向角。将这些路段添加到RoadGroup对象,使用函数。这些路段互相交叉。

添加第一个路段,并指定其方向角度。roadCenters = [31 30;15 20;15 -21];roadheading = [180;-90;-90);路(rg roadCenters roadWidth,...“名字”“段1”“标题”, roadHeadings);添加第二条道路段roadCenters = [15 0;1 0];路(rg roadCenters roadWidth,...“名字”“分段2”);

在驾驶场景中添加路口

中存储的道路段RoadGroup对象添加到驾驶场景roadGroup函数。在驾驶场景中,这些路段形成连接三条道路的交汇点。

roadGroup(场景,rg);

图中包含一个轴对象。axis对象包含三个类型为patch、line的对象。

输入参数

全部折叠

驾驶场景,指定为adrivingScenario对象。

路组,定义一个路口或十字路口,指定为RoadGroup对象。

道路中心用于定义道路,指定为实值N2或N3矩阵。道路中心决定了道路在离散点上的中心线。

  • 如果roadcenters是一个N-by-2矩阵,则每个矩阵行表示(xy)道路中心的坐标。的z-各道路中心坐标为零。

  • 如果roadcenters是一个N-by-3矩阵,则每个矩阵行表示(xyz)道路中心的坐标。

如果矩阵的第一行与最后一行相同,那么这条路就是一个环路。单位是米。

数据类型:

道路宽度,指定为正实标量。整条路的宽度是恒定的。单位是米。

要指定bankingangle输入但不是roadwidth,指定roadwidth作为一个空洞的论证,[]

如果你指定roadwidth,则不能指定lspec输入。

数据类型:

道路倾斜角度,指定为实值N1的向量。N是道路中心的数量。的银行角度是道路沿道路方向的滚动角度。单位是度。

车道规格,指定为alanespeccompositeLaneSpec对象。使用一个lanespec对象以创建具有单车道规范的道路。属性可以指定车道的数量、每个车道的宽度以及车道标记的类型lanespec对象。指定内的车道标记lanespec,使用laneMarking函数。

使用一个compositeLaneSpec对象创建具有多个具有不同车道规格的路段的道路。详情请参见compositeLaneSpec

如果你指定lspec,则不能指定roadwidth输入。

例子:“道”,lanespec (3)指定具有默认车道宽度和车道标记的三车道道路。

道路名称,指定为字符向量或字符串标量。

例子:“名称”、“Road1”

例子:“名称”、“Road1”

数据类型:字符|字符串

道路的航向角,指定为实值N在[-180,180]范围内的-by-1角向量。N是道路中心的数量。单位是度。

航向角度限制了相关的道路中心。为避免限制道路中心点,必须指定相应的元素roadheadings作为.的功能自动确定无约束道路中心的航向角度。有关更多信息,请参见航向角

输出参数

全部折叠

输出路,返回为a具有本表中描述的属性的。除了RoadID,这是一个场景生成的属性,属性名称对应于用于创建道路的输入参数。所有属性都是只读的。

财产 价值
的名字

道路名称,指定为字符串标量

的名字Input参数设置此属性。即使你指定了的名字作为一个字符向量,的名字属性值是一个字符串标量。

RoadID

道路标识符,指定为正整数

场景input参数为驾驶场景中的每条道路生成一个唯一的ID。

RoadCenters

道路中心用于定义道路,指定为实值N2或N-by-3矩阵,其中N道路中心的数量是多少

roadcentersInput参数设置此属性。

RoadWidth

道路宽度,指定为正实标量

roadwidthInput参数设置此属性。

BankAngle

道路的倾斜角度,指定为N-by-1实值向量,其中N道路中心的数量是多少

bankingangleInput参数设置此属性。

标题

道路的航向角,表示为N-by-1实值向量,其中N道路中心的数量是多少

roadheadingsInput参数设置此属性。

更多关于

全部折叠

绘制道路方向及车道编号

创建一个道路使用函数,指定道路中心作为矩阵输入。该函数创建了一条穿过道路中心的有向线,从矩阵第一行的坐标开始,到矩阵最后一行的坐标结束。矩阵的前两行的坐标指定画的方向在路上。这些坐标对应于前两个连续的道路中心。绘制方向是场景图中道路渲染的方向。

创建一个道路使用驾驶场景设计应用程序,您可以指定道路中心参数或交互地绘制场景帆布.有关详细示例,请参见创建一个驾驶场景.在这种情况下,绘制方向是道路渲染的方向场景帆布

  • 对于一条从上到下绘制方向的道路,两者之间的差异x-前两个连续道路中心的坐标为正。

  • 对于从下到上绘制方向的道路,两者之间的差异x-前两个连续道路中心的坐标为负。

从上到下绘制方向的道路

从下到上绘制方向的道路

  • 对于从左到右绘制方向的道路,两者之间的差异y-前两个连续道路中心的坐标为正。

  • 对于从右向左绘制方向的道路,两者之间的差异y-前两个连续道路中心的坐标为负。

路与左至右绘制方向

从右向左绘制方向的道路

编号车道

车道必须从左到右编号,道路的左边缘相对于道路的绘制方向定义。对于单向路,默认情况下,道路的左边缘是一个实心黄色标记,表示道路横向方向(方向垂直于绘制方向)的终点。对于双向道路,默认情况下,两边都用实线标记。

例如,这些图表显示了单向和双向道路的车道编号,并从上到下绘制方向。

单行道上的车道编号 在双向道路上编号车道

将车道数指定为单行道的正整数。如果将整数值设置为3.,那么这条路就有三个方向相同的车道。车道从路的左边开始编号。

123.分别标明道路的第一、第二和第三车道。

单行道的车道号

将车道数指定为双向道路的两元素正整数向量。如果你将向量设置为[12],那么这条路就有三车道:两车道朝一个方向行驶,一车道朝相反方向行驶。因为方向不同,这条路有一个左车道和两个右车道。车道从路的左边开始编号。

1 l标明道路上唯一的左车道。1 r2 r分别标明道路的第一和第二右车道。

双向道路的车道号

车道规范按照车道编号的顺序应用。

航向角

方向角是指在给定道路中心点的道路朝向下一个道路中心的角度,相对于方向逆时针测量x-轴在[-180,180]度范围内。

道路航向角度

指定方向角度作为道路中心点的约束,可以精确控制道路的形状和方向。

例如,通过指定道路中心来创建一条道路。规划道路

scenario = drivingScenario;roadCenters = [0 35;0 18;15 10;32 3;32 -12);路标= [NaN;南;0;南; NaN]; road(scenario,roadCenters,“标题”, roadHeadings);情节(场景中,“中心线”“上”“RoadCenters”“上”

该图显示了具有一个受限道路航向角的道路及其在本例中指定的各自道路中心。其他道路中心是不受约束的,它们的方向角度是自动确定的函数。

无约束道路航向角示例

现在为道路上的每个道路中心点指定方向角度。规划新道路。

scenario = drivingScenario;roadCenters = [0 35;0 18;15 10;32 3;32 -12);roadheading = [-90;-90;0;-90; -90]; road(scenario,roadCenters,“标题”, roadHeadings);情节(场景中,“中心线”“上”“RoadCenters”“上”

该图显示了在示例中指定的道路方向角和各自的道路中心。

道路航向角示例

算法

函数在驾驶场景中为参与者创建了一条道路。你指定使用的道路N二维或三维路径点。每一个N- 1段路径点之间定义了一条曲线,其曲率随段上的距离线性变化。这个函数分段拟合回旋曲线曲线至(xy)通过匹配路点两侧的曲率来获得路点的坐标。对于非封闭曲线,第一个和最后一个路径点的曲率为零。如果第一个和最后一个路径点重合,则端点前后的曲率匹配。的z-道路坐标使用形状保持分段立方曲线插值。

版本历史

在R2017a中引入