def cloneRoadWithGeoLanesAndType(self, road, newId): """These items are referenced from the original road planview, lanes These items are not referenced (needs to be rebuilt) name, rule, links, successors, predecessors, adjusted Args: road ([type]): [description] newId ([type]): [description] """ newRoad = pyodrx.Road(newId, road.planview, road.lanes, road.road_type) return newRoad
lanelinker = pyodrx.LaneLinker() lanelinker.add_link(predlane=lane1, succlane=lane4) lanelinker.add_link(predlane=lane2, succlane=lane5) lanelinker.add_link(predlane=lane3, succlane=lane6) lanelinker.add_link(predlane=lane5, succlane=lane7) lanelinker.add_link(predlane=lane6, succlane=lane8) # create the lanes with the correct links lanes = pyodrx.Lanes() lanes.add_lanesection(lanesec1, lanelinker) lanes.add_lanesection(lanesec2, lanelinker) lanes.add_lanesection(lanesec3, lanelinker) # create the road roads.append(pyodrx.Road(2, planview, lanes)) # create junction roads roads.append( pyodrx.create_road(pyodrx.Spiral(0.001, 0.02, 30), id=3, left_lanes=0, right_lanes=2, road_type=1)) roads.append( pyodrx.create_road(pyodrx.Spiral(-0.001, -0.02, 30), id=4, left_lanes=0, right_lanes=1, road_type=1))
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] for i in range(numberofroads): roads.append(pyodrx.Road(i,planviews[i],lanes[i],road_type=roadtypes[i])) 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) roads[3].add_predecessor(pyodrx.ElementType.road,0,pyodrx.ContactPoint.end) roads[3].add_successor(pyodrx.ElementType.road,4,pyodrx.ContactPoint.start) roads[4].add_predecessor(pyodrx.ElementType.junction,1) roads[5].add_predecessor(pyodrx.ElementType.road,0,pyodrx.ContactPoint.end) roads[5].add_successor(pyodrx.ElementType.road,6,pyodrx.ContactPoint.start)
# 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() lanes.add_lanesection(lanesec) road = pyodrx.Road(1,planview,lanes) odr = pyodrx.OpenDrive('myroad') odr.add_road(road) odr.adjust_roads_and_lanes() pyodrx.prettyprint(odr.get_element()) pyodrx.run_road(odr,os.path.join('..','pyoscx','esmini'))
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
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) odr.add_road(road) #---------------- Road 2 planview2 = pyodrx.PlanView(x_start=0, y_start=10, h_start=np.pi / 2) # planview2 = pyodrx.PlanView() # create some geometries and add to the planview planview2.add_geometry(pyodrx.Line(200)) # create a solid roadmark rm = pyodrx.RoadMark(pyodrx.RoadMarkType.solid, 0.2) # create centerlane
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) laneSections = LaneSections() laneSections.add_lanesection(lanesec) road = pyodrx.Road(1, planview, laneSections) odr = pyodrx.OpenDrive('myroad') odr.add_road(road) odr.adjust_roads_and_lanes() extensions.view_road( odr, os.path.join('..', 'C:\\Users\\ishaa\\Downloads\\roadGen\\esmini-master')) extensions.simulate_road( odr, os.path.join('..', 'C:\\Users\\ishaa\\Downloads\\roadGen\\esmini-master'))