Replies: 3 comments 2 replies
|
Here's how I'd like things to work. First, some changes:
The process for standalone train simulation goes as follows:
The process for many train simulations would go as follows:
|
2 replies
|
The way allowances currently works is this:
|
0 replies
|
This is legacy |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
This discussion is meant to explain how speed controllers work, and why we want to use speed envelopes instead.
Here is how things currently work:
TrainState.simulatePhasecallstrainSchedule.trainDecisionMaker.simulatePhase(train, sim)TrainDecisionMaker.simulatePhasecallstrainState.currentPhaseState.simulate(train, trainState)SignalNavigatePhase.simulate:trainState.evolveStateUntilPosition(sim, nextInteraction.position)TrainState.step(locationChange, timeStep, distanceStep)are appended to a location changeTrainState.stepcallsTrainPhysicsIntegrator.nextStepTrainPhysicsIntegrator.nextStepcallsiterateFindNextActionvia a callback given fromTrainState.stepiterateFindNextActioncallsfindActionToReachTargetSpeedAtPositionfindActionToReachTargetSpeedAtPositioncallstrainSchedule.trainDecisionMaker.getActiveSpeedControllers(isLate)getActiveSpeedControllersusestrainState.trainSchedule.speedInstructionsand getsspeedInstructions.maxSpeedControllersorspeedInstructions.targetSpeedControllersdepending on isLate, and then adds dynamic speed controllers, which depend on the phaseAll reactions