Мои автомобили будут передвигаться случайным образом, когда им нечего делать и искать новые рабочие места, но иногда, прямо перед тем, как они столкнутся, возникает следующее исключение:
Exception in thread "Thread-0" com.google.common.base.VerifyException: [(14.11111111111111,0.0), (16.0,0.0), -0.36111111111111116]
at com.google.common.base.Verify.verify(Verify.java:462)
at com.github.rinde.rinsim.core.model.road.CollisionGraphRoadModelImpl.computeTravelableDistance(CollisionGraphRoadModelImpl.java:138)
at com.github.rinde.rinsim.core.model.road.GraphRoadModelImpl.doFollowPath(GraphRoadModelImpl.java:178)
at com.github.rinde.rinsim.core.model.road.CollisionGraphRoadModelImpl.doFollowPath(CollisionGraphRoadModelImpl.java:82)
at com.github.rinde.rinsim.core.model.road.AbstractRoadModel.moveTo(AbstractRoadModel.java:133)
at com.github.rinde.rinsim.core.model.road.AbstractRoadModel.moveTo(AbstractRoadModel.java:102)
at project.agents.AgvAgent.movementTick(AgvAgent.java:281)
at project.agents.AgvAgent.tickImpl(AgvAgent.java:213)
at com.github.rinde.rinsim.core.model.pdp.Vehicle.tick(Vehicle.java:55)
at com.github.rinde.rinsim.core.model.time.TimeModel.tickImpl(TimeModel.java:139)
at com.github.rinde.rinsim.core.model.time.SimulatedTimeModel.doStart(SimulatedTimeModel.java:32)
at com.github.rinde.rinsim.core.model.time.TimeModel.start(TimeModel.java:94)
at com.github.rinde.rinsim.ui.SimulationViewer$5.run(SimulationViewer.java:401)
Вот код для движениядо пункта назначения (часть метода tickImpl) и для выбора нового пункта назначения и пути:
CollisionGraphRoadModelImpl model = (CollisionGraphRoadModelImpl) getRoadModel();
if (!randomDestination.isPresent()) {
nextRandomDestination(model);
}
getRoadModel().moveTo(this, randomDestination.get(), time);
if (model.getPosition(this).equals(randomDestination.get())) {
nextRandomDestination(model);
}
void nextRandomDestination(CollisionGraphRoadModelImpl model) {
randomDestination = Optional.of(model.getRandomPosition(rng));
Point end = randomDestination.get();
Point start = model.getPosition(this);
if (model.getConnection(this).isPresent()) {
start = model.getConnection(this).get().to();
}
randomPath = new LinkedList<>(model.getShortestPathTo(start, end));
}
Я попытался перейти к точке, а также следовать по пути с помощью RoadModel.followPath()
.Я также скопировал некоторый код из классов AgvAgent
и AgvExample
, но, хотя он работает для них, он не работал в моем случае.Я нашел некоторые комментарии в GraphRoadModelImpl.doFollowPath()
о некоторых ошибках.Мне интересно, есть ли обходные пути для этого?Или что-то очевидное мне не хватает?