def test_ParamPoly(self): tangentX = np.array([9.389829642616592, -7.596531772501544]) tangentY = np.array([0.0, 5.5192033616035365]) t = np.array([0, 1]) x = np.array([0, 17.8605173461395]) y = np.array([0, -5.803233839653106]) hermiteX = CubicHermiteSpline(t, x, tangentX) hermiteY = CubicHermiteSpline(t, y, tangentY) xCoeffs = hermiteX.c.flatten() yCoeffs = hermiteY.c.flatten() # scipy coefficient and open drive coefficents have opposite order. myRoad = self.roadBuilder.curveBuilder.createParamPoly3( 0, isJunction=False, au=xCoeffs[3], bu=xCoeffs[2], cu=xCoeffs[1], du=xCoeffs[0], av=yCoeffs[3], bv=yCoeffs[2], cv=yCoeffs[1], dv=yCoeffs[0]) odr = pyodrx.OpenDrive("test") odr.add_road(myRoad) odr.adjust_roads_and_lanes() extensions.printRoadPositions(odr) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath")))
def harvestByPainting2L(self, maxNumberOfRoadsPerJunction, triesPerRoadCount, show=False): """[summary] Args: maxNumberOfRoadsPerJunction ([type]): [description] triesPerRoadCount ([type]): number of junctions to be created for each set of roads. for 3 roads, we will try triesPerRoadCount, for 4 roads the same. save (bool, optional): [description]. Defaults to True. """ odrs = [] for numRoads in range(3, maxNumberOfRoadsPerJunction + 1): for _ in range(triesPerRoadCount): odr = self.sequentialJunctionBuilder.drawLikeAPainter2L(self.lastId, numRoads) self.lastId += 1 if show: extensions.view_road(odr, os.path.join('..', self.esminiPath)) xmlPath = self.getOutputPath(odr.name) odr.write_xml(xmlPath) # 2. save image if self.saveImage is True: extensions.saveRoadImageFromFile(xmlPath, self.esminiPath) odrs.append(odr) with(open(self.destinationPrefix + "harvestedByPainting2L.dill", "wb")) as f: dill.dump(odrs, f) print("Odr objects saved to " + self.destinationPrefix + "harvestedByPainting2L.dill" ) pass
def test_DifferentLaneConfigurations(self): roads = [] roads.append( self.straightRoadBuilder.createWithDifferentLanes(0, 10, n_lanes_left=1, n_lanes_right=1)) connectionRoad = self.straightRoadBuilder.createWithDifferentLanes( 1, 10, n_lanes_left=2, n_lanes_right=2) roads.append(connectionRoad) roads.append( self.straightRoadBuilder.createWithDifferentLanes(2, 10, n_lanes_left=1, n_lanes_right=2)) roads[0].addExtendedSuccessor(roads[1], 0, pyodrx.ContactPoint.start) roads[1].addExtendedPredecessor(roads[0], 0, pyodrx.ContactPoint.end) roads[1].addExtendedSuccessor(roads[2], 0, pyodrx.ContactPoint.start) roads[2].addExtendedPredecessor(roads[1], 0, pyodrx.ContactPoint.end) self.laneBuilder.createLanesForConnectionRoad(connectionRoad, roads[0], roads[2]) odrName = "test_DifferentLaneConfigurations" odr = extensions.createOdrByPredecessor(odrName, roads, []) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) xmlPath = f"output/test_DifferentLaneConfigurations.xodr" odr.write_xml(xmlPath)
def test_getIncidentPoints(self): maxNumberOfRoadsPerJunction = 4 path = self.configuration.get("harvested_straight_roads") intersection = self.builder.createWithRandomLaneConfigurations( path, 0, maxNumberOfRoadsPerJunction=maxNumberOfRoadsPerJunction, maxLanePerSide=2, minLanePerSide=0, internalConnections=True, cp1=pyodrx.ContactPoint.end, internalLinkStrategy=LaneConfigurationStrategies.SPLIT_FIRST, getAsOdr=False) odr = intersection.odr xmlPath = f"output/test_getIncidentPoints-split-first-{maxNumberOfRoadsPerJunction}.xodr" odr.write_xml(xmlPath) incidentPoints = intersection.getIncidentPoints() translatedPoints = intersection.getIncidentPointsTranslatedToCenter() print(f"width and height: {intersection.getWH()}") print(incidentPoints) print(translatedPoints) extensions.printRoadPositions(odr) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath")))
def test_normalRoadLinks(self): roads = [] roads.append(self.straightRoadBuilder.create(0)) roads.append( self.roadBuilder.curveBuilder.createSimple(1, np.pi / 4, False, curvature=0.2)) roads.append(self.straightRoadBuilder.create(2)) RoadLinker.createExtendedPredSuc(predRoad=roads[0], predCp=pyodrx.ContactPoint.end, sucRoad=roads[1], sucCP=pyodrx.ContactPoint.start) RoadLinker.createExtendedPredSuc(predRoad=roads[1], predCp=pyodrx.ContactPoint.end, sucRoad=roads[2], sucCP=pyodrx.ContactPoint.start) odrName = "test_connectionRoad" odr = extensions.createOdrByPredecessor(odrName, roads, []) # self.laneBuilder.addRightTurnLaneUS(roads[0], 3) # self.laneBuilder.addRightLaneUS(roads[1]) # odr.resetAndReadjust(byPredecessor=True) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath")))
def test_4WayJunctionsEqualAngles(self): maxNumberOfRoadsPerJunction = 4 maxLanePerSide = 1 minLanePerSide = 1 for sl in range(5): path = self.configuration.get("harvested_straight_roads") odr = self.builder.createWithRandomLaneConfigurations( path, 0, maxNumberOfRoadsPerJunction=maxNumberOfRoadsPerJunction, maxLanePerSide=maxLanePerSide, minLanePerSide=minLanePerSide, internalConnections=True, cp1=pyodrx.ContactPoint.end, internalLinkStrategy=LaneConfigurationStrategies.SPLIT_ANY, equalAngles=True) # xmlPath = f"output/test_createWithRandomLaneConfigurations-split-any-{maxNumberOfRoadsPerJunction}-{sl}.xodr" xmlPath = f"output/seed-{self.seed}-{maxNumberOfRoadsPerJunction}-way-eq-{sl}.xodr" odr.write_xml(xmlPath) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) extensions.saveRoadImageFromFile( xmlPath, self.configuration.get("esminipath"))
def test_RightLane(self): # test scenario for connection road roads = [] roads.append(pyodrx.create_straight_road(0, 10)) # roads.append(self.roadBuilder.createSimpleCurve(1, np.pi/4, True, curvature = 0.2)) # roads.append(pyodrx.create_straight_road(2, 10)) # roads[0].add_successor(pyodrx.ElementType.junction,1) # roads[1].add_predecessor(pyodrx.ElementType.road,0,pyodrx.ContactPoint.end) # # roads[1].add_predecessor(pyodrx.ElementType.road,0,pyodrx.ContactPoint.start) # roads[1].add_successor(pyodrx.ElementType.road,2,pyodrx.ContactPoint.start) # roads[2].add_predecessor(pyodrx.ElementType.junction,1, pyodrx.ContactPoint.end) odrName = "test_connectionRoad" odr = extensions.createOdrByPredecessor(odrName, roads, []) self.laneBuilder.addRightTurnLaneUS(roads[0], 3) # self.laneBuilder.addRightLaneUS(roads[1]) odr.resetAndReadjust(byPredecessor=True) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) xmlPath = f"output/test-RightLane.xodr" odr.write_xml(xmlPath)
def test_cubicParams(self): roads = [] roads.append(pyodrx.create_straight_road(0, 10)) roads.append(self.roadBuilder.createParamPoly3(1, isJunction=True)) roads.append(pyodrx.create_straight_road(2, 1)) roads[0].add_successor(pyodrx.ElementType.junction, 1) roads[1].add_predecessor(pyodrx.ElementType.road, 0, pyodrx.ContactPoint.end) roads[1].add_successor(pyodrx.ElementType.road, 2, pyodrx.ContactPoint.start) roads[2].add_predecessor(pyodrx.ElementType.junction, 1) con1 = pyodrx.Connection(0, 1, pyodrx.ContactPoint.start) con1.add_lanelink(-1, -1) junction = pyodrx.Junction('test', 1) junction.add_connection(con1) odr = pyodrx.OpenDrive('test') for r in roads: odr.add_road(r) odr.add_junction(junction) odr.adjust_roads_and_lanes() extensions.view_road(odr, os.path.join('..', 'F:\\myProjects\\av\\esmini'))
def test_createMShape(self): roads = [] roads.append(pyodrx.create_straight_road(0, 10)) roads.append(self.roadBuilder.createMShape(1, 1, np.pi / 1.5, 10)) roads.append(pyodrx.create_straight_road(2, 10)) roads[0].add_successor(pyodrx.ElementType.junction, 1) roads[1].add_predecessor(pyodrx.ElementType.road, 0, pyodrx.ContactPoint.end) # roads[1].add_predecessor(pyodrx.ElementType.road,0,pyodrx.ContactPoint.start) roads[1].add_successor(pyodrx.ElementType.road, 2, pyodrx.ContactPoint.start) roads[2].add_predecessor(pyodrx.ElementType.junction, 1) junction = self.junctionBuilder.createJunctionForASeriesOfRoads(roads) odrName = "test_connectionRoad" odr = extensions.createOdr(odrName, roads, [junction]) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) xmlPath = f"output/m-shape.xodr" odr.write_xml(xmlPath) extensions.saveRoadImageFromFile(xmlPath, self.esminiPath)
def test_createMShapeRightLanes(self): roads = [] roads.append(pyodrx.create_straight_road(0, 10)) roads.append( self.roadBuilder.createMShape( 1, 1, -np.pi / 1.5, 10, laneSides=junctions.LaneSides.RIGHT, direction=CircularDirection.COUNTERCLOCK_WISE)) roads.append(pyodrx.create_straight_road(2, 10)) roads[0].add_successor(pyodrx.ElementType.junction, 1) roads[1].add_predecessor(pyodrx.ElementType.road, 0, pyodrx.ContactPoint.end) # roads[1].add_predecessor(pyodrx.ElementType.road,0,pyodrx.ContactPoint.start) roads[1].add_successor(pyodrx.ElementType.road, 2, pyodrx.ContactPoint.start) roads[2].add_predecessor(pyodrx.ElementType.junction, 1) junction = self.junctionBuilder.createJunctionForASeriesOfRoads(roads) odrName = "test_connectionRoad" odr = extensions.createOdr(odrName, roads, [junction]) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath")))
def test_SimpleCurve(self): roads = [] roads.append( self.curveRoadBuilder.create(0, angleBetweenEndpoints=np.pi / 2, curvature=0.05, isLeftTurnLane=True)) odrName = "test_LeftTurnLaneCurve" odr = extensions.createOdrByPredecessor(odrName, roads, []) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) xmlPath = f"output/test_LeftTurnLaneCurve.xodr" odr.write_xml(xmlPath) roads = [] roads.append( self.curveRoadBuilder.create(0, angleBetweenEndpoints=np.pi / 2, curvature=0.05, isRightTurnLane=True)) odrName = "test_RightTurnLaneCurve" odr = extensions.createOdrByPredecessor(odrName, roads, []) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) xmlPath = f"output/test_RightTurnLaneCurve.xodr" odr.write_xml(xmlPath)
def test_buildSimpleRoundAboutAndCheckInternalConnection(self): numRoads = 3 odr = self.junctionBuilder.buildSimpleRoundAbout( odrId=0, numRoads=numRoads, radius=10, cp1=pyodrx.ContactPoint.end) xmlPath = f"output/test-SimpleRoundAbout-{numRoads}.xodr" odr.write_xml(xmlPath) extensions.printRoadPositions(odr) extensions.saveRoadImageFromFile(xmlPath, self.esminiPath) extensions.view_road(odr, os.path.join('..', self.esminiPath)) # what's the problem with internal connections? internalConnection = odr.roads['12'].shallowCopy() internalConnection.clearRoadLinks() odr = extensions.createOdr("12 only", [internalConnection], []) xmlPath = f"output/test-SimpleRoundAbout-{numRoads}-road-12.xodr" odr.write_xml(xmlPath) extensions.printRoadPositions(odr) extensions.saveRoadImageFromFile(xmlPath, self.esminiPath) extensions.view_road(odr, os.path.join('..', self.esminiPath))
def test_buildMap(self): name = 'first_hd_map' odr = self.hdMapBuilder.buildMap(name, plot=True) xmlPath = f"output/test_HDMapBuilder-{name}.xodr" odr.write_xml(xmlPath) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) pass
def test_getMaxCurvatureMaxRoadWidth(self): roads = [] numberofLanes = 1 laneOffset = 3 angle = np.pi * .75 maxCurve = AngleCurvatureMap.getMaxCurvatureAgainstMaxRoadWidth( angle, numberofLanes * laneOffset) curve = maxCurve * 1.1 print(f"max curve {maxCurve}, current curve {curve}") roads.append( self.straightRoadBuilder.createWithDifferentLanes( 0, length=10, junction=-1, n_lanes_left=numberofLanes, n_lanes_right=numberofLanes)) roads.append( self.curveRoadBuilder.createSimpleCurveWithLongArc( 1, angleBetweenEndpoints=angle, curvature=curve, isJunction=True, n_lanes=numberofLanes)) roads.append( self.straightRoadBuilder.createWithDifferentLanes( 2, length=10, junction=-1, n_lanes_left=numberofLanes, n_lanes_right=numberofLanes)) RoadLinker.createExtendedPredSuc(predRoad=roads[0], predCp=pyodrx.ContactPoint.end, sucRoad=roads[1], sucCP=pyodrx.ContactPoint.start) RoadLinker.createExtendedPredSuc(predRoad=roads[1], predCp=pyodrx.ContactPoint.end, sucRoad=roads[2], sucCP=pyodrx.ContactPoint.start) odrName = "test_createSingleLaneConnectionRoad" odr = extensions.createOdrByPredecessor(odrName, roads, []) # extensions.printRoadPositions(odr) road = roads[1] print(f"{road.id} has length {road.planview.get_total_length()}") for geom in road.planview._adjusted_geometries: print(geom.length) extensions.view_road(odr, os.path.join('..', self.esminipath))
def test_DifferentCPs(self): # same cps roads = [] roads.append( self.straightRoadBuilder.createWithDifferentLanes(0, length=20, junction=-1, n_lanes_left=2, n_lanes_right=1)) roads.append( self.straightRoadBuilder.createWithDifferentLanes(1, length=10, junction=-1, n_lanes_left=1, n_lanes_right=2)) roads[0].addExtendedSuccessor(roads[1], 0, pyodrx.ContactPoint.start) roads[1].addExtendedPredecessor(roads[0], 0, pyodrx.ContactPoint.start) odrName = "test_DifferentCPs1" odr = extensions.createOdrByPredecessor(odrName, roads, []) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) xmlPath = f"output/test_DifferentCPs1.xodr" odr.write_xml(xmlPath) # same cps 2 roads = [] roads.append( self.straightRoadBuilder.createWithDifferentLanes(0, length=20, junction=-1, n_lanes_left=2, n_lanes_right=1)) roads.append( self.straightRoadBuilder.createWithDifferentLanes(1, length=10, junction=-1, n_lanes_left=2, n_lanes_right=1)) roads[0].addExtendedSuccessor(roads[1], 0, pyodrx.ContactPoint.start) roads[1].addExtendedPredecessor(roads[0], 0, pyodrx.ContactPoint.end) odrName = "test_DifferentCPs2" odr = extensions.createOdrByPredecessor(odrName, roads, []) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) xmlPath = f"output/test_DifferentCPs2.xodr" odr.write_xml(xmlPath)
def test_drawLikeAPainter2LWihtoutInternalConnections(self): maxNumberOfRoadsPerJunction = 5 odr = self.builder.drawLikeAPainter2L( odrId=0, maxNumberOfRoadsPerJunction=maxNumberOfRoadsPerJunction, internalConnections=False) extensions.printRoadPositions(odr) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) xmlPath = f"output/test_drawLikeAPainter2LWihtoutInternalConnections.xodr" odr.write_xml(xmlPath)
def test_buildSimpleRoundAbout(self): numRoads = 6 odr = self.junctionBuilder.buildSimpleRoundAbout( odrId=0, numRoads=numRoads, radius=10, cp1=pyodrx.ContactPoint.end) xmlPath = f"output/test-SimpleRoundAbout-{numRoads}.xodr" odr.write_xml(xmlPath) extensions.printRoadPositions(odr) extensions.saveRoadImageFromFile(xmlPath, self.esminiPath) extensions.view_road(odr, os.path.join('..', self.esminiPath))
def test_addMedianIslandsTo3Sections(self): road = self.straightRoadBuilder.create(1, n_lanes_left=1, n_lanes_right=1, length=20, force3Section=False) try: self.laneBuilder.addMedianIslandsTo2Of3Sections( road, 20, skipEndpoint=pyodrx.ContactPoint.start, width=3) assert False except: assert True road = self.straightRoadBuilder.create(1, n_lanes_left=1, n_lanes_right=1, length=20, force3Section=True) self.laneBuilder.addMedianIslandsTo2Of3Sections( road, 20, skipEndpoint=pyodrx.ContactPoint.start, width=3) assert len(road.lanes.lanesections[0].leftlanes) == 1 assert len(road.lanes.lanesections[0].rightlanes) == 1 assert len(road.lanes.lanesections[1].leftlanes) == 2 assert len(road.lanes.lanesections[1].rightlanes) == 2 assert len(road.lanes.lanesections[2].leftlanes) == 2 assert len(road.lanes.lanesections[2].rightlanes) == 2 road = self.straightRoadBuilder.create(1, n_lanes_left=1, n_lanes_right=1, length=20, force3Section=True) self.laneBuilder.addMedianIslandsTo2Of3Sections( road, 20, skipEndpoint=pyodrx.ContactPoint.end, width=3) assert len(road.lanes.lanesections[0].leftlanes) == 2 assert len(road.lanes.lanesections[0].rightlanes) == 2 assert len(road.lanes.lanesections[1].leftlanes) == 2 assert len(road.lanes.lanesections[1].rightlanes) == 2 assert len(road.lanes.lanesections[2].leftlanes) == 1 assert len(road.lanes.lanesections[2].rightlanes) == 1 odrName = "test_DifferentLaneConfigurations" odr = extensions.createOdrByPredecessor(odrName, [road], []) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) xmlPath = f"output/test_addMedianIslandsTo3Sections.xodr" odr.write_xml(xmlPath)
def test_ThreeWayJunctionWithAngle(self): angleBetweenRoads = np.pi / 4 odr = self.builder.ThreeWayJunctionWithAngle( odrId=1, angleBetweenRoads=angleBetweenRoads, maxLanePerSide=4, minLanePerSide=2, cp1=pyodrx.ContactPoint.end) extensions.printRoadPositions(odr) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) # extensions.view_road_odrviewer(odr, os.path.join('..',self.configuration.get("esminipath"))) xmlPath = f"output/test_ThreeWayJunctionWithAngle.xodr" odr.write_xml(xmlPath)
def test_getCurvatureForAngleAndLength(self): numberofLanes = 10 laneOffset = 3 # angle = 120 # curve, angle = AngleCurvatureMap.getCurvatureForNonOverlappingRoads(angle, numberofLanes, laneOffset) angle = np.pi * 1.2 length = 20 # curve, angle = AngleCurvatureMap.getCurvatureForNonOverlappingRoads(angle, numberofLanes, laneOffset) maxCurve = AngleCurvatureMap.getMaxCurvatureAgainstMaxRoadWidth( angle, numberofLanes * laneOffset) curve = AngleCurvatureMap.getCurvatureForAngleAndLength(angle, length) print(f"max curve {maxCurve}, current curve {curve}") roads = [] roads.append( pyodrx.create_straight_road(0, 50, n_lanes=numberofLanes, lane_offset=laneOffset)) roads.append( self.roadBuilder. createSimpleCurveWithLongArcWithLaneNumberandOffset( 1, angle, False, curvature=curve, _n_lanes=numberofLanes, _lane_offset=laneOffset)) roads.append( pyodrx.create_straight_road(2, 50, n_lanes=numberofLanes, lane_offset=laneOffset)) roads[0].add_successor(pyodrx.ElementType.road, 1, pyodrx.ContactPoint.start) roads[1].add_predecessor(pyodrx.ElementType.road, 0, pyodrx.ContactPoint.end) roads[1].add_successor(pyodrx.ElementType.road, 2, pyodrx.ContactPoint.start) roads[2].add_predecessor(pyodrx.ElementType.road, 1, pyodrx.ContactPoint.end) odrName = "curve_test" odr = extensions.createOdr(odrName, roads, []) extensions.view_road(odr, self.esminiPath)
def test_addMedianIslandsToAllSections(self): roads = [] roads.append( self.straightRoadBuilder.createWithDifferentLanes(0, 10, n_lanes_left=1, n_lanes_right=1)) self.laneBuilder.addMedianIslandsToAllSections( roads[0], self.configuration.get('default_lane_width')) odrName = "test_DifferentLaneConfigurations" odr = extensions.createOdrByPredecessor(odrName, roads, []) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) xmlPath = f"output/test_addMedianIslandsToAllSections.xodr" odr.write_xml(xmlPath)
def test_getLanePosition(self): roads = [] roads.append( self.straightRoadBuilder.createWithDifferentLanes(0, length=10, junction=-1, n_lanes_left=2, n_lanes_right=2)) roads.append( self.straightRoadBuilder.createWithRightTurnLanesOnLeft( 1, length=10, n_lanes=2, junction=1, isLeftTurnLane=True, isRightTurnLane=True, numberOfRightTurnLanesOnLeft=2, mergeLaneOnTheOppositeSideForInternalTurn=False)) roads.append( self.straightRoadBuilder.createWithDifferentLanes(2, length=10, junction=-1, n_lanes_left=5, n_lanes_right=3)) self.roadLinker.linkConsecutiveRoadsWithNoBranches(roads) roads[1].updatePredecessorOffset(-2) odrName = "test_getBorderDistanceOfLane" odr = extensions.createOdrByPredecessor(odrName, roads, []) extensions.printRoadPositions(odr) print(roads[0].getLanePosition(0, pyodrx.ContactPoint.end)) print(roads[0].getLanePosition(1, pyodrx.ContactPoint.end)) print(roads[0].getLanePosition(2, pyodrx.ContactPoint.end)) positionLeftMost = roads[0].getLanePosition(2, pyodrx.ContactPoint.end) assert positionLeftMost[0] == 10.0 assert positionLeftMost[1] == 6.0 assert positionLeftMost[2] == 0 extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath")))
def test_merge2R2L2(self): odrList = [] for angleOdrList in self.odrDic.values(): odrList += angleOdrList numberOfOds = len(odrList) for _ in range(5): try: selectedOdrs = [odrList[np.random.choice(numberOfOds)], odrList[np.random.choice(numberOfOds)]] newOdr = self.merger.merge2R2L(selectedOdrs) extensions.view_road(newOdr,os.path.join('..',self.configuration.get("esminipath"))) except: pass # extensions.save_road_image(newOdr,os.path.join('..',self.configuration.get("esminipath")))
def test_RotateOpenDrive(self): angleBetweenRoads = np.pi / 4 odr = self.threeWayJunctionBuilder.ThreeWayJunctionWithAngle( odrId=1, angleBetweenRoads=angleBetweenRoads, maxLanePerSide=4, minLanePerSide=2, cp1=pyodrx.ContactPoint.end) # extensions.view_road(odr, os.path.join('..', self.configuration.get("esminipath"))) # extensions.printRoadPositions(odr) RotatedODR = extensions.rotateOpenDrive(odr=odr, startX=0.0, startY=0.0, heading=np.pi) extensions.printRoadPositions(RotatedODR) extensions.view_road( RotatedODR, os.path.join('..', self.configuration.get("esminipath")))
def test_StartEnd(self): roads = [] roads.append( self.straightRoadBuilder.createWithDifferentLanes(0, 10, n_lanes_left=1, n_lanes_right=1)) connectionRoad = self.curveBuilder.create(1, np.pi / 4, isJunction=True, curvature=0.1, n_lanes=1) roads.append(connectionRoad) roads.append( self.straightRoadBuilder.createWithDifferentLanes(2, 10, n_lanes_left=1, n_lanes_right=1)) roads[0].addExtendedSuccessor(roads[1], 0, pyodrx.ContactPoint.start) roads[1].addExtendedPredecessor(roads[0], 0, pyodrx.ContactPoint.start) roads[1].addExtendedSuccessor(roads[2], 0, pyodrx.ContactPoint.start) roads[2].addExtendedPredecessor(roads[1], 0, pyodrx.ContactPoint.end) self.laneBuilder.createLanesForConnectionRoad(connectionRoad, roads[0], roads[2]) odrName = "test_StartEnd" odr = extensions.createOdrByPredecessor(odrName, roads, []) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) print( math.degrees( self.roadLinker.getAngleBetweenStraightRoads( roads[0], roads[2]))) xmlPath = f"output/test_StartEnd.xodr" odr.write_xml(xmlPath)
def test_merge2R2L2(self): odrList = [] for angleOdrList in self.odrDic.values(): odrList += angleOdrList numberOfOds = len(odrList) for _ in range(20): try: selectedOdrs = [ odrList[np.random.choice(numberOfOds)], odrList[np.random.choice(numberOfOds)] ] newOdr = self.merger.merge2R2L(selectedOdrs) extensions.view_road( newOdr, os.path.join('..', 'F:\\myProjects\\av\\esmini')) except: pass
def test_drawLikeAPainter2L(self): maxNumberOfRoadsPerJunction = 3 odr = self.builder.drawLikeAPainter2L( odrId=0, maxNumberOfRoadsPerJunction=maxNumberOfRoadsPerJunction) extensions.printRoadPositions(odr) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) xmlPath = f"output/test_drawLikeAPainter2L-{maxNumberOfRoadsPerJunction}.xodr" odr.write_xml(xmlPath) maxNumberOfRoadsPerJunction = 4 odr = self.builder.drawLikeAPainter2L( odrId=0, maxNumberOfRoadsPerJunction=maxNumberOfRoadsPerJunction) extensions.printRoadPositions(odr) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) xmlPath = f"output/test_drawLikeAPainter2L-{maxNumberOfRoadsPerJunction}.xodr" odr.write_xml(xmlPath) maxNumberOfRoadsPerJunction = 5 odr = self.builder.drawLikeAPainter2L( odrId=0, maxNumberOfRoadsPerJunction=maxNumberOfRoadsPerJunction) extensions.printRoadPositions(odr) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) xmlPath = f"output/test_drawLikeAPainter2L-{maxNumberOfRoadsPerJunction}.xodr" odr.write_xml(xmlPath) maxNumberOfRoadsPerJunction = 6 odr = self.builder.drawLikeAPainter2L( odrId=0, maxNumberOfRoadsPerJunction=maxNumberOfRoadsPerJunction) extensions.printRoadPositions(odr) extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath"))) xmlPath = f"output/test_drawLikeAPainter2L-{maxNumberOfRoadsPerJunction}.xodr" odr.write_xml(xmlPath)
def test_merge2R2L(self): odrs = self.odrDic['0.3141592653589793'] odrs2 = [odrs[0], odrs[5]] newOdr = self.merger.merge2R2L(odrs2) extensions.view_road(newOdr, os.path.join('..', 'F:\\myProjects\\av\\esmini')) odrs = self.odrDic['0.3141592653589793'] odrs2 = [odrs[1], odrs[2]] newOdr = self.merger.merge2R2L(odrs2) extensions.view_road(newOdr, os.path.join('..', 'F:\\myProjects\\av\\esmini')) odrs = self.odrDic['0.3141592653589793'] odrs2 = [odrs[3], odrs[4]] newOdr = self.merger.merge2R2L(odrs2) extensions.view_road(newOdr, os.path.join('..', 'F:\\myProjects\\av\\esmini'))
def test_7WayJunctionsEQA(self): maxNumberOfRoadsPerJunction = 7 maxLanePerSide = 2 minLanePerSide = 0 for sl in range(5): path = self.configuration.get("harvested_straight_roads") intersection = self.builder.createWithRandomLaneConfigurations( path, sl, maxNumberOfRoadsPerJunction=maxNumberOfRoadsPerJunction, maxLanePerSide=maxLanePerSide, minLanePerSide=minLanePerSide, internalConnections=True, cp1=pyodrx.ContactPoint.end, internalLinkStrategy=LaneConfigurationStrategies.SPLIT_ANY, equalAngles=True, getAsOdr=False) odr = intersection.odr # xmlPath = f"output/test_createWithRandomLaneConfigurations-split-any-{maxNumberOfRoadsPerJunction}-{sl}.xodr" xmlPath = f"output/seed-{self.seed}-{maxNumberOfRoadsPerJunction}-way-{sl}.xodr" odr.write_xml(xmlPath) extensions.printRoadPositions(odr) isValid = self.validator.validateIncidentPoints( intersection, self.builder.minConnectionLength) # if isValid == False: # print(f"{sl} is an invalid intersection") plt = extensions.view_road( odr, os.path.join('..', self.configuration.get("esminipath")), returnPlt=True) if isValid == False: plt.title(f"Invalid - {xmlPath}") else: plt.title(f"Valid - {xmlPath}") plt.show() extensions.saveRoadImageFromFile( xmlPath, self.configuration.get("esminipath"))
odr.add_road(r) # create junction junction = pyodrx.Junction('test',1) con1 = pyodrx.Connection(0,1,pyodrx.ContactPoint.start) con1.add_lanelink(-1,-1) con2 = pyodrx.Connection(0,3,pyodrx.ContactPoint.start) con2.add_lanelink(-1,-1) con3 = pyodrx.Connection(0,5,pyodrx.ContactPoint.start) con3.add_lanelink(-1,-1) con4 = pyodrx.Connection(2,1,pyodrx.ContactPoint.end) con4.add_lanelink(1,1) con5 = pyodrx.Connection(4,3,pyodrx.ContactPoint.end) con5.add_lanelink(1,1) con6 = pyodrx.Connection(6,5,pyodrx.ContactPoint.end) con6.add_lanelink(1,1) junction.add_connection(con1) junction.add_connection(con2) junction.add_connection(con3) junction.add_connection(con4) junction.add_connection(con5) junction.add_connection(con6) # odr.create_junction() odr.add_junction(junction) odr.adjust_roads_and_lanes() # pyodrx.prettyprint(odr.get_element()) extensions.view_road(odr,os.path.join('..','F:\\myProjects\\av\\esmini'))