Esempio n. 1
0
    def createCurveByLength(self,
                            roadId,
                            length,
                            isJunction=False,
                            curvature=StandardCurvature.Medium.value):

        junction = self.getJunctionSelection(isJunction)

        n_lanes = 1
        lane_offset = 3

        pv = ExtendedPlanview()
        arc = pyodrx.Arc(curvature, length=length)
        pv.add_geometry(arc)

        # create lanes
        lsec = pyodrx.LaneSection(0, pyodrx.standard_lane())
        for _ in range(1, n_lanes + 1, 1):
            lsec.add_right_lane(pyodrx.standard_lane(lane_offset))
            lsec.add_left_lane(pyodrx.standard_lane(lane_offset))
        laneSections = extensions.LaneSections()
        laneSections.add_lanesection(lsec)

        # create road
        road = ExtendedRoad(roadId, pv, laneSections, road_type=junction)
        road.curveType = StandardCurveTypes.S
        return road
def test_lanesection():
    centerlane = pyodrx.Lane()
    ls = pyodrx.LaneSection(0, centerlane)
    pyodrx.prettyprint(ls.get_element())
    right_lane = pyodrx.Lane()
    ls.add_right_lane(right_lane)
    pyodrx.prettyprint(ls.get_element())
    left_lane = pyodrx.Lane(a=2)
    ls.add_left_lane(left_lane)
    pyodrx.prettyprint(ls.get_element())
Esempio n. 3
0
    def createParamPoly3(self,
                         roadId,
                         isJunction=False,
                         au=0,
                         bu=20,
                         cu=20,
                         du=10,
                         av=0,
                         bv=2,
                         cv=20,
                         dv=10,
                         prange='normalized',
                         length=None):

        junction = self.getJunctionSelection(isJunction)

        n_lanes = 1
        lane_offset = 3

        pv = ExtendedPlanview()

        poly = pyodrx.ParamPoly3(au, bu, cu, du, av, bv, cv, dv, prange,
                                 length)

        pv.add_geometry(poly)

        # create lanes
        lsec = pyodrx.LaneSection(0, pyodrx.standard_lane())
        for _ in range(1, n_lanes + 1, 1):
            lsec.add_right_lane(pyodrx.standard_lane(lane_offset))
            lsec.add_left_lane(pyodrx.standard_lane(lane_offset))
        laneSections = extensions.LaneSections()
        laneSections.add_lanesection(lsec)

        # create road
        road = ExtendedRoad(roadId, pv, laneSections, road_type=junction)
        road.curveType = StandardCurveTypes.S
        return road
Esempio n. 4
0
planview.add_geometry(pyodrx.Line(200))

# create two different roadmarkings
rm_solid = pyodrx.RoadMark(pyodrx.RoadMarkType.solid,
                           0.2,
                           rule=pyodrx.MarkRule.no_passing)
rm_dashed = pyodrx.RoadMark(pyodrx.RoadMarkType.broken,
                            0.2,
                            rule=pyodrx.MarkRule.no_passing)

# create a centerlane (same centerlane can be used since no linking is needed for this)
centerlane = pyodrx.Lane(a=2)
centerlane.add_roadmark(rm_solid)

# create the first lanesection with three lanes
lanesec1 = pyodrx.LaneSection(0, centerlane)
lane1 = pyodrx.Lane(a=3)
lane1.add_roadmark(rm_dashed)

lane2 = pyodrx.Lane(a=3)
lane2.add_roadmark(rm_dashed)

lane3 = pyodrx.Lane(a=3)
lane3.add_roadmark(rm_solid)

lanesec1.add_right_lane(lane1)
lanesec1.add_right_lane(lane2)
lanesec1.add_right_lane(lane3)

# create the second lanesection with one lane merging
lanesec2 = pyodrx.LaneSection(70, centerlane)
Esempio n. 5
0
# create lanes
rightlanes = []
leftlanes = []
for i in range(numberofroads):
    right = pyodrx.Lane(a=3)
    right.add_roadmark(rm)
    rightlanes.append(right)
    left = pyodrx.Lane(a=3)
    left.add_roadmark(rm)
    leftlanes.append(left)

