def createPVForLine(self, length): line1 = pyodrx.Line(length) # create planviews pv = extensions.ExtendedPlanview() pv.add_geometry(line1) return pv
def test_line_calc(data, expdata): line = pyodrx.Line(data[0]) x, y, h, l = line.get_end_data(data[1], data[2], data[3]) assert pytest.approx(x, 0.000001) == expdata[0] assert pytest.approx(y, 0.000001) == expdata[1] assert pytest.approx(h, 0.000001) == expdata[2] assert pytest.approx(l, 0.000001) == data[0]
def test_inverted_Line(data): line = pyodrx.Line(data[0]) end_x, end_y, end_h, end_l = line.get_end_data(data[1], data[2], data[3]) end_h += np.pi start_x, start_y, start_h, start_l = line.get_start_data( end_x, end_y, end_h) start_h -= np.pi assert pytest.approx(start_x, 0.000001) == data[1] assert pytest.approx(start_y, 0.000001) == data[2] assert pytest.approx(start_h, 0.1) == data[3]
import pyodrx import os # create some roads roads = [] # create two simple roads to merge roads.append( pyodrx.create_road(pyodrx.Line(100), id=0, left_lanes=0, right_lanes=2)) roads.append( pyodrx.create_road(pyodrx.Line(100), id=1, left_lanes=0, right_lanes=1)) # manually create the final road # create the planview and the geometry planview = pyodrx.PlanView() 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)
print( f"current working dir: {os.getcwd()}") # exec(open("./fixCWD.py").read()) sys.path.append(os.path.abspath('../pyodrx')) import pyodrx import numpy as np import extensions rm = pyodrx.RoadMark(pyodrx.RoadMarkType.solid,0.2,rule=pyodrx.MarkRule.no_passing) # create geometries geoms = [] geoms.append(pyodrx.Line(100)) geoms.append(pyodrx.Spiral(0.001,0.019,30)) geoms.append(pyodrx.Line(100)) geoms.append(pyodrx.Spiral(-0.001,-0.1,30)) geoms.append(pyodrx.Line(100)) geoms.append(pyodrx.Line(20)) geoms.append(pyodrx.Line(100)) numberofroads = len(geoms) # create planviews planviews = [] for g in geoms: pv = pyodrx.PlanView() pv.add_geometry(g) planviews.append(pv)
import pyodrx import numpy as np import os planview = pyodrx.PlanView() # create some geometries and add to the planview line1 = pyodrx.Line(100) planview.add_geometry(line1) arc1 = pyodrx.Arc(0.05,angle=np.pi/2) planview.add_geometry(arc1) 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)
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
import pyodrx import os # create some simple roads roads= [] # start road roads.append(pyodrx.create_road([pyodrx.Spiral(-0.004,0.00001,100), pyodrx.Spiral(0.00001,0.005,50), pyodrx.Arc(0.005,50)],id =0,left_lanes=3,right_lanes=4)) # intermittent road roads.append(pyodrx.create_road([pyodrx.Spiral(0.0001,0.003,65), pyodrx.Spiral(0.003,0.00001,50) ],id =1,left_lanes=3,right_lanes=3)) #exit road roads.append(pyodrx.create_road(pyodrx.Line(50),id =2,left_lanes=0,right_lanes=1)) # junctions for exit roads.append(pyodrx.create_road(pyodrx.Spiral(0.005,0.0001,50),id =3,left_lanes=3,right_lanes=3,road_type=1)) # continue roads.append(pyodrx.create_road(pyodrx.Spiral(0.005,-0.02,100),id =4,left_lanes=0,right_lanes=1,road_type=1)) # exit # final road roads.append(pyodrx.create_road([pyodrx.Spiral(-0.00001,-0.003,45),pyodrx.Arc(-0.003,60)],id =5,left_lanes=2,right_lanes=3)) # entry junction roads.append(pyodrx.create_road([pyodrx.Line(30) ],id =6,left_lanes=2,right_lanes=3,road_type=2)) # continue roads.append(pyodrx.create_road([pyodrx.Spiral(0.004,0.000001,50) ],id =7,left_lanes=1,right_lanes=0,road_type=2)) # entry # entry road roads.append(pyodrx.create_road(pyodrx.Arc(0.004,60),id =8,left_lanes=1,right_lanes=0)) # add predecessors and succesors to the non junction roads roads[0].add_successor(pyodrx.ElementType.junction,1) roads[1].add_predecessor(pyodrx.ElementType.junction,1)
import pyodrx import numpy as np import os 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()
import pyodrx import os # create some roads roads = [] roads.append( pyodrx.create_road(pyodrx.Line(100), id=0, left_lanes=1, right_lanes=2)) roads.append( pyodrx.create_road(pyodrx.Line(100), id=1, left_lanes=0, right_lanes=1)) roads.append( pyodrx.create_road(pyodrx.Line(100), id=2, left_lanes=1, right_lanes=3)) roads.append( pyodrx.create_road(pyodrx.Spiral(0.001, 0.02, 30), id=3, left_lanes=1, 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)) # add some connections to non junction roads roads[0].add_successor(pyodrx.ElementType.junction, 1) roads[1].add_successor(pyodrx.ElementType.junction, 1) roads[2].add_predecessor(pyodrx.ElementType.junction, 1) # add connections to the first connecting road
import pyodrx import os # create some simple roads roads= [] roads.append(pyodrx.create_road(pyodrx.Line(100),id =0,left_lanes=0,right_lanes=2)) roads.append(pyodrx.create_road(pyodrx.Line(100),id =1,left_lanes=0,right_lanes=1)) roads.append(pyodrx.create_road(pyodrx.Line(100),id =2,left_lanes=0,right_lanes=1)) roads.append(pyodrx.create_road(pyodrx.Spiral(0.001,0.02,30),id =3,left_lanes=0,right_lanes=1,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)) # add predecessors and succesors to the non junction roads roads[0].add_successor(pyodrx.ElementType.junction,1) roads[1].add_predecessor(pyodrx.ElementType.junction,1) roads[2].add_predecessor(pyodrx.ElementType.junction,1) # add connections to the first junction road roads[3].add_predecessor(pyodrx.ElementType.road,0,pyodrx.ContactPoint.end) roads[3].add_successor(pyodrx.ElementType.road,1,pyodrx.ContactPoint.start) # add connections to the second junction road, together with an offset roads[4].add_predecessor(pyodrx.ElementType.road,0,pyodrx.ContactPoint.end,lane_offset=-1) roads[4].add_successor(pyodrx.ElementType.road,2,pyodrx.ContactPoint.start) # create the junction struct junction = pyodrx.create_junction(roads[3:],1,roads[0:3]) # create the opendrive odr = pyodrx.OpenDrive('myroad') for r in roads: odr.add_road(r)
import pyodrx import os # create the planview and the geometry planview = pyodrx.PlanView() 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)
def test_line(): line = pyodrx.Line(1) p = line.get_element() pyodrx.prettyprint(p)
def test_geometry(): geom = pyodrx.geometry._Geometry(1, 2, 3, 4, pyodrx.Line(1)) p = geom.get_element() pyodrx.prettyprint(p)
], id=0, left_lanes=3, right_lanes=4)) # intermittent road roads.append( pyodrx.create_road( [pyodrx.Spiral(0.0001, 0.003, 65), pyodrx.Spiral(0.003, 0.00001, 50)], id=1, left_lanes=3, right_lanes=3)) #exit road roads.append( pyodrx.create_road(pyodrx.Line(50), id=2, left_lanes=0, right_lanes=1)) # junctions for exit roads.append( pyodrx.create_road(pyodrx.Spiral(0.005, 0.0001, 50), id=3, left_lanes=3, right_lanes=3, road_type=1)) # continue roads.append( pyodrx.create_road(pyodrx.Spiral(0.005, -0.02, 100), id=4, left_lanes=0, right_lanes=1, road_type=1)) # exit # final road