Skip to content

Commit d3c9801

Browse files
authored
Make create_lane_links_from_ids() work for junctions
1 parent 2320db9 commit d3c9801

File tree

1 file changed

+38
-39
lines changed

1 file changed

+38
-39
lines changed

scenariogeneration/xodr/links.py

Lines changed: 38 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -689,45 +689,40 @@ def create_lane_links_from_ids(road1, road2, road1_lane_ids, road2_lane_ids):
689689
if (0 in road1_lane_ids) or (0 in road2_lane_ids):
690690
raise ValueError("The center lane (ID 0) should not be linked.")
691691

692-
if road1.road_type == -1 and road2.road_type == -1:
693-
first_linktype, _, first_connecting_lanesec = _get_related_lanesection(
694-
road1, road2
695-
)
696-
second_linktype, _, second_connecting_lanesec = _get_related_lanesection(
697-
road2, road1
698-
)
699-
700-
# The road links need to be reciprocal for the lane linking to succeed
701-
if first_linktype == None or second_linktype == None:
702-
raise ValueError(
703-
"Unable to create lane links for road with ID "
704-
+ str(road1.id)
705-
+ " and road with ID "
706-
+ str(road2.id)
707-
+ " due to non reciprocal road successor/predecessor links."
708-
)
709-
710-
for i in range(len(road1_lane_ids)):
711-
if road1_lane_ids[i] > 0:
712-
road1.lanes.lanesections[first_connecting_lanesec].leftlanes[
713-
road1_lane_ids[i] - 1
714-
].add_link(first_linktype, road2_lane_ids[i])
715-
else:
716-
road1.lanes.lanesections[first_connecting_lanesec].rightlanes[
717-
abs(road1_lane_ids[i]) - 1
718-
].add_link(first_linktype, road2_lane_ids[i])
719-
if road2_lane_ids[i] > 0:
720-
road2.lanes.lanesections[second_connecting_lanesec].leftlanes[
721-
road2_lane_ids[i] - 1
722-
].add_link(second_linktype, road1_lane_ids[i])
723-
else:
724-
road2.lanes.lanesections[second_connecting_lanesec].rightlanes[
725-
abs(road2_lane_ids[i]) - 1
726-
].add_link(second_linktype, road1_lane_ids[i])
727-
else:
728-
raise NotImplementedError(
729-
"This API currently does not support linking with junction connecting roads."
730-
)
692+
first_linktype, _, first_connecting_lanesec = _get_related_lanesection(
693+
road1, road2
694+
)
695+
second_linktype, _, second_connecting_lanesec = _get_related_lanesection(
696+
road2, road1
697+
)
698+
699+
# The road links need to be reciprocal for the lane linking to succeed
700+
if first_linktype == None or second_linktype == None:
701+
raise ValueError(
702+
"Unable to create lane links for road with ID "
703+
+ str(road1.id)
704+
+ " and road with ID "
705+
+ str(road2.id)
706+
+ " due to non reciprocal road successor/predecessor links."
707+
)
708+
709+
for i in range(len(road1_lane_ids)):
710+
if road1_lane_ids[i] > 0:
711+
road1.lanes.lanesections[first_connecting_lanesec].leftlanes[
712+
road1_lane_ids[i] - 1
713+
].add_link(first_linktype, road2_lane_ids[i])
714+
else:
715+
road1.lanes.lanesections[first_connecting_lanesec].rightlanes[
716+
abs(road1_lane_ids[i]) - 1
717+
].add_link(first_linktype, road2_lane_ids[i])
718+
if road2_lane_ids[i] > 0:
719+
road2.lanes.lanesections[second_connecting_lanesec].leftlanes[
720+
road2_lane_ids[i] - 1
721+
].add_link(second_linktype, road1_lane_ids[i])
722+
else:
723+
road2.lanes.lanesections[second_connecting_lanesec].rightlanes[
724+
abs(road2_lane_ids[i]) - 1
725+
].add_link(second_linktype, road1_lane_ids[i])
731726

732727

733728
def create_lane_links(road1, road2):
@@ -914,16 +909,20 @@ def _get_related_lanesection(road, connected_road):
914909
# treat connecting road in junction differently
915910
if connected_road.predecessor.element_id == road.id:
916911
if connected_road.predecessor.contact_point == ContactPoint.start:
912+
linktype = "predecessor"
917913
road_lanesection_id = 0
918914
sign = -1
919915
else:
916+
linktype = "successor"
920917
road_lanesection_id = -1
921918
sign = 1
922919
elif connected_road.successor.element_id == road.id:
923920
if connected_road.successor.contact_point == ContactPoint.start:
921+
linktype = "predecessor"
924922
road_lanesection_id = 0
925923
sign = 1
926924
else:
925+
linktype = "successor"
927926
road_lanesection_id = -1
928927
sign = -1
929928

0 commit comments

Comments
 (0)