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())
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)
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'))
# 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)
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)