主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

LaneWidthNode

RoadRunner 场景中车道宽度剖面图中的节点

自 R2025a 起

    说明

    LaneWidthNode 对象表示车道宽度剖面图中的一个节点。车道宽度轮廓由一系列参数化跨距组成,表现为有序节点集合,相邻节点间通过跨距相连。序列中的每个节点代表道路上的特定位置,包含该点车道宽度及宽度变化率的相关信息。RoadRunner 表示每个节点相对于道路基准线起点的距离位置。

    创建对象

    要从 RoadRunner 场景中的车道宽度剖面中提取 LaneWidthNode 对象,请提取对应 LaneWidthProfile 对象的 Nodes 属性。例如,widthNodes = LaneWidthProfile1.Nodes 提取车道宽度剖面图 LaneWidthProfile1 中的所有节点。

    属性

    全部展开

    节点起始处的跨度宽度(单位:米),以数值标量形式指定,取值范围为[0, 200]。

    节点末端跨距宽度,以米为单位,指定为数值标量,取值范围为[0, 200]。

    节点起始处的斜率,指定为数值标量。负值区域向道路基准车道外侧倾斜。

    节点末端的斜率,指定为数值标量。负值区域向道路的基准车道方向倾斜。

    节点沿跨度序列的距离,表示宽度轮廓,单位为米,指定为数值标量。距离是以道路起点为基准的。默认情况下,车道宽度剖面由一个跨距构成,包含两个节点:一个位于道路起点,另一个位于道路终点。对于起始节点,默认距离为 0;而对于终点节点,默认距离等于道路的长度。您可以在起始节点和终止节点之间的宽度轮廓上,使用 insertNode 函数添加额外的节点。对于这些中间节点,您可以指定一个距离值,该值需在(0, N)范围内,其中 N 表示道路的总长度。

    此 属性 为只读。

    在车道宽度剖面图中,节点起始处连接的跨度,以 LaneWidthSpan 对象表示。

    此 属性 为只读。

    车道宽度剖面中节点末端连接的跨度,以 LaneWidthSpan 对象表示。

    示例

    全部折叠

    创建一个包含多条行车道和单条汇入车道的水平道路的 RoadRunner 场景。汇车道使车辆能够安全地从多条车道汇入单一车道,例如因道路变窄或车道封闭所致。

    创建一个 roadrunner 对象,指定现有工程的路径。例如,此代码显示 Windows® 计算机上位于 "C:\RR\MyProject" 的工程路径。此代码假设 RoadRunner 已安装在默认位置,并返回一个名为 rrApp 的对象,该对象提供用于执行基本任务(如打开、关闭和保存场景及工程)的函数。

    rrApp = roadrunner(ProjectFolder="C:\RR\MyProject");

    注意:若您首次从 MATLAB® 打开 RoadRunner,或自上次从 MATLAB 打开以来更改了 RoadRunner 的安装位置,可使用roadrunnerSetup功能指定新的默认工程和安装文件夹,以便在打开 RoadRunner 时使用。您可以在 MATLAB 会话之间通过从对应下拉菜单中选择 Across MATLAB sessions 选项来保存这些文件夹。

    在当前工程中使用 newScene 函数创建一个新的 RoadRunner 场景,并指定路跑者对象 rrApp

    newScene(rrApp);

    创建一个用于 RoadRunner 作者 API 的对象 rrApi,该对象引用当前 RoadRunner 实例 rrApp 的对象。rrApi 对象支持通过编程方式创建场景,例如使用 MATLAB 添加和修改道路及车道组件。

    rrApi = roadrunnerAPI(rrApp);

    从创作 API 对象 rrApiScene 属性中提取场景对象。提取的 Scene 对象可用于指定添加场景元素(如道路和车道)的场景。

    scn = rrApi.Scene;

    从创作 API 对象 rrApi 的工程属性中提取适用于工程 RoadRunner 的 Project 对象。提取的 Project 对象可让您指定当前 RoadRunner 会话的工程文件夹,用于从中检索素材对象。您可以使用素材为场景中的车道分配标记。

    prj = rrApi.Project;

    使用 addLineArcRoad 函数在场景中添加一条长度为 200 米的水平道路。通过指定道路控制点在 RoadRunner 局部坐标系 X 轴和 Y 轴上的位置来确定道路的位置。这些控制点定义了道路起始与终点的位置。您可以修改控制点的位置,以调整道路相对于场景原点的位置和方向。您还可以在线弧曲线的起点和终点之间添加控制点,以调整道路曲线的弯曲度和半径。

    controlPoints = [-100 0; 100 0];
    rrHorizontalRoad = addLineArcRoad(scn,controlPoints);

    从道路对象 rrHorizontalRoadReferenceLane 属性中提取道路的参考车道。参考车道定义了 RoadRunner 场景中道路的中心车道或参考线。该车道无宽度,作为定位所有其他车道的基础,RoadRunner 以此为基准线向外排列。

    refLane = rrHorizontalRoad.ReferenceLane;

    使用 getAsset (RoadRunner Scenario) 函数从工程 prj 中提取车道标记样式对象,该对象代表 DashedSingleWhite.rrlms 资源。要定义参考车道的车道标记轮廓,首先提取参考车道对象 refLane 的车道车道标记轮廓对象 refLaneMarkingProfile。然后,从车道标记轮廓对象 refLaneMarkingProfileSpans 属性中提取车道标记跨度对象 refLaneSpan,该对象表示需要放置车道标记的跨度。最后,将提取的标记段对象的 LaneMarkingStyle 属性设置为白色虚线样式,以标记参考车道。

    dashedWhiteMarkingStyle = getAsset(prj,"<PROJECT>/Assets/Markings/DashedSingleWhite.rrlms","LaneMarkingStyle");
    refLaneMarkingProfile = refLane.LaneMarkingProfile;
    refLaneSpan = refLaneMarkingProfile.Spans;
    refLaneSpan.LaneMarkingStyle = dashedWhiteMarkingStyle;

    使用 addLaneToLeft 函数在水平道路左侧添加一条向前行驶的车道。使用新增车道的 LaneTypeTravelDirection 属性来指定车道的类型和行驶方向。

    horizontalLane1 = addLaneToLeft(refLane);
    horizontalLane1.LaneType = "Driving";
    horizontalLane1.TravelDirection = "Forward";

    使用 insertNode 函数,在 90 米和 110 米处插入两个节点,将车道标记轮廓分割为四个跨段。

    insertNode(horizontalLane1.LaneMarkingProfile,90);
    insertNode(horizontalLane1.LaneMarkingProfile,110);

    horizontalLane1 对象的 LaneMarkingProfile 属性中提取表示车道标线轮廓的对象。车道标记轮廓代表车道外边界上的标记。

    horLane1MarkingProfile = horizontalLane1.LaneMarkingProfile;

    现在,从车道标记轮廓对象 horLane1MarkingProfileSpans 属性中提取 span 对象 horLane1Span,该对象代表需要放置所需车道标线的跨度。用白色虚线标记车道标线轮廓的第一跨段。

    horLane1Span = horLane1MarkingProfile.Spans(1);
    horLane1Span.LaneMarkingStyle = dashedWhiteMarkingStyle;

    提取代表实心单白标线样式的车道标线样式对象 solidWhiteMarkingStyle,并用其标记车道标线轮廓的第三跨段。

    solidWhiteMarkingStyle = getAsset(prj,"<PROJECT>/Assets/Markings/solidsingleWhite.rrlms","LaneMarkingStyle");
    horizontalLane1Span = horizontalLane1.LaneMarkingProfile.Spans(3);
    horizontalLane1Span.LaneMarkingStyle = solidWhiteMarkingStyle;

    在水平道路右侧增设一车道,行驶方向为向前,并采用实线单白标记样式标注其边界。

    horizontalLane2 = addLaneToRight(refLane);
    horizontalLane2.LaneType = "Driving";
    horizontalLane2.TravelDirection = "Forward";
    horLane2MarkingProfile = horizontalLane2.LaneMarkingProfile;
    horLane2Span = horLane2MarkingProfile.Spans;
    horLane2Span.LaneMarkingStyle = solidWhiteMarkingStyle;

    在第一条水平车道左侧增设一条并入车道,并为其添加实线白色标线样式。

    shortLane = addLaneToLeft(horizontalLane1);
    shortLane.LaneType = "Driving";
    shortLane.TravelDirection = "Forward";
    shortLaneSpan = shortLane.LaneMarkingProfile.Spans(1);
    shortLaneSpan.LaneMarkingStyle = solidWhiteMarkingStyle;

    通过指定车道的 WidthProfile 属性来配置合并车道的横断面。在道路起点 110 米处,汇入车道宽度缩减至 0。要在汇入车道边界处创建宽度剖面,请在道路起点 90 米处插入一个节点,并分别使用 StartSlopeEndSlope 属性设置该节点的起始坡度和终止坡度。通过在宽度轮廓的最终节点起点和终点处指定斜率,并设定宽度为 0,该宽度轮廓将使汇入车道逐渐缩减至零宽度。

    shortLaneWidthProfile = shortLane.WidthProfile;
    widthChangingNode = insertNode(shortLaneWidthProfile,90);
    widthChangingNode.StartSlope = 0;
    widthChangingNode.EndSlope = 0.10;
    endNode = shortLaneWidthProfile.Nodes(end);
    endNode.Distance = 110;
    endNode.StartWidth = 0;
    endNode.EndWidth = 0;
    endNode.StartSlope = 0.10;
    endNode.EndSlope = 0.0;

    A three-lane road in a RoadRunner scene, in which the leftmost lane merges into the center lane, converging into a two-lane road.

    版本历史记录

    在 R2025a 中推出