def test_object_roadside(): road = pyodrx.create_straight_road(0) odr = pyodrx.OpenDrive('myroad') odr.add_road(road) odr.adjust_roads_and_lanes() object1 = pyodrx.Object(s=0, t=0, dynamic=pyodrx.Dynamic.no, orientation=pyodrx.Orientation.positive, zOffset=0.00, height=1.0, Type=pyodrx.ObjectType.pole) road.add_object_roadside(object1, 50, tOffset=0.85) prettyprint(road.get_element())
def road(self, **kwargs): road = xodr.create_road([ xodr.Spiral(0.0000000001, kwargs['road_curvature'], 100), xodr.Arc(kwargs['road_curvature'], 50), xodr.Spiral(kwargs['road_curvature'], 0.0000000001, 100), xodr.Line(100) ], id=0, left_lanes=2, right_lanes=2) odr = xodr.OpenDrive('myroad') odr.add_road(road) odr.adjust_roads_and_lanes() return odr
def test_create_straight_road(data): road = pyodrx.generators.create_straight_road(data[0], length=data[1], junction=data[2], n_lanes=data[3], lane_offset=data[4]) odr = pyodrx.OpenDrive('myroad') odr.add_road(road) odr.adjust_roads_and_lanes() redict = road.get_attributes() assert int(redict['id']) == data[0] assert int(redict['length']) == data[1] assert int(redict['junction']) == data[2] assert len(road.lanes.lanesections[0].leftlanes) == data[3] assert len(road.lanes.lanesections[0].rightlanes) == data[3] assert road.lanes.lanesections[0].leftlanes[0].a == data[4] assert road.lanes.lanesections[0].leftlanes[0].b == 0 assert road.lanes.lanesections[0].leftlanes[0].c == 0 assert road.lanes.lanesections[0].leftlanes[0].d == 0
roads = [] numintersections = 4 # 3 or 4 angles = [] for i in range(numintersections): roads.append(xodr.create_straight_road(i)) # use this instead to change the number of lanes in the crossing #roads.append(xodr.generators.create_straight_road(i, length=100, junction=-1, n_lanes=2, lane_offset=3)) angles.append(i * 2 * np.pi / numintersections) # use this for a T-crossing instead # angles = [0,np.pi/2, 3*np.pi/2] print(roads) junc = xodr.create_junction_roads(roads, angles, 8) odr = xodr.OpenDrive('myroad') junction = xodr.create_junction(junc, 1, roads) odr.add_junction(junction) for r in roads: odr.add_road(r) for j in junc: odr.add_road(j) odr.adjust_roads_and_lanes() # write the OpenDRIVE file as xodr using current script name odr.write_xml(os.path.basename(__file__).replace('.py', '.xodr')) # uncomment the following lines to display the road using esmini #from scenariogeneration import 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