Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Simonstrator
PeerfactSim.KOM
Commits
d5936de3
Commit
d5936de3
authored
Jun 19, 2017
by
Tobias Meuser
Committed by
Jose Ignacio Monreal Bailey
Aug 20, 2019
Browse files
Added functionality to simulation controller
- Road network extraction - Vehicle rerouting
parent
3daf806e
Changes
8
Show whitespace changes
Inline
Side-by-side
src/de/tud/kom/p2psim/impl/topology/movement/vehicular/sumo/simulation/controller/roadnetwork/RoadNetwork.java
0 → 100755
View file @
d5936de3
/*
* Copyright (c) 2005-2010 KOM Multimedia Communications Lab
*
* This file is part of PeerfactSim.KOM.
*
* PeerfactSim.KOM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* PeerfactSim.KOM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PeerfactSim.KOM. If not, see <http://www.gnu.org/licenses/>.
*
*/
package
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
public
class
RoadNetwork
{
private
Map
<
String
,
RoadNetworkEdge
>
_roadNetwork
;
public
RoadNetwork
(
Map
<
String
,
RoadNetworkEdge
>
pRoadNetwork
)
{
_roadNetwork
=
pRoadNetwork
;
}
public
List
<
RoadNetworkEdge
>
getAvailableEdges
()
{
return
new
ArrayList
<>(
_roadNetwork
.
values
());
}
public
RoadNetworkEdge
getEdge
(
String
pRouteID
)
{
return
_roadNetwork
.
get
(
pRouteID
);
}
}
src/de/tud/kom/p2psim/impl/topology/movement/vehicular/sumo/simulation/controller/roadnetwork/RoadNetworkEdge.java
0 → 100755
View file @
d5936de3
/*
* Copyright (c) 2005-2010 KOM Multimedia Communications Lab
*
* This file is part of PeerfactSim.KOM.
*
* PeerfactSim.KOM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* PeerfactSim.KOM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PeerfactSim.KOM. If not, see <http://www.gnu.org/licenses/>.
*
*/
package
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
public
class
RoadNetworkEdge
{
private
String
_edgeID
;
private
List
<
RoadNetworkEdge
>
_accessibleEdges
=
new
ArrayList
<>();
public
RoadNetworkEdge
(
String
pEdgeID
)
{
_edgeID
=
pEdgeID
;
}
public
String
getEdgeID
()
{
return
_edgeID
;
}
public
void
addConnectedEdge
(
RoadNetworkEdge
pEdge
)
{
if
(!
_accessibleEdges
.
contains
(
pEdge
))
{
_accessibleEdges
.
add
(
pEdge
);
}
}
public
List
<
RoadNetworkEdge
>
getAccessibleEdges
()
{
return
Collections
.
unmodifiableList
(
_accessibleEdges
);
}
@Override
public
String
toString
()
{
return
_edgeID
;
}
}
src/de/tud/kom/p2psim/impl/topology/movement/vehicular/sumo/simulation/controller/roadnetwork/RoadNetworkRoute.java
0 → 100755
View file @
d5936de3
/*
* Copyright (c) 2005-2010 KOM Multimedia Communications Lab
*
* This file is part of PeerfactSim.KOM.
*
* PeerfactSim.KOM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* PeerfactSim.KOM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PeerfactSim.KOM. If not, see <http://www.gnu.org/licenses/>.
*
*/
package
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
public
class
RoadNetworkRoute
{
private
List
<
RoadNetworkEdge
>
_route
;
public
RoadNetworkRoute
(
List
<
RoadNetworkEdge
>
pRoute
)
{
_route
=
pRoute
;
}
public
RoadNetworkRoute
(
List
<
String
>
pRoute
,
RoadNetwork
pNetwork
)
{
_route
=
new
ArrayList
<>();
for
(
String
pRouteID
:
pRoute
)
{
RoadNetworkEdge
edge
=
pNetwork
.
getEdge
(
pRouteID
);
_route
.
add
(
edge
);
}
}
public
List
<
RoadNetworkEdge
>
getRoute
()
{
return
Collections
.
unmodifiableList
(
_route
);
}
@Override
public
boolean
equals
(
Object
pObj
)
{
if
(
pObj
instanceof
RoadNetworkRoute
)
{
List
<
RoadNetworkEdge
>
route
=
((
RoadNetworkRoute
)
pObj
).
getRoute
();
if
(
route
.
size
()
==
_route
.
size
())
{
for
(
int
i
=
0
;
i
<
route
.
size
();
i
++)
{
if
(!
route
.
get
(
i
).
equals
(
_route
.
get
(
i
)))
{
return
false
;
}
}
return
true
;
}
}
return
false
;
}
public
boolean
containsEdge
(
String
pEdgeID
)
{
for
(
RoadNetworkEdge
roadNetworkEdge
:
_route
)
{
if
(
roadNetworkEdge
.
getEdgeID
().
equals
(
pEdgeID
))
{
return
true
;
}
}
return
false
;
}
public
boolean
containsEdge
(
RoadNetworkEdge
pEdge
)
{
return
_route
.
contains
(
pEdge
);
}
public
RoadNetworkEdge
getStart
()
{
return
_route
.
get
(
0
);
}
public
RoadNetworkEdge
getDestination
()
{
return
_route
.
get
(
_route
.
size
()
-
1
);
}
@Override
public
String
toString
()
{
StringBuffer
buffer
=
new
StringBuffer
();
for
(
int
i
=
0
;
i
<
_route
.
size
();
i
++)
{
if
(
i
!=
0
)
{
buffer
.
append
(
" --> "
);
}
buffer
.
append
(
_route
.
get
(
i
));
}
return
buffer
.
toString
();
}
}
src/de/tud/kom/p2psim/impl/topology/movement/vehicular/sumo/simulation/controller/roadnetwork/exception/NoAdditionalRouteAvailableException.java
0 → 100755
View file @
d5936de3
/*
* Copyright (c) 2005-2010 KOM Multimedia Communications Lab
*
* This file is part of PeerfactSim.KOM.
*
* PeerfactSim.KOM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* PeerfactSim.KOM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PeerfactSim.KOM. If not, see <http://www.gnu.org/licenses/>.
*
*/
package
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.exception
;
import
java.util.List
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.RoadNetworkEdge
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.RoadNetworkRoute
;
public
class
NoAdditionalRouteAvailableException
extends
Exception
{
public
NoAdditionalRouteAvailableException
(
RoadNetworkEdge
pStart
,
RoadNetworkEdge
pDestination
,
List
<
RoadNetworkRoute
>
pRoutes
)
{
super
(
"No "
+
(
pRoutes
.
size
()
>
0
?
"additional "
:
""
)
+
"route available between "
+
pStart
.
getEdgeID
()
+
" and "
+
pDestination
.
getEdgeID
()
+
(
pRoutes
.
size
()>
0
?
" known routes are:"
+
printRoutes
(
pRoutes
)
+
"\n"
:
""
));
}
private
static
String
printRoutes
(
List
<
RoadNetworkRoute
>
pRoutes
)
{
StringBuffer
stringBuffer
=
new
StringBuffer
();
for
(
RoadNetworkRoute
roadNetworkRoute
:
pRoutes
)
{
stringBuffer
.
append
(
"\n\t"
).
append
(
roadNetworkRoute
);
}
return
stringBuffer
.
toString
();
}
}
src/de/tud/kom/p2psim/impl/topology/movement/vehicular/sumo/simulation/controller/roadnetwork/exception/NoExitAvailableException.java
0 → 100755
View file @
d5936de3
/*
* Copyright (c) 2005-2010 KOM Multimedia Communications Lab
*
* This file is part of PeerfactSim.KOM.
*
* PeerfactSim.KOM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* PeerfactSim.KOM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PeerfactSim.KOM. If not, see <http://www.gnu.org/licenses/>.
*
*/
package
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.exception
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.RoadNetworkEdge
;
public
class
NoExitAvailableException
extends
Exception
{
public
NoExitAvailableException
(
RoadNetworkEdge
pStart
,
RoadNetworkEdge
pDestination
)
{
super
(
"No departure available between "
+
pStart
.
getEdgeID
()
+
" and "
+
pDestination
.
getEdgeID
());
}
}
src/de/tud/kom/p2psim/impl/topology/movement/vehicular/sumo/simulation/controller/roadnetwork/routing/BreathFirstSearchRoutingAlgorithm.java
0 → 100755
View file @
d5936de3
/*
* Copyright (c) 2005-2010 KOM Multimedia Communications Lab
*
* This file is part of PeerfactSim.KOM.
*
* PeerfactSim.KOM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* PeerfactSim.KOM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PeerfactSim.KOM. If not, see <http://www.gnu.org/licenses/>.
*
*/
package
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.routing
;
import
java.util.ArrayList
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Queue
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.RoadNetwork
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.RoadNetworkEdge
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.RoadNetworkRoute
;
public
class
BreathFirstSearchRoutingAlgorithm
implements
RoutingAlgorithm
{
@Override
public
RoadNetworkRoute
findRoute
(
RoadNetwork
pNetwork
,
RoadNetworkEdge
pCurrentPosition
,
RoadNetworkEdge
pDestination
,
List
<
RoadNetworkRoute
>
pKnownRoutes
)
{
return
findRoute
(
pNetwork
,
pCurrentPosition
,
pDestination
,
pKnownRoutes
,
new
ArrayList
<>());
}
@Override
public
RoadNetworkRoute
findRoute
(
RoadNetwork
pNetwork
,
RoadNetworkEdge
pCurrentPosition
,
RoadNetworkEdge
pDestination
,
List
<
RoadNetworkRoute
>
pKnownRoutes
,
List
<
RoadNetworkEdge
>
pEdgesToAvoid
)
{
List
<
RoadNetworkEdge
>
visitedEdges
=
new
ArrayList
<>();
Queue
<
PathInformation
>
buffer
=
new
LinkedList
<>();
PathInformation
rootPathInformation
=
new
PathInformation
(
pCurrentPosition
,
null
);
buffer
.
add
(
rootPathInformation
);
visitedEdges
.
add
(
pCurrentPosition
);
outer:
while
(
buffer
.
size
()
>
0
)
{
PathInformation
pathInformation
=
buffer
.
poll
();
RoadNetworkEdge
edge
=
pathInformation
.
getEdge
();
if
(
pEdgesToAvoid
.
contains
(
edge
))
{
continue
;
}
List
<
RoadNetworkEdge
>
accessibleEdges
=
edge
.
getAccessibleEdges
();
for
(
RoadNetworkEdge
roadNetworkEdge
:
accessibleEdges
)
{
if
(
roadNetworkEdge
.
equals
(
pDestination
))
{
List
<
RoadNetworkEdge
>
routeList
=
new
ArrayList
<>();
extractRoute
(
routeList
,
new
PathInformation
(
roadNetworkEdge
,
pathInformation
));
RoadNetworkRoute
route
=
new
RoadNetworkRoute
(
routeList
);
for
(
RoadNetworkEdge
edgeToAvoid
:
pEdgesToAvoid
)
{
if
(
route
.
containsEdge
(
edgeToAvoid
))
{
continue
outer
;
}
}
if
(!
pKnownRoutes
.
contains
(
route
))
{
return
route
;
}
}
else
if
(!
visitedEdges
.
contains
(
roadNetworkEdge
))
{
PathInformation
childPathInformation
=
new
PathInformation
(
roadNetworkEdge
,
pathInformation
);
buffer
.
add
(
childPathInformation
);
visitedEdges
.
add
(
roadNetworkEdge
);
}
}
}
return
null
;
}
private
void
extractRoute
(
List
<
RoadNetworkEdge
>
pEdges
,
PathInformation
pPathInformation
)
{
if
(
pPathInformation
.
getPreviousEdge
()
!=
null
)
{
extractRoute
(
pEdges
,
pPathInformation
.
getPreviousEdge
());
}
pEdges
.
add
(
pPathInformation
.
getEdge
());
}
private
class
PathInformation
{
private
final
RoadNetworkEdge
_edge
;
private
final
PathInformation
_previousEdge
;
public
PathInformation
(
RoadNetworkEdge
pEdge
,
PathInformation
pPreviousEdge
)
{
_edge
=
pEdge
;
_previousEdge
=
pPreviousEdge
;
}
public
RoadNetworkEdge
getEdge
()
{
return
_edge
;
}
public
PathInformation
getPreviousEdge
()
{
return
_previousEdge
;
}
@Override
public
boolean
equals
(
Object
pObj
)
{
if
(
pObj
instanceof
PathInformation
)
{
return
((
PathInformation
)
pObj
).
getEdge
().
equals
(
_edge
);
}
return
false
;
}
}
}
src/de/tud/kom/p2psim/impl/topology/movement/vehicular/sumo/simulation/controller/roadnetwork/routing/RoutingAlgorithm.java
0 → 100755
View file @
d5936de3
/*
* Copyright (c) 2005-2010 KOM Multimedia Communications Lab
*
* This file is part of PeerfactSim.KOM.
*
* PeerfactSim.KOM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* PeerfactSim.KOM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PeerfactSim.KOM. If not, see <http://www.gnu.org/licenses/>.
*
*/
package
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.routing
;
import
java.util.List
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.RoadNetwork
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.RoadNetworkEdge
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.RoadNetworkRoute
;
public
interface
RoutingAlgorithm
{
RoadNetworkRoute
findRoute
(
RoadNetwork
pNetwork
,
RoadNetworkEdge
pCurrentPosition
,
RoadNetworkEdge
pDestination
,
List
<
RoadNetworkRoute
>
pKnownRoutes
);
RoadNetworkRoute
findRoute
(
RoadNetwork
pNetwork
,
RoadNetworkEdge
pCurrentPosition
,
RoadNetworkEdge
pDestination
,
List
<
RoadNetworkRoute
>
pKnownRoutes
,
List
<
RoadNetworkEdge
>
pEdgesToAvoid
);
}
src/de/tud/kom/p2psim/impl/topology/movement/vehicular/sumo/simulation/controller/traci/TraciSimulationController.java
View file @
d5936de3
...
@@ -8,15 +8,23 @@ import java.util.Map;
...
@@ -8,15 +8,23 @@ import java.util.Map;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.information.LocationUtils
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.information.LocationUtils
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.information.Position
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.information.Position
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.information.Route
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.information.Street
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.SimulationSetupExtractor
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.SimulationSetupExtractor
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.VehicleController
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.VehicleController
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.RoadNetwork
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.RoadNetworkEdge
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.RoadNetworkRoute
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.exception.NoAdditionalRouteAvailableException
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.exception.NoExitAvailableException
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.routing.BreathFirstSearchRoutingAlgorithm
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.roadnetwork.routing.RoutingAlgorithm
;
import
de.tudresden.sumo.cmd.Junction
;
import
de.tudresden.sumo.cmd.Junction
;
import
de.tudresden.sumo.cmd.Lane
;
import
de.tudresden.sumo.cmd.Simulation
;
import
de.tudresden.sumo.cmd.Simulation
;
import
de.tudresden.sumo.cmd.Vehicle
;
import
de.tudresden.sumo.cmd.Vehicle
;
import
de.tudresden.sumo.util.SumoCommand
;
import
de.tudresden.sumo.util.SumoCommand
;
import
de.tudresden.ws.container.SumoBoundingBox
;
import
de.tudresden.ws.container.SumoBoundingBox
;
import
de.tudresden.ws.container.SumoLink
;
import
de.tudresden.ws.container.SumoLinkList
;
import
de.tudresden.ws.container.SumoPosition2D
;
import
de.tudresden.ws.container.SumoPosition2D
;
import
de.tudresden.ws.container.SumoStringList
;
import
de.tudresden.ws.container.SumoStringList
;
import
it.polito.appeal.traci.SumoTraciConnection
;
import
it.polito.appeal.traci.SumoTraciConnection
;
...
@@ -41,7 +49,7 @@ public class TraciSimulationController implements VehicleController, SimulationS
...
@@ -41,7 +49,7 @@ public class TraciSimulationController implements VehicleController, SimulationS
private
double
_endY
;
private
double
_endY
;
private
Map
<
Double
,
Map
<
String
,
Position
>>
_positonsByTimestamp
=
new
HashMap
<>();
private
Map
<
Double
,
Map
<
String
,
Position
>>
_positonsByTimestamp
=
new
HashMap
<>();
private
int
_futureInformation
=
1
0
;
private
int
_futureInformation
=
0
;
private
boolean
_initalized
=
false
;
private
boolean
_initalized
=
false
;
...
@@ -49,6 +57,10 @@ public class TraciSimulationController implements VehicleController, SimulationS
...
@@ -49,6 +57,10 @@ public class TraciSimulationController implements VehicleController, SimulationS
private
Map
<
String
,
Double
>
_vehiclesOutOfRange
=
new
HashMap
<>();
private
Map
<
String
,
Double
>
_vehiclesOutOfRange
=
new
HashMap
<>();
private
RoadNetwork
_roadNetwork
;
private
RoutingAlgorithm
_algorithm
=
new
BreathFirstSearchRoutingAlgorithm
();
public
static
synchronized
TraciSimulationController
createSimulationController
(
String
pSumoExe
,
String
pConfigFile
)
{
public
static
synchronized
TraciSimulationController
createSimulationController
(
String
pSumoExe
,
String
pConfigFile
)
{
if
(!
CONTROLLER
.
containsKey
(
pConfigFile
))
{
if
(!
CONTROLLER
.
containsKey
(
pConfigFile
))
{
CONTROLLER
.
put
(
pConfigFile
,
new
TraciSimulationController
(
pSumoExe
,
pConfigFile
));
CONTROLLER
.
put
(
pConfigFile
,
new
TraciSimulationController
(
pSumoExe
,
pConfigFile
));
...
@@ -276,18 +288,19 @@ public class TraciSimulationController implements VehicleController, SimulationS
...
@@ -276,18 +288,19 @@ public class TraciSimulationController implements VehicleController, SimulationS
return
new
ArrayList
<>(
map
.
keySet
());
return
new
ArrayList
<>(
map
.
keySet
());
}
}
public
Route
getRoute
(
String
pVehicleID
)
{
public
RoadNetwork
Route
getRoute
(
String
pVehicleID
)
{
SumoCommand
routeCommand
=
Vehicle
.
getRoute
(
pVehicleID
);
SumoCommand
routeCommand
=
Vehicle
.
getRoute
(
pVehicleID
);
Object
object
=
requestObject
(
routeCommand
);
Object
object
=
requestObject
(
routeCommand
);
SumoStringList
streetList
=
(
SumoStringList
)
object
;
SumoStringList
streetList
=
(
SumoStringList
)
object
;
Route
route
=
new
Route
();
obtainRoadNetwork
();
List
<
Street
>
streets
=
route
.
getStreets
();
List
<
RoadNetworkEdge
>
streets
=
new
ArrayList
<>();
for
(
String
street
:
streetList
)
{
for
(
String
street
:
streetList
)
{
streets
.
add
(
new
Street
(
street
));
streets
.
add
(
_roadNetwork
.
getEdge
(
street
));
}
}
return
route
;
return
new
RoadNetworkRoute
(
streets
)
;
}
}
public
Object
requestObject
(
SumoCommand
routeCommand
)
{
public
Object
requestObject
(
SumoCommand
routeCommand
)
{
...
@@ -302,6 +315,16 @@ public class TraciSimulationController implements VehicleController, SimulationS
...
@@ -302,6 +315,16 @@ public class TraciSimulationController implements VehicleController, SimulationS
return
object
;
return
object
;
}
}
public
void
execute
(
SumoCommand
routeCommand
)
{
try
{
_connection
.
do_job_set
(
routeCommand
);
}
catch
(
RuntimeException
e
)
{
throw
e
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
@Override
@Override
public
double
getStep
()
{
public
double
getStep
()
{
return
_step
;
return
_step
;
...
@@ -355,4 +378,126 @@ public class TraciSimulationController implements VehicleController, SimulationS
...
@@ -355,4 +378,126 @@ public class TraciSimulationController implements VehicleController, SimulationS
return
-
1
;
return
-
1
;
}
}
public
boolean
providesRoadInformation
()
{
return
true
;
}
public
RoadNetworkEdge
getVehicleDestination
(
String
pVehicleID
)
{
RoadNetworkRoute
roadNetworkRoute
=
getRoute
(
pVehicleID
);
return
roadNetworkRoute
.
getDestination
();
}
public
RoadNetwork
getRoadNetwork
()
{
obtainRoadNetwork
();
return
_roadNetwork
;
}
public
RoadNetworkRoute
findNewRoute
(
String
pVehicle
)
throws
NoAdditionalRouteAvailableException
{
List
<
RoadNetworkRoute
>
routes
=
new
ArrayList
<>();
RoadNetworkRoute
route
=
getRoute
(
pVehicle
);
routes
.
add
(
route
);
RoadNetworkRoute
findRoute
=
_algorithm
.
findRoute
(
_roadNetwork
,
route
.
getStart
(),
route
.
getDestination
(),
routes
);
if
(
findRoute
==
null
)
{
throw
new
NoAdditionalRouteAvailableException
(
route
.
getStart
(),
route
.
getDestination
(),
routes
);
}
return
findRoute
;
}
public
RoadNetworkRoute
findNewRoute
(
String
pVehicle
,
List
<
RoadNetworkEdge
>
pEdgesToAvoid
,
boolean
pKeepDestination
)
throws
NoAdditionalRouteAvailableException
,
NoExitAvailableException
{
if
(
pKeepDestination
)
{
List
<
RoadNetworkRoute
>
routes
=
new
ArrayList
<>();
RoadNetworkRoute
route
=
getRoute
(
pVehicle
);
routes
.
add
(
route
);
RoadNetworkRoute
findRoute
=
_algorithm
.
findRoute
(
_roadNetwork
,
route
.
getStart
(),
route
.
getDestination
(),
routes
,
pEdgesToAvoid
);
if
(
findRoute
==
null
)
{
throw
new
NoAdditionalRouteAvailableException
(
route
.
getStart
(),
route
.
getDestination
(),
routes
);
}
return
findRoute
;
}
else
{
RoadNetworkRoute
route
=
getRoute
(
pVehicle
);
List
<
RoadNetworkEdge
>
routeList
=
route
.
getRoute
();
RoadNetworkEdge
lastEdge
=
null
;
boolean
search
=
false
;
outer:
for
(
int
i
=
routeList
.
size
()
-
1
;
i
>=
0
;
i
--)
{
if
(
search
)
{
List
<
RoadNetworkEdge
>
accessibleEdges
=
routeList
.
get
(
i
).
getAccessibleEdges
();
if
(
accessibleEdges
.
size
()
>
1
)
{
for
(
int
j
=
0
;
j
<
accessibleEdges
.
size
();
j
++)
{
if
(!
accessibleEdges
.
get
(
j
).
equals
(
lastEdge
))
{
List
<
RoadNetworkEdge
>
edges
=
new
ArrayList
<>();
for
(
int
k
=
0
;
k
<=
i
;
k
++)
{
edges
.
add
(
routeList
.
get
(
k
));
}
edges
.
add
(
accessibleEdges
.
get
(
j
));
for
(
RoadNetworkEdge
roadNetworkEdge
:
edges
)
{
if
(
pEdgesToAvoid
.
contains
(
roadNetworkEdge
))
{
continue
outer
;
}
}
return
new
RoadNetworkRoute
(
edges
);
}
}
}
}
search
=
true
;
lastEdge
=
routeList
.
get
(
i
);
}
throw
new
NoExitAvailableException
(
route
.
getStart
(),
route
.
getDestination
());
}
}
public
void
rerouteVehicle
(
String
pVehicle
,
RoadNetworkRoute
pRoute
)
{
SumoStringList
routeEdges
=
new
SumoStringList
();
for
(
RoadNetworkEdge
edge
:
pRoute
.
getRoute
())
{
routeEdges
.
add
(
edge
.
getEdgeID
());
}
execute
(
Vehicle
.
setRoute
(
pVehicle
,
routeEdges
));
}
public
void
obtainRoadNetwork
()
{
if
(
_roadNetwork
==
null
)
{
SumoCommand
laneIDCommand
=
Lane
.
getIDList
();
Map
<
String
,
RoadNetworkEdge
>
roadNetwork
=
new
HashMap
<>();
SumoStringList
laneIDStringList
=
(
SumoStringList
)
requestObject
(
laneIDCommand
);
for
(
String
laneID
:
laneIDStringList
)
{
SumoCommand
edgeIDCommand
=
Lane
.
getEdgeID
(
laneID
);
SumoLinkList
linkStringList
=
(
SumoLinkList
)
requestObject
(
Lane
.
getLinks
(
laneID
));
if
(
linkStringList
.
size
()
>
0
)
{
String
edgeID
=
(
String
)
requestObject
(
edgeIDCommand
);
if
(!
roadNetwork
.
containsKey
(
edgeID
))
{
roadNetwork
.
put
(
edgeID
,
new
RoadNetworkEdge
(
edgeID
));
}
RoadNetworkEdge
edge
=
roadNetwork
.
get
(
edgeID
);
for
(
SumoLink
link
:
linkStringList
)
{
String
notInternalLane
=
link
.
notInternalLane
;
String
connectedEdge
=
(
String
)
requestObject
(
Lane
.
getEdgeID
(
notInternalLane
));
if
(!
roadNetwork
.
containsKey
(
connectedEdge
))
{
roadNetwork
.
put
(
connectedEdge
,
new
RoadNetworkEdge
(
connectedEdge
));
}
edge
.
addConnectedEdge
(
roadNetwork
.
get
(
connectedEdge
));
}
}
}
_roadNetwork
=
new
RoadNetwork
(
roadNetwork
);
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment