이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
RoadRunner HD 지도를 사용하여 프로그래밍 방식으로 간단한 도로 구축
RoadRunner HD Map은 RoadRunner 장면에서 고화질(HD) 지도 데이터를 표현하기 위한 도로 데이터 모델입니다. 이 모델은 차선, 차선 경계, 차선 표시 및 분기점을 사용하여 도로 레이아웃을 나타내는 간단한 구조를 정의합니다. 이 예에서는 RoadRunner HD 지도 MATLAB® 개체 및 기능을 사용하여 간단한 도로를 만드는 방법을 보여줍니다. 그런 다음 도로를 RoadRunner로 가져올 수 있습니다. 도로를 건설하고 이를 RoadRunner 장면으로 가져오는 단계는 다음과 같습니다.
MATLAB에서 HD 지도를 구축하세요
MATLAB에 지도를 플롯하여 차선 및 차선 경계의 표현을 확인합니다.
RoadRunner HD 맵(.rrhd) 파일에 맵을 작성합니다.
파일을 RoadRunner로 가져오고 RoadRunner HD 지도 데이터를 미리 봅니다.
가져온 파일에서 RoadRunner 장면을 빌드합니다(RoadRunner Scene Builder 필요).
표시가 없는 직선 도로 만들기
고정 폭 도로는 도로 중심 위치에 해당하는 일련의 x-y 좌표를 사용하여 정의됩니다. 이 그림은 이 섹션에서 생성할 표시가 없는 직선 도로를 보여줍니다. 또한 MATLAB에 도로를 플롯한 다음 이진 파일에 저장합니다.
roadrunnerHDMap
개체를 호출하여 빈 RoadRunner HD 지도를 만듭니다.
rrMap = roadrunnerHDMap;
도로 중심을 지정하는 세 세트의 x-y 좌표가 포함된 2D 배열로 직선 도로의 중심을 정의합니다. 또한 도로의 폭을 정의합니다.
roadCenters = [0 0;0 50;0 100]; roadWidth = 6;
roadrunner.hdmap.LaneBoundary
객체를 사용하여 도로의 왼쪽 및 오른쪽 경계를 만듭니다. 차선 ID에 대한 차선 경계 정보와 차선 형상을 정의하는 좌표를 지정합니다.
rrMap.LaneBoundaries(1) = roadrunner.hdmap.LaneBoundary(ID="Left",Geometry=roadCenters-[roadWidth/2 0]); rrMap.LaneBoundaries(2) = roadrunner.hdmap.LaneBoundary(ID="Right",Geometry=roadCenters+[roadWidth/2 0]);
roadrunner.hdmap.Lane
객체를 사용하여 도로 차선을 생성합니다. 차선 ID에 대한 차선 정보, 차선 형상을 정의하는 좌표, 주행 방향 및 차선 유형을 지정합니다.
rLane = roadrunner.hdmap.Lane(ID="Lane",Geometry=roadCenters,TravelDirection="Forward",LaneType="Driving");
차선 경계를 차선에 연결합니다. 각 차선의 왼쪽 및 오른쪽 차선 경계를 정의하고 차선과 차선 경계 사이의 정렬을 지정합니다.
leftBoundary(rLane,"Left",Alignment="Forward"); rightBoundary(rLane,"Right",Alignment="Forward"); rrMap.Lanes = rLane;
차선 중앙과 차선 경계를 플롯하여 RoadRunner로 가져오기 전에 차선과 차선 경계를 미리 봅니다.
plot(rrMap);
write
함수를 사용하여 이전 단계에서 플롯한 HD 지도를 파일에 씁니다.
write(rrMap,"straightRoad.rrhd");
HD 지도 파일을 RoadRunner로 가져오고 구축
확장자가 .rrhd
인 RoadRunner HD 맵 파일을 RoadRunner로 가져오고, 맵을 미리 보고, 장면을 구축하는 방법에 대한 자세한 지침은 RoadRunner HD 지도를 사용하여 사용자 정의 데이터 가져오기를 참조하세요.
MATLAB® 명령줄에서 roadrunner 개체를 사용하여 RoadRunner 응용 프로그램을 엽니다. roadrunner
개체를 처음 생성하기 전에 대화형으로 RoadRunner를 설치하고 RoadRunner 라이센스를 활성화해야 합니다. 자세한 내용은 RoadRunner 설치 및 활성화 항목을 참조하십시오.
rrApp = roadrunner(ProjectFolder="C:\RR\MyProject", InstallationFolder="C:\Program Files\RoadRunner R2024a");
또는 roadrunnerSetup
(Automated Driving Toolbox) 함수를 사용하여 RoadRunner 애플리케이션을 대화형으로 시작할 수 있습니다. 이 기능은 RoadRunner를 열 때 사용할 프로젝트 폴더와 설치 폴더를 지정하는 대화 상자를 엽니다.
현재 열려 있는 장면에 지정된 파일에서 RoadRunner HD 맵 데이터를 가져오고 빌드합니다. 장면을 구축하기 전에 RoadRunner SceneBuilder 라이센스를 대화형으로 활성화해야 합니다.
file = fullfile(pwd,"straightRoad.rrhd"); importScene(rrApp,file,"RoadRunner HD Map");
이 그림은 RoadRunner Scene Builder를 사용하여 구축된 장면을 보여줍니다.
직선 도로에 표시 추가
이 섹션에서는 이전 섹션에서 생성한 직선 도로의 왼쪽 및 오른쪽 차선 경계에 흰색 실선 차선 표시를 추가합니다. 차선 표시를 지정하려면 RoadRunner 에 자산이 필요합니다. 이 예에서는 RoadRunner 자산 유형 의 일부인 자산을 사용합니다. 이러한 자산은 RoadRunner 프로젝트 폴더에 대한 상대 경로를 사용하여 맵에 지정됩니다.
roadrunner.hdmap.RelativeAssetPath
함수를 사용하여 흰색 실선 차선 표시 자산에 대한 경로를 정의합니다.
solidWhiteAsset = roadrunner.hdmap.RelativeAssetPath(AssetPath="Assets/Markings/SolidSingleWhite.rrlms");
roadrunner.hdmap.LaneMarking
객체를 사용하여 직선 도로에 흰색 실선 차선 표시를 만듭니다. 차선표시 ID에 대한 차선표시 정보와 자산 경로를 지정합니다.
rrMap.LaneMarkings = roadrunner.hdmap.LaneMarking(ID="SolidWhite",AssetPath=solidWhiteAsset);
roadrunner.hdmap.MarkingReference
객체를 사용하여 차선 경계에 적용할 흰색 단색 표시에 대한 참조를 만듭니다.
markingRefSW = roadrunner.hdmap.MarkingReference(MarkingID=roadrunner.hdmap.Reference(ID="SolidWhite"));
파라메트릭 속성을 사용하여 왼쪽 및 오른쪽 차선 경계의 전체 길이에 걸쳐 이 차선 표시를 적용합니다.
markingSpan = [0 1]; markingAttribSW = roadrunner.hdmap.ParametricAttribution(MarkingReference=markingRefSW,Span=markingSpan); rrMap.LaneBoundaries(1).ParametricAttributes = markingAttribSW; rrMap.LaneBoundaries(2).ParametricAttributes = markingAttribSW;
수정된 HD 지도를 파일에 씁니다.
write(rrMap,"straightRoadWithMarkings.rrhd");
현재 열려 있는 장면에 지정된 파일에서 RoadRunner HD 맵 데이터를 가져오고 빌드합니다.
file = fullfile(pwd,"straightRoadWithMarkings.rrhd"); importScene(rrApp,file,"RoadRunner HD Map");
이 그림은 RoadRunner Scene Builder를 사용하여 구축된 장면을 보여줍니다.
양방향 도로 만들기
양방향 도로에는 주행 방향이 반대인 2개의 차선이 있습니다. 노란색 실선 표시가 차선을 구분합니다. 이 그림은 이 섹션에서 생성할 직선 양방향 도로를 보여줍니다. 이전 섹션에서 사용한 것과 동일한 도로 중심과 도로 폭을 사용합니다.
roadrunnerHDMap
개체를 호출하여 빈 RoadRunner HD 지도를 만듭니다.
rrMap = roadrunnerHDMap;
차선과 차선 경계를 지정합니다. 이 예에서 값을 사전 초기화하면 지도의 객체 수가 증가함에 따라 성능이 향상됩니다.
rrMap.Lanes(2,1) = roadrunner.hdmap.Lane(); rrMap.LaneBoundaries(3,1) = roadrunner.hdmap.LaneBoundary();
Lane
속성 값을 할당합니다. deal
함수를 사용하여 입력 목록과 출력 목록을 일치시키세요.
[rrMap.Lanes.ID] = deal("Lane1","Lane2"); [rrMap.Lanes.Geometry] = deal(roadCenters-[roadWidth/4 0],roadCenters+[roadWidth/4 0]); [rrMap.Lanes.TravelDirection] = deal("Backward","Forward"); [rrMap.Lanes.LaneType] = deal("Driving");
LaneBoundaries
속성 값을 할당합니다. 이 예에서는 중앙 차선이 Lane1
와 Lane2
간에 공유됩니다.
[rrMap.LaneBoundaries.ID] = deal("Left","Center","Right"); [rrMap.LaneBoundaries.Geometry] = deal(roadCenters-[roadWidth/2 0],... roadCenters,roadCenters+[roadWidth/2 0]);
차선 경계를 차선에 연결합니다. 각 차선의 왼쪽 및 오른쪽 차선 경계를 정의하고 차선과 차선 경계 사이의 정렬을 지정합니다.
leftBoundary(rrMap.Lanes(1),"Left",Alignment="Forward"); rightBoundary(rrMap.Lanes(1),"Center",Alignment="Forward"); leftBoundary(rrMap.Lanes(2),"Center",Alignment="Forward"); rightBoundary(rrMap.Lanes(2),"Right",Alignment="Forward");
이전에 추가한 흰색 단색 표시에 추가로 노란색 단색 표시를 추가합니다. roadrunner.hdmap.RelativeAssetPath
함수를 사용하여 노란색 실선 차선 표시 자산의 경로를 정의합니다.
solidYellowAsset = roadrunner.hdmap.RelativeAssetPath(AssetPath="Assets/Markings/SolidSingleYellow.rrlms");
roadrunner.hdmap.LaneMarking
객체를 사용하여 직선 도로에 노란색 실선 차선 표시를 만듭니다. 차선표시 ID에 대한 차선표시 정보와 자산 경로를 지정합니다.
rrMap.LaneMarkings(2,1) = roadrunner.hdmap.LaneMarking(); [rrMap.LaneMarkings.ID] = deal("SolidWhite","SolidYellow"); [rrMap.LaneMarkings.AssetPath] = deal(solidWhiteAsset,solidYellowAsset);
차선 가장자리의 차선 경계에 흰색 표시를 할당하고 중앙 차선 경계에 노란색 표시를 할당합니다. 이러한 표시는 경계의 전체 길이에 걸쳐 있습니다.
markingRefSY = roadrunner.hdmap.MarkingReference(MarkingID=roadrunner.hdmap.Reference(ID="SolidYellow"));
markingAttribSY = roadrunner.hdmap.ParametricAttribution(MarkingReference=markingRefSY,Span=markingSpan);
[rrMap.LaneBoundaries.ParametricAttributes] = deal(markingAttribSW,markingAttribSY,markingAttribSW);
차선 중앙과 차선 경계를 플롯합니다.
plot(rrMap)
HD 지도를 파일에 씁니다.
write(rrMap,"twoWayRoad.rrhd");
현재 열려 있는 장면에 지정된 파일에서 RoadRunner HD 맵 데이터를 가져오고 빌드합니다.
file = fullfile(pwd,"twoWayRoad.rrhd"); importScene(rrApp,file,"RoadRunner HD Map");
이 그림은 RoadRunner Scene Builder를 사용하여 구축된 장면을 보여줍니다.
일방통행 도로에 차선 추가
이 섹션에서는 일방통행 도로에 차선을 추가합니다. 흰색 점선 표시는 이동 방향이 동일한 두 차선을 구분하는 데 사용됩니다. 일방통행 도로에 차선을 추가하려면 차선의 왼쪽 가장자리에서 한 차선을 두 개로 분할해야 합니다. 이를 위해서는 차선이 분할되는 RoadRunner HD 지도에 추가 차선과 차선 경계를 생성해야 합니다. 이 그림은 일방통행 도로에 추가할 차선을 보여줍니다.
roadrunnerHDMap
개체를 호출하여 빈 RoadRunner HD 지도를 만듭니다.
rrMap = roadrunnerHDMap;
차선과 차선 경계를 지정합니다.
rrMap.Lanes(5,1) = roadrunner.hdmap.Lane(); rrMap.LaneBoundaries(8,1) = roadrunner.hdmap.LaneBoundary();
차선 그룹과 차선 표시를 지정합니다.
rrMap.LaneGroups(3,1) = roadrunner.hdmap.LaneGroup(); rrMap.LaneMarkings(3,1) = roadrunner.hdmap.LaneMarking();
Lane
속성 값을 할당합니다. Lane1
를 Lane4
및 Lane5
로 분할하고 전환에 Lane2
및 Lane3
를 사용합니다.
[rrMap.Lanes.ID] = deal("Lane1","Lane2","Lane3","Lane4","Lane5"); [rrMap.Lanes.Geometry] = deal([0 -20;0 0;0 20;],[0 20;0 40;0 60;],[0 20;-3 40;-6 60],[-6 60;-6 80;-6 100],[0 60;0 80;0 100]); [rrMap.Lanes.TravelDirection] = deal("Forward"); [rrMap.Lanes.LaneType] = deal("Driving");
LaneBoundaries
속성 값을 할당합니다. Lane3
는 Left2
로 표시되는 Lane2
와 오른쪽 경계를 공유합니다.
[rrMap.LaneBoundaries.ID] = deal("Left1","Right1","Left2","Right2","Left3","Left4","Center4","Right4"); [rrMap.LaneBoundaries.Geometry] = deal([-3 -20;-3 0;-3 20],[3 -20;3 0;3 20],[-3 20;-3 40;-3 60;],... [3 20;3 40;3 60],[-3 20;-6 40;-9 60],[-9 60;-9 80;-9 100],[-3 60;-3 80;-3 100],[3 60;3 80;3 100]);
차선 경계를 차선에 연결합니다. 각 차선의 왼쪽 및 오른쪽 차선 경계를 정의하고 차선과 차선 경계 사이의 정렬을 지정합니다.
leftBoundary(rrMap.Lanes(1),"Left1",Alignment="Forward"); rightBoundary(rrMap.Lanes(1),"Right1",Alignment="Forward"); leftBoundary(rrMap.Lanes(2),"Left2",Alignment="Forward"); rightBoundary(rrMap.Lanes(2),"Right2",Alignment="Forward"); leftBoundary(rrMap.Lanes(3),"Left3",Alignment="Forward"); rightBoundary(rrMap.Lanes(3),"Left2",Alignment="Forward"); leftBoundary(rrMap.Lanes(4),"Left4",Alignment="Forward"); rightBoundary(rrMap.Lanes(4),"Center4",Alignment="Forward"); leftBoundary(rrMap.Lanes(5),"Center4",Alignment="Forward"); rightBoundary(rrMap.Lanes(5),"Right4",Alignment="Forward");
선행 구간과 후속 구간 관계에 대한 정보를 정의하여 차선 간의 정렬을 지정합니다.
rrMap.Lanes(3).Successors = roadrunner.hdmap.AlignedReference(Reference=roadrunner.hdmap.Reference(ID="Lane4"),Alignment="Forward"); rrMap.Lanes(3).Predecessors = roadrunner.hdmap.AlignedReference(Reference=roadrunner.hdmap.Reference(ID="Lane1"),Alignment="Forward"); rrMap.Lanes(2).Successors = roadrunner.hdmap.AlignedReference(Reference=roadrunner.hdmap.Reference(ID="Lane5"),Alignment="Forward"); rrMap.Lanes(2).Predecessors = roadrunner.hdmap.AlignedReference(Reference=roadrunner.hdmap.Reference(ID="Lane1"),Alignment="Forward"); rrMap.Lanes(1).Successors = roadrunner.hdmap.AlignedReference(Reference=roadrunner.hdmap.Reference(ID="Lane2"),Alignment="Forward"); rrMap.Lanes(1).Successors(2,1) = roadrunner.hdmap.AlignedReference(Reference=roadrunner.hdmap.Reference(ID="Lane3"),Alignment="Forward"); rrMap.Lanes(4).Predecessors = roadrunner.hdmap.AlignedReference(Reference=roadrunner.hdmap.Reference(ID="Lane3"),Alignment="Forward"); rrMap.Lanes(5).Predecessors = roadrunner.hdmap.AlignedReference(Reference=roadrunner.hdmap.Reference(ID="Lane2"),Alignment="Forward");
이전에 추가한 흰색 및 노란색 단색 표시 외에 흰색 점선 표시를 추가합니다. roadrunner.hdmap.RelativeAssetPath
함수를 사용하여 흰색 점선 차선 표시 자산에 대한 경로를 정의합니다.
dashedWhiteAsset = roadrunner.hdmap.RelativeAssetPath(AssetPath="Assets/Markings/DashedSingleWhite.rrlms");
roadrunner.hdmap.LaneMarking
객체를 사용하여 도로에 흰색 점선 차선 표시를 만듭니다.
rrMap.LaneMarkings(3,1) = roadrunner.hdmap.LaneMarking(); [rrMap.LaneMarkings.ID] = deal("SolidWhite","SolidYellow","DashedWhite"); [rrMap.LaneMarkings.AssetPath] = deal(solidWhiteAsset,solidYellowAsset,dashedWhiteAsset);
파라메트릭 속성을 사용하여 차선 표시를 할당합니다.
markingRefDW = roadrunner.hdmap.MarkingReference(MarkingID=roadrunner.hdmap.Reference(ID="DashedWhite")); markingAttribDW = roadrunner.hdmap.ParametricAttribution(MarkingReference=markingRefDW,Span=markingSpan); [rrMap.LaneBoundaries.ParametricAttributes] = deal(markingAttribSY,markingAttribSW,markingAttribDW,markingAttribSW,... markingAttribSY,markingAttribSY,markingAttribDW,markingAttribSW);
차선 중앙과 차선 경계를 플롯합니다.
plot(rrMap)
HD 지도를 파일에 씁니다.
write(rrMap,"laneAdd.rrhd");
사용자는 가져오기 및 빌드 옵션을 사용할 때 HD 맵 파일을 현재 프로젝트의 자산 폴더에 복사해야 합니다.
copyfile("laneAdd.rrhd", "C:\RR\MyProject\Assets");
지도를 로드하는 RoadRunner HD 지도 가져오기 옵션을 만듭니다.
importOptions = roadrunnerHDMapImportOptions(ImportStep="Load");
지정된 파일의 RoadRunner HD 맵 데이터를 현재 열려 있는 장면으로 로드합니다.
file = fullfile("C:\RR\MyProject\Assets","laneAdd.rrhd"); importScene(rrApp,file,"RoadRunner HD Map",importOptions);
지도를 구축하는 RoadRunner HD 지도 구축 옵션을 생성합니다.
buildOptions = roadrunnerHDMapBuildOptions(DetectAsphaltSurfaces=true);
지정된 파일의 RoadRunner HD 맵 데이터를 현재 열려 있는 장면에 빌드합니다.
buildScene(rrApp,"RoadRunner HD Map",buildOptions);
이 그림은 RoadRunner Scene Builder를 사용하여 구축된 장면을 보여줍니다.