Skip to content

Commit

Permalink
core: trains cannot see a signal before passing the previous one
Browse files Browse the repository at this point in the history
  • Loading branch information
Khoyo committed Aug 31, 2023
1 parent 6d9872e commit 63e8347
Showing 1 changed file with 12 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import fr.sncf.osrd.standalone_sim.result.ResultTrain.SpacingRequirement
import fr.sncf.osrd.sim_infra.utils.recoverBlocks
import fr.sncf.osrd.sim_infra.utils.toList
import fr.sncf.osrd.standalone_sim.result.ResultTrain.RoutingZoneRequirement
import fr.sncf.osrd.standalone_sim.result.ResultTrain.SignalSighting
import fr.sncf.osrd.train.RollingStock
import fr.sncf.osrd.train.StandaloneTrainSchedule
import fr.sncf.osrd.utils.CurveSimplification
Expand Down Expand Up @@ -111,15 +112,20 @@ fun run(
ResultTrain.ZoneUpdate(rawInfra.getZoneName(it.zone), it.time / 1000.0, it.offset.meters, it.isEntry)
}

val signalSightings = pathSignals.map {
val physicalSignal = loadedSignalInfra.getPhysicalSignal(it.signal)
val sightOffset = max(0.0, (it.pathOffset - rawInfra.getSignalSightDistance(physicalSignal)).meters)
ResultTrain.SignalSighting(
rawInfra.getPhysicalSignalName(loadedSignalInfra.getPhysicalSignal(it.signal)),
val signalSightings = mutableListOf<SignalSighting>()
for ((i, pathSignal) in pathSignals.withIndex()) {
val physicalSignal = loadedSignalInfra.getPhysicalSignal(pathSignal.signal)
var sightOffset = max(0.0, (pathSignal.pathOffset - rawInfra.getSignalSightDistance(physicalSignal)).meters)
if (i > 0) {
val previousSignalOffset = pathSignals[i - 1].pathOffset.meters
sightOffset = max(sightOffset, previousSignalOffset);
}
signalSightings.add(SignalSighting(
rawInfra.getPhysicalSignalName(loadedSignalInfra.getPhysicalSignal(pathSignal.signal)),
envelopeWithStops.interpolateTotalTime(sightOffset),
sightOffset,
"VL" // TODO: find out the real state
)
))
}

// Compute route occupancies
Expand Down Expand Up @@ -402,7 +408,6 @@ fun EnvelopeTimeInterpolate.clampInterpolate(position: Distance): Double {
return interpolateTotalTime(criticalPos)
}


private fun spacingRequirements(
simulator: SignalingSimulator,
blockPath: StaticIdxList<Block>,
Expand Down

0 comments on commit 63e8347

Please sign in to comment.