Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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")))
Ejemplo n.º 3
0
    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'))
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    def getConnectionRoadBetween(self,
                                 newRoadId,
                                 road1,
                                 road2,
                                 cp1=pyodrx.ContactPoint.end,
                                 cp2=pyodrx.ContactPoint.start,
                                 isJunction=True):
        """ Works only after roads has been adjusted.
        For now we will create a straight road which connects the reference lines of the roads, starts at second road and ends that the first.

        Args:
            road1 ([type]): first road
            road2 ([type]): second road
            cp1 ([type], optional): [description]. Defaults to pyodrx.ContactPoint.end. end for the roads which have end points in a junction
            cp2 ([type], optional): [description]. Defaults to pyodrx.ContactPoint.start. start for the roads which have start points in a junction
        """
        junction = self.getJunctionSelection(isJunction)

        x1, y1, h1 = road1.getPosition(cp1)
        x2, y2, h2 = road2.getPosition(cp2)

        newRoadLength = math.sqrt((x1 - x2)**2 + (y1 - y2)**2)

        # fix heading.
        newConnection = pyodrx.create_straight_road(newRoadId,
                                                    newRoadLength,
                                                    junction=junction)

        return newConnection
Ejemplo n.º 6
0
    def random2ways2Lanes(self, angleBetweenRoads):
        # print( f"random2ways2Lanes: creating a road network for angle: {math.degrees(angleBetweenRoads)}")
        roads = []
        roads.append(pyodrx.create_straight_road(0, length=self.straightRoadLen)) # cannot reuse roads due to some references to links cannot be reinitialized with pyodrx lib.
        roads.append(self.createRandomConnectionConnectionRoad(1, angleBetweenRoads))
        roads.append(pyodrx.create_straight_road(2, length=self.straightRoadLen))

        self.link3RoadsWithMidAsJunction(roads)
        junction = self.create2RoadJunction(roads)

        self.lastId += 1

        odrName = 'R2_L2_' + str(self.lastId)
        odr = self.createOdr(odrName, roads, [junction])

        return odr
    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)
Ejemplo n.º 8
0
def test_repeated_object():
    object1 = pyodrx.Object(s=10.0,
                            t=-2,
                            dynamic=pyodrx.Dynamic.no,
                            orientation=pyodrx.Orientation.positive,
                            zOffset=0.00,
                            height=1.0,
                            Type=pyodrx.ObjectType.pole)
    object1.repeat(100, 50)
    road = pyodrx.create_straight_road(0)
    road.add_object(object1)
    pyodrx.prettyprint(road.get_element())
Ejemplo n.º 9
0
    def createRandomConnectionConnectionRoad(self, connectionRoadId, angleBetweenRoads):
        """The magic connectionRoad

        Args:
            angleBetweenRoads ([type]): The angle between the roads which this connectionRoad is suppose to connect together
            connectionRoadId ([type]): id to be assigned to the new connection road.
        """

        if angleBetweenRoads > 3.05: # when it's greater than 174 degrees, create a straight road
            return pyodrx.create_straight_road(connectionRoadId, length=self.straightRoadLen, junction=1)

        connectionRoad = self.roadBuilder.createRandomCurve(connectionRoadId, angleBetweenRoads, isJunction=True)
        return connectionRoad
Ejemplo n.º 10
0
def test_object_roadside():
    road = pyodrx.create_straight_road(0)
    odr = pyodrx.OpenDrive('myroad')
    odr.add_road(road)
    odr.adjust_roads_and_lanes()
    object1 = pyodrx.Object(s=0,
                            t=0,
                            dynamic=pyodrx.Dynamic.no,
                            orientation=pyodrx.Orientation.positive,
                            zOffset=0.00,
                            height=1.0,
                            Type=pyodrx.ObjectType.pole)
    road.add_object_roadside(object1, 50, tOffset=0.85)
    pyodrx.prettyprint(road.get_element())
Ejemplo n.º 11
0
def test_object():
    object1 = pyodrx.Object(s=10.0,
                            t=-2,
                            dynamic=pyodrx.Dynamic.no,
                            orientation=pyodrx.Orientation.positive,
                            zOffset=0.00,
                            id="1",
                            height=1.0,
                            Type=pyodrx.ObjectType.pole)

    #same chosen ID should cause warning and be resolved automatically
    object2 = pyodrx.Object(s=20.0,
                            t=-2,
                            dynamic=pyodrx.Dynamic.no,
                            orientation=pyodrx.Orientation.positive,
                            zOffset=0.00,
                            height=10,
                            id="1",
                            Type=pyodrx.ObjectType.streetLamp)

    road = pyodrx.create_straight_road(0)
    road.add_object([object1, object2])
    pyodrx.prettyprint(road.get_element())
