把从种子碰撞场景目标场景
这个例子展示了如何把一个从走鹃种子碰撞场景目标的场景。
在场景中创建碰撞用于各种自动驾驶测试应用程序。然而,创建一个测试场景的每一个场景都不是可伸缩的,并且容易出现人为错误。与手动测试场景创建,这个例子说明了如何把一个从种子碰撞场景目标场景使用这些步骤。
建立了MATLAB®——配置MATLAB设置与走鹃交互场景。
建立走鹃场景——走鹃开放,并将所需的文件复制到走鹃项目文件夹。
探索种子的场景——探索种子场景使用走鹃。
从种子中提取的演员属性的场景——从种子中提取自我和目标角色属性的场景。
提取碰撞信息——提取碰撞自我和目标演员路标点和他们的旅行距离。
探索目标场景和获取位置可能促使碰撞——探索目标场景和获取过滤位置可能促使碰撞。
把从种子碰撞场景目标场景——把种子场景目标场景的碰撞,碰撞和可视化。
路点导入走鹃——写进行自我和目标路点CSV文件并将它们导入走鹃。
建立了MATLAB
本节将展示如何设置环境cosimulate MATLAB与走鹃场景。
确保没有其他RoadRunner是当前打开的会话。
如果存在(“rrApp”,“var”关闭(rrApp)结束
指定本地RoadRunner安装文件夹的路径。这个代码显示了默认的安装位置的路径在Windows®。
rrAppPath =“C: \ Program Files \ RoadRunner R2023a \ bin \ win64”;
更新的MATLAB路径走鹃安装文件夹,设置分层树内的根对象,并更新TemporaryValue
RoadRunner安装文件夹的属性。
。有关更多信息,请参见SettingsGroup
。
s =设置;s.roadrunner.application.InstallationFolder。TemporaryValue = rrAppPath;
建立走鹃场景
指定的路径走鹃项目。这个代码显示了一个示例项目文件夹的路径位置在Windows。
rrProjectPath =“C: \ TestProject”;
打开走鹃项目使用指定的路径。的rrApp
走鹃对象允许您从MATLAB与走鹃工作区。
rrApp =走鹃(rrProjectPath);
这个示例使用两个文件,您必须添加到项目走鹃。
seedScenario.rrscenario
- - - - - -走鹃种子场景,碰撞。
LargeFourWayIntersection
- - - - - -目标场景,包含大型四车道,把碰撞。
指定的文件名走鹃种子场景和目标场景。
seedScenario =“seedScenario.rrscenario”;targetScene =“LargeFourWayIntersection”;
复制seedScenario
文件到项目走鹃。更多地了解走鹃环境,明白了走鹃项目和现场系统(走鹃)。
拷贝文件(seedScenario fullfile (rrProjectPath“场景”))
探索种子的场景
打开种子的场景seedScenario.rrscenario。
openScenario (rrApp seedScenario)
场景包含两个车辆。红色的车是自我车辆和蓝色的车是目标车辆。自我车辆有一个初始0 m / s的速度和加速到16.2米/秒的距离10米。的目标车辆有一个初始0 m / s和加速到15.4米/秒的距离10米。车辆在指定的路径在该方案中,他们碰撞在路径相交。
从种子中提取的演员属性的场景
从种子场景中提取属性,这些属性存储在一个ScenarioDescriptor
对象,rrDescriptor
,通过使用helperGetScenarioDescriptorRR
函数。
rrDescriptor = helperGetScenarioDescriptorRR (rrApp);
碰撞演员id指定为egoID
和targetID
。
egoID = 1;targetID = 2;
提取的属性指定的演员egoID
和targetID
通过使用helperGetActorProfiles
函数。
egoData = helperGetActorProfiles (rrDescriptor egoID)
egoData =结构体字段:时间(240×1双):锚点:[240×3双]偏航:(240×1双)情节:(240×1双):滚(240×1双)速度:(240×1双)维度:[1×1 struct]
targetData = helperGetActorProfiles (rrDescriptor targetID)
targetData =结构体字段:时间(221×1双):锚点:[221×3双]偏航:(221×1双)情节:(221×1双):滚(221×1双)速度:(221×1双)维度:[1×1 struct]
提取碰撞信息
得到碰撞碰撞的演员使用的信息getCollisionData
函数。
c = getCollisionData (rrDescriptor Actor1ID = egoID Actor2ID = targetID);
提取precollision演员锚点的自我和目标车辆使用helperIntersectWaypoints
函数。
注意:这个函数假设自我和目标车辆路径点相交。
[egoData.preCollisionWayPoints, targetData。preCollisionWayPoints] = helperIntersectWayPoints (c egoData.WayPoints targetData.WayPoints);
计算的总旅行距离自我和目标参与者通过使用helperGetDistance
函数。这个函数计算一个演员的旅行距离根据指定的演员锚点。
egoData。totalTravelDistance = helperGetDistance (egoData.WayPoints);targetData。totalTravelDistance = helperGetDistance (targetData.WayPoints);
计算precollision自我的旅行距离和目标参与者通过使用helperGetDistance
函数。计算precollision旅行距离使用提取precollision演员锚点。
egoData。preCollisionTravelDistance = helperGetDistance (egoData.preCollisionWayPoints);targetData。preCollisionTravelDistance = helperGetDistance (targetData.preCollisionWayPoints);
探索目标场景和获取位置可能促使碰撞
得到走鹃高清地图通过种子场景作为输入helperGetMap
函数。
sourceRRHDMap = helperGetMap (rrApp seedScenario)
sourceRRHDMap = roadrunnerHDMap属性:作者:“GeoReference: [0 0] GeographicBoundary:[2×3双]道:[50×1 roadrunner.hdmap。雷恩]LaneBoundaries: [79×1 roadrunner.hdmap。LaneBoundary] LaneGroups: [0×1 roadrunner.hdmap。LaneGroup] LaneMarkings:(1×1 roadrunner.hdmap。LaneMarking]连接:[1×1 roadrunner.hdmap。结]BarrierTypes: [0×1 roadrunner.hdmap。BarrierType]障碍:[0×1 roadrunner.hdmap。障碍]SignTypes: [0×1 roadrunner.hdmap。SignType]的迹象:[0×1 roadrunner.hdmap。签署]StaticObjectTypes: [0×1 roadrunner.hdmap。StaticObjectType] StaticObjects (0×1 roadrunner.hdmap.StaticObject):
目标场景LargeFourWayIntersection.rrscene
包含许多车道两边的道路相交的中心在一个交叉路口的场景。
得到所有相交巷位置从目标场景,根据种子的场景中,通过使用helperGetLaneIntersections
函数。这些交叉巷位置的潜在位置可能促使种子的碰撞情况。
[allLaneIntersections, targetRRHDMap] = helperGetLaneIntersections (rrApp、seedScenario targetScene);
删除交叉巷位置移位不是可行的使用helperFilterintersection
函数。
filteredLaneIntersections = helperFilterIntersection (sourceRRHDMap targetRRHDMap、allLaneIntersections egoData, targetData)
filteredLaneIntersections =50×5表X Y Lane1 Lane2 AssociatedJunction ____ ____ _____ _____ _____________ 157 1 0.23794 -10.228 7.2141 - -10.697 167 184 1 243.41 171.74 3.7272 -10.45 - 2 3 132 157 1 6.8915 -4.3148 7.8098 -4.9072 - 4 4 173 177 3.9544 -1.9057 - 4 1 9.2719 7.1449 -12.727 - 9.0921 147 157 147 158 1 2.3035 7.7481 -16.218 - 9.3303 147 167 147 178 1 5.7861 7.4374 7.5548 - -7.2119 147 184 149 157 1 0.58156 -6.7417 149 167 -17.049 -5.8496 4.0695 -6.9646 149 149 178 184 1⋮
探索目标走鹃高清地图场景,现在包含车道。
targetRRHDMap
targetRRHDMap = roadrunnerHDMap属性:作者:“GeoReference: [0 0] GeographicBoundary:[2×3双]道:[550×1 roadrunner.hdmap。雷恩]LaneBoundaries: [710×1 roadrunner.hdmap。LaneBoundary] LaneGroups: [0×1 roadrunner.hdmap。LaneGroup] LaneMarkings: [4×1 roadrunner.hdmap。LaneMarking]连接:[2×1 roadrunner.hdmap。结]BarrierTypes: [0×1 roadrunner.hdmap。BarrierType]障碍:[0×1 roadrunner.hdmap。障碍]SignTypes: [0×1 roadrunner.hdmap。SignType]的迹象:[0×1 roadrunner.hdmap。签署]StaticObjectTypes: [0×1 roadrunner.hdmap。StaticObjectType] StaticObjects (0×1 roadrunner.hdmap.StaticObject):
通过使用可视化的目标场景helperVisualizeLaneIntersection
函数。指定laneIntersectionIndex
覆盖车道的路口,你选择把碰撞,到目标场景。可视化情节已经标记选择车道交点与红色和其他车道交集点标有蓝色的颜色。
helperVisualizeLaneIntersections (targetRRHDMap filteredLaneIntersections) laneIntersectionIndex = 1;持有在情节(filteredLaneIntersections.X (laneIntersectionIndex) filteredLaneIntersections.Y (laneIntersectionIndex),的r *)举行从
把从种子碰撞场景目标场景
计算自我和目标为目标的演员锚点现场使用helperTranslocate
函数。
[newEgoWayPoints, newTargetWayPoints targetRRHDMap] = helperTranslocate (targetRRHDMap、egoData targetData, filteredLaneIntersections (laneIntersectionIndex:));
目标场景的可视化进行碰撞,通过使用helperVisualizeTranslocate
函数。可视化包含自我的轨迹和目标演员种子和目标场景。自我演员表示红色的轨迹和目标的轨迹演员蓝色表示。开始锚点的轨迹用绿色表示标记和锚点用红色标记表示。
helperVisualizeTranslocate (sourceRRHDMap、egoData.WayPoints targetData.WayPoints、targetRRHDMap newEgoWayPoints, newTargetWayPoints)
路点导入走鹃
写自我改变和目标路点使用CSV文件导入到走鹃。
writetable (newEgoWayPoints“ego.csv”)writetable (newTargetWayPoints“target.csv”)
关闭当前走鹃实例。
关闭(rrApp);
打开走鹃项目使用指定的路径。
rrApp =走鹃(rrProjectPath);
打开目标场景,创建一个新的场景。
openScene (rrApp targetScene) newScenario (rrApp)
路径点你保存为CSV文件导入走鹃使用importScenario
函数。
importScenario (rrApp fullfile (pwd,“ego.csv”),“CSV轨迹”(pwd) importScenario (rrApp fullfile“target.csv”),“CSV轨迹”)
进一步的探索
在这个示例中,您已经从种子的情况下探索把碰撞到目标场景LargeFourWayIntersection
。您还可以选择以下目标场景易位的更新targetScene
变量。
DownTownIntersection
——包含城市道路路口。
还可以添加种子场景中自我车辆速度变化和执行易位。添加速度变化,首先指定一个新的自我车辆速度。例如:
newEgoSpeed = 25;%单位是米每秒。
然后计算出自我的等待时间和目标通过演员需要保护他们的碰撞helperComputeWaitTime
函数。
[egoData.WaitTime, targetData。WaitTime] = helperComputeWaitTime(自我,目标,newEgoSpeed);
最后,重复中概述的步骤把从种子碰撞场景目标场景部分。
Helper函数
创建一个走鹃高清地图场景包含一个走鹃场景。
函数地图= helperGetMap (rrApp sourceScenario)%这个函数是用来走鹃高清的地图%走鹃场景。openScenario (rrApp sourceScenario) rrSim = createSimulation (rrApp);rrRawMap = rrSim.getMap;地图= matlabshared.roadrunner.createHDMap (rrRawMap.header rrRawMap.map);结束
版权2022年MathWorks公司。