# create lanesections
lanesections = []
for i in range(numberofroads):
    lsec = pyodrx.LaneSection(0,lanecenters[i])
    lsec.add_right_lane(rightlanes[i])
    lsec.add_left_lane(leftlanes[i])
    lanesections.append(lsec)

## create lanes
lanes = []
for l in lanesections:
    lanes1 = pyodrx.Lanes()
    lanes1.add_lanesection(l)
    lanes.append(lanes1)


# finally create the roads 
roads = []
roadtypes = [-1,1,-1,1,-1,1,-1]
line2 = pyodrx.Line(100)
planview.add_geometry(line2)

arc2 = pyodrx.Arc(-0.05,angle=np.pi/2)
planview.add_geometry(arc2)



# create a solid roadmark
rm = pyodrx.RoadMark(pyodrx.RoadMarkType.solid,0.2,rule=pyodrx.MarkRule.no_passing)

# create centerlane
centerlane = pyodrx.Lane(a=2)
centerlane.add_roadmark(rm)
lanesec = pyodrx.LaneSection(0,centerlane)


# add a driving lane
lane2 = pyodrx.Lane(a=3)
lane2.add_roadmark(rm)

lanesec.add_left_lane(lane2)

lane3 = pyodrx.Lane(a=3)
lane3.add_roadmark(rm)

lanesec.add_right_lane(lane3)

## finalize the road
lanes = pyodrx.Lanes()
Esempio n. 7
0
def test_create_lane_links_normalroad1(): 

    planview = []
    lanec = []
    lanel = []
    laner = []
    lanesec = []
    lanes = []

    rm = pyodrx.RoadMark(pyodrx.RoadMarkType.solid,0.2,rule=pyodrx.MarkRule.no_passing)

    geom= []
    geom.append(pyodrx.Line(50))
    geom.append(pyodrx.Arc(0.01,angle=np.pi/2))
    geom.append(pyodrx.Line(50))

    # create planviews
    for i in range(len(geom)):
        planview.append(pyodrx.PlanView())
        planview[i].add_geometry(geom[i])      
    # create centerlanes
    for i in range(len(geom)):
        lanec.append(pyodrx.Lane(a=3))
        lanel.append(pyodrx.Lane(a=3))
        laner.append(pyodrx.Lane(a=3))
    #add roadmarks 
    for i in range(len(geom)):
        lanec[i].add_roadmark(rm)
        lanel[i].add_roadmark(rm)
        laner[i].add_roadmark(rm)
    # create lanesections
    for i in range(len(geom)):
        lanesec.append(pyodrx.LaneSection(0,lanec[i]))
        lanesec[i].add_right_lane(lanel[i])
        lanesec[i].add_left_lane(laner[i])
    #create lanes 
    for i in range(len(geom)):
        lanes.append(pyodrx.Lanes())
        lanes[i].add_lanesection(lanesec[i])

    #create roads 
    road1 = pyodrx.Road(1,planview[0],lanes[0])
    road1.add_successor(pyodrx.ElementType.road,2, pyodrx.ContactPoint.start)
     
    road2 = pyodrx.Road(2,planview[1],lanes[1])
    road2.add_predecessor(pyodrx.ElementType.road,1, pyodrx.ContactPoint.end)
    road2.add_successor(pyodrx.ElementType.road,3, pyodrx.ContactPoint.start)
     
    road3 = pyodrx.Road(3,planview[2],lanes[2])
    road3.add_predecessor(pyodrx.ElementType.road,2, pyodrx.ContactPoint.end)
     
    # create the opendrive and add roads 
    odr = pyodrx.OpenDrive('myroad')
    odr.add_road(road1)
    odr.add_road(road2)
    odr.add_road(road3)

    odr.adjust_roads_and_lanes()
    
    assert road1.lanes.lanesections[0].rightlanes[0].links.get_predecessor_id()  == None
    assert int(road1.lanes.lanesections[0].rightlanes[0].links.get_successor_id() ) == -1
    assert road1.lanes.lanesections[0].leftlanes[0].links.get_predecessor_id() == None
    assert int(road1.lanes.lanesections[0].leftlanes[0].links.get_successor_id() ) == 1

    assert int(road2.lanes.lanesections[0].rightlanes[0].links.get_predecessor_id() ) == -1
    assert int(road2.lanes.lanesections[0].rightlanes[0].links.get_successor_id() ) == -1
    assert int(road2.lanes.lanesections[0].leftlanes[0].links.get_predecessor_id() ) == 1
    assert int(road2.lanes.lanesections[0].leftlanes[0].links.get_successor_id() ) == 1

    assert int(road3.lanes.lanesections[0].rightlanes[0].links.get_predecessor_id() ) == -1
    assert road3.lanes.lanesections[0].rightlanes[0].links.get_successor_id() == None
    assert int(road3.lanes.lanesections[0].leftlanes[0].links.get_predecessor_id() ) == 1
    assert road3.lanes.lanesections[0].leftlanes[0].links.get_successor_id() == None