Ejemplo n.º 12
0
def test_signal():
    signal1 = pyodrx.Signal(s=10.0,
                            t=-2,
                            dynamic=pyodrx.Dynamic.no,
                            orientation=pyodrx.Orientation.positive,
                            zOffset=0.00,
                            country="US",
                            Type="R1",
                            subtype="1")

    signal2 = pyodrx.Signal(s=20.0,
                            t=-2,
                            dynamic=pyodrx.Dynamic.no,
                            orientation=pyodrx.Orientation.positive,
                            country="DEU",
                            Type="274",
                            subtype="120",
                            value=120,
                            unit="km/h")

    road = pyodrx.create_straight_road(0)
    road.add_signal(signal1)
    road.add_signal(signal2)
    pyodrx.prettyprint(road.get_element())
Ejemplo n.º 13
0
    def test_getConnectionRoadBetween(self):
        # test scenario for connection road

        roads = []
        roads.append(pyodrx.create_straight_road(0, 10))
        roads.append(
            self.roadBuilder.curveBuilder.createSimple(1,
                                                       np.pi / 4,
                                                       True,
                                                       curvature=0.2))
        roads.append(pyodrx.create_straight_road(2, 10))
        roads.append(
            self.roadBuilder.curveBuilder.createSimple(3,
                                                       np.pi / 3,
                                                       True,
                                                       curvature=0.2))
        roads.append(pyodrx.create_straight_road(4, 10))
        roads.append(
            self.roadBuilder.curveBuilder.createSimple(5,
                                                       np.pi / 2,
                                                       True,
                                                       curvature=0.2))
        roads.append(pyodrx.create_straight_road(6, 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)
        roads[2].add_successor(pyodrx.ElementType.junction, 3)

        roads[3].add_predecessor(pyodrx.ElementType.road, 2,
                                 pyodrx.ContactPoint.start)
        roads[3].add_successor(pyodrx.ElementType.road, 4,
                               pyodrx.ContactPoint.start)

        roads[4].add_predecessor(pyodrx.ElementType.junction, 3)
        roads[4].add_successor(pyodrx.ElementType.junction, 5)

        roads[5].add_predecessor(pyodrx.ElementType.road, 4,
                                 pyodrx.ContactPoint.start)
        roads[5].add_successor(pyodrx.ElementType.road, 6,
                               pyodrx.ContactPoint.start)

        roads[6].add_predecessor(pyodrx.ElementType.junction, 5)

        junction = self.junctionBuilder.createJunctionForASeriesOfRoads(roads)

        odrName = "test_connectionRoad"
        odr = extensions.createOdr(odrName, roads, [junction])

        lastConnection = self.harvester.junctionBuilder.createLastConnectionForLastAndFirstRoad(
            7, roads, junction, cp1=pyodrx.ContactPoint.start)
        roads.append(lastConnection)
        odr.add_road(lastConnection)

        # randConnection = self.harvester.junctionBuilder.createConnectionFor2Roads(8, roads[0], roads[4], junction, cp1=pyodrx.ContactPoint.start)
        # roads.append(randConnection)
        # odr.add_road(randConnection)

        # randConnection2 = self.harvester.junctionBuilder.createConnectionFor2Roads(9, roads[2], roads[6], junction, cp1=pyodrx.ContactPoint.start)
        # roads.append(randConnection2)
        # odr.add_road(randConnection2)

        # odr.reset()
        # odr.add_road(lastConnection)
        # odr.adjust_roads_and_lanes()

        odr.resetAndReadjust()

        # pyodrx.prettyprint(odr.get_element())

        odr.write_xml(f"output/test_connectionRoad.xodr")

        # extensions.printRoadPositions(odr)

        extensions.view_road(
            odr, os.path.join('..', self.configuration.get("esminipath")))
        pass
Ejemplo n.º 14
0
    def test_AdjustStartPointsForAnyRoadCombinations(self):
        # test scenario for connection road

        roads = []
        roads.append(pyodrx.create_straight_road(0, 10))
        roads.append(
            self.roadBuilder.curveBuilder.createSimpleCurveWithLongArc(
                1, np.pi / 4, False, curvature=0.2))
        roads.append(pyodrx.create_straight_road(2, 10))
        roads.append(
            self.roadBuilder.curveBuilder.createSimpleCurveWithLongArc(
                3, np.pi / 3, True, curvature=0.2))
        roads.append(pyodrx.create_straight_road(4, 10))
        roads.append(
            self.roadBuilder.curveBuilder.createSimpleCurveWithLongArc(
                5, np.pi / 2, True, curvature=0.2))
        roads.append(pyodrx.create_straight_road(6, 10))

        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_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.road, 1,
                                 pyodrx.ContactPoint.end)
        roads[2].add_successor(pyodrx.ElementType.junction, 3)

        roads[3].add_predecessor(pyodrx.ElementType.road, 2,
                                 pyodrx.ContactPoint.start)
        roads[3].add_successor(pyodrx.ElementType.road, 4,
                               pyodrx.ContactPoint.start)

        roads[4].add_predecessor(pyodrx.ElementType.junction, 3)
        roads[4].add_successor(pyodrx.ElementType.junction, 5)

        roads[5].add_predecessor(pyodrx.ElementType.road, 4,
                                 pyodrx.ContactPoint.start)
        roads[5].add_successor(pyodrx.ElementType.road, 6,
                               pyodrx.ContactPoint.start)

        roads[6].add_predecessor(pyodrx.ElementType.junction, 5)

        junction = self.junctionBuilder.createJunctionForASeriesOfRoads(roads)

        odrName = "test_connectionRoad"
        odr = extensions.createOdr(odrName, roads, [junction])

        lastConnection = self.harvester.junctionBuilder.createLastConnectionForLastAndFirstRoad(
            7, roads, junction, cp1=pyodrx.ContactPoint.start)
        roads.append(lastConnection)
        odr.add_road(lastConnection)

        # randConnection = self.harvester.junctionBuilder.createConnectionFor2Roads(8, roads[0], roads[4], junction, cp1=pyodrx.ContactPoint.start)
        # roads.append(randConnection)
        # odr.add_road(randConnection)

        # randConnection2 = self.harvester.junctionBuilder.createConnectionFor2Roads(9, roads[2], roads[6], junction, cp1=pyodrx.ContactPoint.start)
        # roads.append(randConnection2)
        # odr.add_road(randConnection2)

        odr.resetAndReadjust()

        extensions.printRoadPositions(odr)

        extensions.view_road(
            odr, os.path.join('..', self.configuration.get("esminipath")))
        pass
