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())
Esempio n. 2
0
    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
Esempio n. 5
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