def test_simple_road():
    line1 = pyodrx.Line(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)

    lanes = pyodrx.Lanes()
    lanes.add_lanesection(lanesec)

    road = pyodrx.Road(1, planview, lanes)

    prettyprint(road.get_element())
def test_link_road():
    line1 = pyodrx.Line(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)

    lanes = pyodrx.Lanes()
    lanes.add_lanesection(lanesec)

    road = pyodrx.Road(1, planview, lanes)
    road.add_predecessor(pyodrx.ElementType.road, '1',
                         pyodrx.ContactPoint.start)
    prettyprint(road.get_element())
Example #3
0
lanesec_1 = xodr.LaneSection(0,centerlane_1)

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

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

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

road = xodr.Road(1,planview,lanes_1)


odr.add_road(road)


#---------------- Road 2

planview2 = xodr.PlanView(x_start = 0, y_start = 10,h_start=np.pi/2)
# planview2 = xodr.PlanView()

# create some geometries and add to the planview
planview2.add_geometry(xodr.Line(200))

# create a solid roadmark
rm = xodr.RoadMark(xodr.RoadMarkType.solid, 0.2)
Example #4
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
##6. Create left and right lanes
lane2 = xodr.Lane(a=3)
lane2.add_roadmark(rm)
lane3 = xodr.Lane(a=3)
lane3.add_roadmark(rm)

##7. Add lanes to lane section
lanesec.add_left_lane(lane2)
lanesec.add_right_lane(lane3)

##8. Add lane section to Lanes
lanes = xodr.Lanes()
lanes.add_lanesection(lanesec)

##9. Create Road from Planview and Lanes
road = xodr.Road(1, planview, lanes)

##10. Create the OpenDrive class (Master class)
odr = xodr.OpenDrive('myroad')

##11. Finally add roads to Opendrive
odr.add_road(road)

##12. Adjust initial positions of the roads looking at succ-pred logic
odr.adjust_roads_and_lanes()

##13. Print the .xodr file
prettyprint(odr.get_element())

# write the OpenDRIVE file as xodr using current script name
odr.write_xml(os.path.basename(__file__).replace('.py', '.xodr'))
Example #6
0
# create the lane links
lanelinker = xodr.LaneLinker()
lanelinker.add_link(predlane=lane0,succlane=lane2)
lanelinker.add_link(predlane=lane1,succlane=lane3)
lanelinker.add_link(predlane=lane2,succlane=lane5)
lanelinker.add_link(predlane=lane3,succlane=lane6)
lanelinker.add_link(predlane=lane4,succlane=lane7)

# create the lanes with the correct links
lanes = xodr.Lanes()
lanes.add_lanesection(lanesec1,lanelinker)
lanes.add_lanesection(lanesec2,lanelinker)
lanes.add_lanesection(lanesec3,lanelinker)

# create the road
roads.append(xodr.Road(0,planview,lanes))

# create the other roads
roads.append(xodr.create_road(xodr.Line(100),id =1,left_lanes=0,right_lanes=2))
roads.append(xodr.create_road(xodr.Line(100),id =2,left_lanes=0,right_lanes=1))
# create the junction roads
roads.append(xodr.create_road(xodr.Spiral(0.001,0.02,30),id =3,left_lanes=0,right_lanes=2,road_type=1))
roads.append(xodr.create_road(xodr.Spiral(-0.001,-0.02,30),id =4,left_lanes=0,right_lanes=1,road_type=1))

# add predecessors and succesors to the non junction roads
roads[0].add_successor(xodr.ElementType.junction,1)
roads[1].add_predecessor(xodr.ElementType.junction,1)
roads[2].add_predecessor(xodr.ElementType.junction,1)

# add connections to the first junction road
roads[3].add_predecessor(xodr.ElementType.road,0,xodr.ContactPoint.end)
Example #7
0
from scenariogeneration import xodr, xosc, esmini, prettyprint, ScenarioGenerator

planview = xodr.PlanView()

# add two geometries based on exact position
planview.add_fixed_geometry(xodr.Line(100), 0, 0, 0)
planview.add_fixed_geometry(xodr.Arc(0.01, length=100), 100, 0, 0)

# create simple lanes
lanes = xodr.Lanes()
lanesection1 = xodr.LaneSection(0, xodr.standard_lane())
lanesection1.add_left_lane(xodr.standard_lane(rm=xodr.STD_ROADMARK_SOLID))
lanesection1.add_right_lane(xodr.standard_lane(rm=xodr.STD_ROADMARK_SOLID))
lanes.add_lanesection(lanesection1)

road1 = xodr.Road(0, planview, lanes)

# create a simple second road for connection
road2 = xodr.create_road(xodr.Line(100), 1)

# connect the roads with successor/predecessor
road1.add_successor(xodr.ElementType.road, 1, xodr.ContactPoint.start)
road2.add_predecessor(xodr.ElementType.road, 0, xodr.ContactPoint.end)

odr = xodr.OpenDrive('my_road')
odr.add_road(road1)
odr.add_road(road2)

# will adjust the second road and the lanes and lane links correctly
odr.adjust_roads_and_lanes()
    lsec.add_right_lane(rightlanes[i])
    lsec.add_left_lane(leftlanes[i])
    lanesections.append(lsec)

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

# finally create the roads
roads = []
roadtypes = [-1, 1, -1, 1, -1, 1, -1]
for i in range(numberofroads):
    roads.append(xodr.Road(i, planviews[i], lanes[i], road_type=roadtypes[i]))

roads[0].add_successor(xodr.ElementType.junction, 1)

roads[1].add_predecessor(xodr.ElementType.road, 0, xodr.ContactPoint.end)
roads[1].add_successor(xodr.ElementType.road, 2, xodr.ContactPoint.start)

roads[2].add_predecessor(xodr.ElementType.junction, 1)

roads[3].add_predecessor(xodr.ElementType.road, 0, xodr.ContactPoint.end)
roads[3].add_successor(xodr.ElementType.road, 4, xodr.ContactPoint.start)

roads[4].add_predecessor(xodr.ElementType.junction, 1)

roads[5].add_predecessor(xodr.ElementType.road, 0, xodr.ContactPoint.end)
roads[5].add_successor(xodr.ElementType.road, 6, xodr.ContactPoint.start)