예제 #1
0
def test_roadmark():
    mark = pyodrx.RoadMark(pyodrx.RoadMarkType.solid, 0.2)
    pyodrx.prettyprint(mark.get_element())
    mark = pyodrx.RoadMark(pyodrx.RoadMarkType.solid, 0.2, 1, 1, 1,
                           pyodrx.MarkRule.no_passing,
                           pyodrx.RoadMarkColor.standard)
    pyodrx.prettyprint(mark.get_element())
 def __init__(self, country=CountryCodes.US):
     self.STD_ROADMARK = pyodrx.RoadMark(pyodrx.RoadMarkType.solid,
                                         0.2,
                                         rule=pyodrx.MarkRule.no_passing)
     self.STD_START_CLOTH = 1 / 1000000000
     self.country = country
     self.laneBuilder = LaneBuilder()
     pass
 def __init__(self, country=CountryCodes.US):
     self.STD_ROADMARK = pyodrx.RoadMark(pyodrx.RoadMarkType.solid,
                                         0.2,
                                         rule=pyodrx.MarkRule.no_passing)
     self.STD_START_CLOTH = 1 / 1000000000
     self.country = country
     self.laneBuilder = LaneBuilder()
     self.configuration = Configuration()
     self.name = 'StraightRoadBuilder'
     pass
예제 #4
0
# 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)

# create the first lanesection with three lanes
lanesec1 = pyodrx.LaneSection(0, centerlane)
lane1 = pyodrx.Lane(a=3)
lane1.add_roadmark(rm_dashed)

lane2 = pyodrx.Lane(a=3)
예제 #5
0
import os, sys
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)
예제 #6
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
예제 #7
0
# 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)
rm_dashed = pyodrx.RoadMark(pyodrx.RoadMarkType.broken,0.2)

# 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 three 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_dashed)

lane3 = pyodrx.Lane(a=3)
예제 #8
0
import pyodrx
import junctions
import extensions
import math
from junctions.LaneSides import LaneSides
from extensions.LaneOffset import LaneOffset
from junctions.TurnTypes import TurnTypes
from extensions.ExtendedLane import ExtendedLane
from junctions.LaneConfiguration import LaneConfigurationStrategies, LaneConfiguration
from extensions.ExtendedRoad import ExtendedRoad

from junctions.RoadLinker import RoadLinker

from library.Configuration import Configuration

STD_ROADMARK = pyodrx.RoadMark(pyodrx.RoadMarkType.solid, 0.2, rule=pyodrx.MarkRule.no_passing)
class LaneBuilder:


    def __init__(self):
        self.config = Configuration()
        self.defaultLaneWidth = self.config.get("default_lane_width")
        self.name = 'LaneBuilder'

    def getStandardLanes(self, n_lanes, lane_offset, laneSides=LaneSides.BOTH,
                            roadLength = None,
                            isLeftTurnLane=False,
                            isRightTurnLane=False,
                            isLeftMergeLane=False,
                            isRightMergeLane=False):
        """[summary] Don't allow both merge lanes and turn lanes in a road. Better split to two roads
예제 #9
0
##2. Create some geometries and add them to the planview
line1 = pyodrx.Line(100)
arc1 = pyodrx.Arc(0.05,angle=np.pi/2)
line2 = pyodrx.Line(100)
cloth1 = pyodrx.Spiral(0.05,-0.1,30)
line3 = pyodrx.Line(100)

planview.add_geometry(line1)
planview.add_geometry(arc1)
planview.add_geometry(line2)
planview.add_geometry(cloth1)
planview.add_geometry(line3)


##3. Create a solid roadmark
rm = pyodrx.RoadMark(pyodrx.RoadMarkType.solid,0.2)

##4. Create centerlane 
centerlane = pyodrx.Lane(a=2)
centerlane.add_roadmark(rm)

##5. Create lane section form the centerlane
lanesec = pyodrx.LaneSection(0,centerlane)

##6. Create left and right lanes
lane2 = pyodrx.Lane(a=3)
lane2.add_roadmark(rm)
lane3 = pyodrx.Lane(a=3)
lane3.add_roadmark(rm)

##7. Add lanes to lane section 
예제 #10
0
 def __init__(self):
     self.STD_ROADMARK = pyodrx.RoadMark(pyodrx.RoadMarkType.solid,
                                         0.2,
                                         rule=pyodrx.MarkRule.no_passing)
     self.STD_START_CLOTH = 1 / 1000000000
     pass