Esempio n. 8
0
odr = pyodrx.OpenDrive('myroad')

#---------------- Road 1
planview = pyodrx.PlanView(0, 0, 0)

# create some geometries and add to the planview
planview.add_geometry(pyodrx.Line(100))

# create a solid roadmark
rm = pyodrx.RoadMark(pyodrx.RoadMarkType.solid, 0.2)

# create centerlane
centerlane_1 = pyodrx.Lane(a=2)
centerlane_1.add_roadmark(rm)
lanesec_1 = pyodrx.LaneSection(0, centerlane_1)

# add a driving lane
lane2_1 = pyodrx.Lane(a=3.1)
lane2_1.add_roadmark(rm)
lanesec_1.add_left_lane(lane2_1)

lane3_1 = pyodrx.Lane(a=3.1)
lane3_1.add_roadmark(rm)
lanesec_1.add_right_lane(lane3_1)

## finalize the road
lanes_1 = pyodrx.Lanes()
lanes_1.add_lanesection(lanesec_1)

road = pyodrx.Road(1, planview, lanes_1)
Esempio n. 9
0
line2 = pyodrx.Line(100)
arc2 = pyodrx.Arc(-0.05, angle=3 * np.pi / 4)

cloth = pyodrx.Spiral(0.001, 0.009, 100)

planview = pyodrx.PlanView()

planview.add_geometry(line1)

rm = pyodrx.RoadMark(pyodrx.RoadMarkType.solid,
                     0.2,
                     rule=pyodrx.MarkRule.no_passing)

lane1 = pyodrx.Lane(a=2)
lane1.add_roadmark(rm)
lanesec = pyodrx.LaneSection(0, lane1)

lane2 = pyodrx.Lane(a=4)
lane2.add_roadmark(rm)
lane3 = pyodrx.Lane(a=3)
lane3.add_roadmark(rm)
lane4 = pyodrx.Lane(a=3)
lane4.add_roadmark(rm)
lane5 = pyodrx.Lane(a=3)
lane5.add_roadmark(rm)

lanesec.add_left_lane(lane2)
lanesec.add_left_lane(lane3)
lanesec.add_right_lane(lane4)
lanesec.add_right_lane(lane5)
Esempio n. 10
0
def test_lanes():
    centerlane = pyodrx.Lane()
    ls = pyodrx.LaneSection(0, centerlane)
    lanes = pyodrx.Lanes()
    lanes.add_lanesection(ls)
    pyodrx.prettyprint(lanes.get_element())
