a-b-street / a-b-street/abstreet

Looping uber-turn causing a crash

Ouverte
#840 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Rust
Étoiles
8.2k
Forks
380
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

I've seen a crash at https://github.com/a-b-street/abstreet/blob/37404044e3e3f6ae2c8e85eeb05f9691c1df8197/map_model/src/pathfind/v2.rs#L299 in a few maps, like leeds/huge. We're transforming directed road-level uber turns to lane-level uber-turns, and if we don't wind up with the same number of input and output, the assertion trips.

The example in Leeds:
```
UberTurnV2 { path: [MovementID { from: DirectedRoadID { road: RoadID(21528), dir: Fwd }, to: DirectedRoadID { road: RoadID(21529), dir: Fwd }, parent: IntersectionID(17376), crosswalk: false }, MovementID { from: DirectedRoadID { road: RoadID(21529), dir: Fwd }, to: DirectedRoadID { road: RoadID(21559), dir: Fwd }, parent: IntersectionID(1216), crosswalk: false }, MovementID { from: DirectedRoadID { road: RoadID(21559), dir: Fwd }, to: DirectedRoadID { road: RoadID(21561), dir: Fwd }, parent: IntersectionID(17378), crosswalk: false }, MovementID { from: DirectedRoadID { road: RoadID(21561), dir: Fwd }, to: DirectedRoadID { road: RoadID(21560), dir: Fwd }, parent: IntersectionID(9052), crosswalk: false }, MovementID { from: DirectedRoadID { road: RoadID(21560), dir: Fwd }, to: DirectedRoadID { road: RoadID(21532), dir: Fwd }, parent: IntersectionID(17377), crosswalk: false }, MovementID { from: DirectedRoadID { road: RoadID(21532), dir: Fwd }, to: DirectedRoadID { road: RoadID(705), dir: Fwd }, parent: IntersectionID(1216), crosswalk: false }, MovementID { from: DirectedRoadID { road: RoadID(705), dir: Fwd }, to: DirectedRoadID { road: RoadID(706), dir: Fwd }, parent: IntersectionID(14873), crosswalk: false }] }
```

Bit of a mouthful, but I traced out what this looks like:
![Screenshot from 2022-01-24 21-31-28](https://user-images.githubusercontent.com/1664407/150868651-da62ef35-bce0-40b1-8a48-256006346207.png)
And we uh, have a loop in the uber-turn, but pathfinding v1 doesn't trace the loop. Based on how we do a graph search to transform v2->v1, it makes sense why the loop vanishes. My question is how we possibly wound up with a loop in the first place

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.