Ejemplo n.º 15
0
roads = []
incoming_roads = 4
angles = []
for i in range(incoming_roads):
    signal1 = pyodrx.Signal(s=10.0,
                            t=2,
                            dynamic="no",
                            orientation="+",
                            zOffset=0.00,
                            country="US",
                            Type="R1",
                            subtype="1",
                            value=0.00)
    signals = pyodrx.Signals()
    signals.add_signal(signal1)
    roads.append(pyodrx.create_straight_road(i, signals=signals))
    # use this instead to change the number of lanes in the crossing
    # roads.append(pyodrx.generators.create_straight_road(i, length=100, junction=-1, n_lanes=2, lane_offset=3))
    angles.append(i * 2 * np.pi / incoming_roads)

# use this for a T-crossing instead
# angles = [0,np.pi/2, 3*np.pi/2]

print(roads)
junc = pyodrx.create_junction_roads(roads, angles, 8)
odr = pyodrx.OpenDrive('myroad')
junction = pyodrx.create_junction(junc, 1, roads)

odr.add_junction(junction)
for r in roads:
    odr.add_road(r)
Ejemplo n.º 16
0
import numpy as np
import os

import pyodrx



    
roads = []
numintersections = 4 # 3 or 4
angles = []
for i in range(numintersections):
    roads.append(pyodrx.create_straight_road(i))
    # use this instead to change the number of lanes in the crossing 
    #roads.append(pyodrx.generators.create_straight_road(i, length=100, junction=-1, n_lanes=2, lane_offset=3))
    angles.append(i * 2*np.pi/numintersections)

# use this for a T-crossing instead
# angles = [0,np.pi/2, 3*np.pi/2]

print(roads)
junc = pyodrx.create_junction_roads(roads,angles,8)

odr = pyodrx.OpenDrive('myroad')
junction = pyodrx.create_junction(junc,1,roads)

odr.add_junction(junction)
for r in roads:
    odr.add_road(r)
for j in junc:
    odr.add_road(j)