Esempio n. 11
0
    def createS(self,
                connectionRoadId,
                angleBetweenEndpoints,
                isJunction=False,
                curvature=StandardCurvature.Medium.value):
        """Here the angleBetweenEndpoints are used for the first road and S mid point, and S mid point and Second road

        Args:
            connectionRoadId ([type]): [description]
            angleBetweenEndpoints ([type]): used for the first road and S mid point, and S mid point and Second road. Use negative angles for interesting Ss
            isJunction (bool, optional): [description]. Defaults to False.
            curvature ([type], optional): [description]. Defaults to StandardCurvature.Medium.value.

        Returns:
            [type]: [description]
        """

        junction = self.getJunctionSelection(isJunction)

        totalRotation = np.pi - angleBetweenEndpoints

        # most of the angleBetweenEndpoints should be assigned to the Arc
        arcAngle = totalRotation * 0.9
        clothAngle = (totalRotation * 0.1) / 2  # curve more.

        arc_curv = curvature
        arc_angle = arcAngle
        cloth_angle = clothAngle
        r_id = connectionRoadId
        cloth_start = self.STD_START_CLOTH
        n_lanes = 1
        lane_offset = 3

        pv = ExtendedPlanview()
        # adjust sign if angle is negative
        if cloth_angle < 0 and arc_curv > 0:

            cloth_angle = -cloth_angle
            arc_curv = -arc_curv
            cloth_start = -cloth_start
            arc_angle = -arc_angle

        # we are changing the second half of the S to have different arc angle and curvature.
        multiplier = np.random.choice(9) / 10
        arc_angle2 = arc_angle - arc_angle * multiplier
        arc_curv2 = -(arc_curv + arc_curv * multiplier
                      )  # the angle needs to be opposite for the second half.

        # create geometries
        spiral1 = extensions.ExtendedSpiral(cloth_start,
                                            arc_curv,
                                            angle=cloth_angle)
        arc = pyodrx.Arc(arc_curv, angle=arc_angle)
        arc2 = pyodrx.Arc(arc_curv2, angle=-arc_angle2)
        spiral2 = extensions.ExtendedSpiral(-arc_curv,
                                            cloth_start,
                                            angle=-cloth_angle)

        pv.add_geometry(spiral1)
        pv.add_geometry(arc)
        pv.add_geometry(arc2)
        pv.add_geometry(spiral2)

        # create lanes
        lsec = pyodrx.LaneSection(0, pyodrx.standard_lane())
        for _ in range(1, n_lanes + 1, 1):
            lsec.add_right_lane(pyodrx.standard_lane(lane_offset))
            lsec.add_left_lane(pyodrx.standard_lane(lane_offset))
        laneSections = extensions.LaneSections()
        laneSections.add_lanesection(lsec)

        # create road
        road = ExtendedRoad(r_id, pv, laneSections, road_type=junction)
        road.curveType = StandardCurveTypes.S
        return road
Esempio n. 12
0
planview.add_geometry(pyodrx.Line(500))

# create two different roadmarkings
rm_solid = pyodrx.RoadMark(pyodrx.RoadMarkType.solid,
                           0.2,
                           rule=pyodrx.MarkRule.no_passing)
rm_dashed = pyodrx.RoadMark(pyodrx.RoadMarkType.broken,
                            0.2,
                            rule=pyodrx.MarkRule.no_passing)

# create a centerlane (same centerlane can be used since no linking is needed for this)
centerlane = pyodrx.Lane(a=2)
centerlane.add_roadmark(rm_solid)

# create the first lanesection with two lanes
lanesec1 = pyodrx.LaneSection(0, centerlane)
lane1 = pyodrx.Lane(a=3)
lane1.add_roadmark(rm_dashed)

lane2 = pyodrx.Lane(a=3)
lane2.add_roadmark(rm_solid)

lanesec1.add_right_lane(lane1)
lanesec1.add_right_lane(lane2)

# create the second lanesection with one lane merging
lanesec2 = pyodrx.LaneSection(250, centerlane)
lane3 = pyodrx.Lane(a=3)
lane3.add_roadmark(rm_dashed)

lane4 = pyodrx.Lane(a=3, b=-0.1)