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
8a484e4e
Commit
8a484e4e
authored
Jun 19, 2017
by
Tobias Meuser
Browse files
Added vehicle component to access information about the vehicle
parent
69aa8c41
Changes
5
Hide whitespace changes
Inline
Side-by-side
src/de/tud/kom/p2psim/impl/topology/movement/VehicleMovementModel.java
View file @
8a484e4e
...
...
@@ -38,6 +38,7 @@ import de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.contro
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.traci.TraciSimulationController
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.controller.xml.XMLSimulationController
;
import
de.tud.kom.p2psim.impl.vehicular.DefaultVehicleInformationComponent
;
import
de.tudarmstadt.maki.simonstrator.api.Event
;
import
de.tudarmstadt.maki.simonstrator.api.EventHandler
;
import
de.tudarmstadt.maki.simonstrator.api.Host
;
...
...
@@ -52,6 +53,7 @@ import de.tudarmstadt.maki.simonstrator.api.component.sis.SiSInfoProperties;
import
de.tudarmstadt.maki.simonstrator.api.component.sis.SiSInformationProvider.SiSProviderHandle
;
import
de.tudarmstadt.maki.simonstrator.api.component.sis.exception.InformationNotAvailableException
;
import
de.tudarmstadt.maki.simonstrator.api.component.sis.type.SiSTypes
;
import
de.tudarmstadt.maki.simonstrator.api.component.vehicular.VehicleInformationComponent
;
import
de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor
;
public
class
VehicleMovementModel
implements
MovementModel
,
EventHandler
,
FutureLocationSensor
{
...
...
@@ -88,6 +90,7 @@ public class VehicleMovementModel implements MovementModel, EventHandler, Future
private
boolean
initialized
=
false
;
private
VehicleController
_controller
;
private
SimulationSetupExtractor
_extractor
;
private
List
<
Position
>
intersections
;
...
...
@@ -226,7 +229,6 @@ public class VehicleMovementModel implements MovementModel, EventHandler, Future
if
(!
initialized
)
{
Event
.
scheduleWithDelay
(
timeBetweenMoveOperations
,
this
,
null
,
0
);
SimulationSetupExtractor
extractor
;
if
(
sumoExe
!=
null
)
{
TraciSimulationController
simulationController
=
TraciSimulationController
.
createSimulationController
(
sumoExe
,
sumoConfigFile
);
_controller
=
simulationController
;
...
...
@@ -234,7 +236,7 @@ public class VehicleMovementModel implements MovementModel, EventHandler, Future
_controller
.
init
();
_controller
.
nextStep
();
extractor
=
simulationController
;
_
extractor
=
simulationController
;
}
else
{
XMLSimulationController
simulationController
;
if
(
sumoIntersections
==
null
||
sumoIntersections
.
equals
(
""
))
{
...
...
@@ -248,12 +250,12 @@ public class VehicleMovementModel implements MovementModel, EventHandler, Future
_controller
.
init
();
_controller
.
nextStep
();
extractor
=
simulationController
;
_
extractor
=
simulationController
;
}
intersections
=
extractor
.
getAllIntersections
(
true
);
intersections
=
_
extractor
.
getAllIntersections
(
true
);
scenarioWidth
=
extractor
.
getScenarioWidth
();
scenarioHeight
=
extractor
.
getScenarioHeight
();
scenarioWidth
=
_
extractor
.
getScenarioWidth
();
scenarioHeight
=
_
extractor
.
getScenarioHeight
();
System
.
out
.
println
(
"Initialization: done."
);
}
...
...
@@ -299,6 +301,13 @@ public class VehicleMovementModel implements MovementModel, EventHandler, Future
component
.
setMovementSpeed
(
position
.
getSpeed
()
/
SCALING_FACTOR
);
try
{
VehicleInformationComponent
vehicularHostComponent
=
component
.
getHost
().
getComponent
(
VehicleInformationComponent
.
class
);
System
.
out
.
println
(
vehicularHostComponent
.
getCurrentRoute
());
}
catch
(
ComponentNotAvailableException
e
)
{
// Nothing to do here
}
try
{
RoutedNetLayer
routedNetLayer
=
component
.
getHost
().
getComponent
(
RoutedNetLayer
.
class
);
for
(
SimNetInterface
netInterface
:
routedNetLayer
.
getSimNetworkInterfaces
())
{
...
...
@@ -347,6 +356,13 @@ public class VehicleMovementModel implements MovementModel, EventHandler, Future
if
(
idComponentMatcher
.
containsKey
(
vehicleID
))
{
SimLocationActuator
simLocationActuator
=
idComponentMatcher
.
remove
(
vehicleID
);
if
(
simLocationActuator
!=
null
)
{
try
{
VehicleInformationComponent
vehicularHostComponent
=
simLocationActuator
.
getHost
().
getComponent
(
VehicleInformationComponent
.
class
);
vehicularHostComponent
.
resetVehicleID
();
}
catch
(
ComponentNotAvailableException
e
)
{
// Nothing to do here
}
freeComponents
.
add
(
simLocationActuator
);
hostVehicleIDMatching
.
remove
(
simLocationActuator
.
getHost
().
getId
());
}
...
...
@@ -362,6 +378,17 @@ public class VehicleMovementModel implements MovementModel, EventHandler, Future
private
SimLocationActuator
requestSimActuator
(
String
vehicle
)
{
if
(!
idComponentMatcher
.
containsKey
(
vehicle
))
{
SimLocationActuator
simLocationActuator
=
freeComponents
.
poll
();
VehicleInformationComponent
vehicularHostComponent
;
try
{
vehicularHostComponent
=
simLocationActuator
.
getHost
().
getComponent
(
VehicleInformationComponent
.
class
);
}
catch
(
ComponentNotAvailableException
e
)
{
Host
host
=
simLocationActuator
.
getHost
();
vehicularHostComponent
=
new
DefaultVehicleInformationComponent
(
host
,
_controller
,
_extractor
);
host
.
registerComponent
(
vehicularHostComponent
);
}
vehicularHostComponent
.
setVehicleID
(
vehicle
);
if
(
simLocationActuator
!=
null
)
{
idComponentMatcher
.
put
(
vehicle
,
simLocationActuator
);
hostVehicleIDMatching
.
put
(
simLocationActuator
.
getHost
().
getId
(),
vehicle
);
...
...
src/de/tud/kom/p2psim/impl/topology/movement/vehicular/sumo/simulation/controller/VehicleController.java
View file @
8a484e4e
...
...
@@ -3,23 +3,27 @@ package de.tud.kom.p2psim.impl.topology.movement.vehicular.sumo.simulation.contr
import
java.util.List
;
import
de.tud.kom.p2psim.impl.topology.movement.vehicular.information.Position
;
import
de.tudarmstadt.maki.simonstrator.api.component.vehicular.roadnetwork.RoadNetworkRoute
;
public
interface
VehicleController
{
void
setObservedArea
(
double
pStartX
,
double
pStartY
,
double
pEndX
,
double
pEndY
);
void
setObservedArea
(
double
pStartX
,
double
pStartY
,
double
pEndX
,
double
pEndY
);
Position
getVehiclePosition
(
String
pVehicleID
);
Position
getVehiclePosition
(
double
pStep
,
String
pVehicleID
);
Position
getVehiclePosition
(
String
pVehicleID
);
Position
getVehiclePosition
(
double
pStep
,
String
pVehicleID
);
boolean
nextStep
();
boolean
nextStep
();
List
<
String
>
getAllVehicles
();
List
<
String
>
getAllVehicles
(
double
pStep
);
List
<
String
>
getAllVehicles
();
List
<
String
>
getAllVehicles
(
double
pStep
);
double
getMaximumAvailablePrediction
(
);
RoadNetworkRoute
getCurrentRoute
(
String
pVehicleID
);
double
getStep
();
double
getStart
();
double
getMaximumAvailablePrediction
();
double
getStep
();
double
getStart
();
void
init
();
void
init
();
}
src/de/tud/kom/p2psim/impl/topology/movement/vehicular/sumo/simulation/controller/traci/TraciSimulationController.java
View file @
8a484e4e
...
...
@@ -288,16 +288,33 @@ public class TraciSimulationController implements VehicleController, SimulationS
return
new
ArrayList
<>(
map
.
keySet
());
}
public
RoadNetworkRoute
getRoute
(
String
pVehicleID
)
{
@Override
public
RoadNetworkRoute
getCurrentRoute
(
String
pVehicleID
)
{
SumoCommand
routeCommand
=
Vehicle
.
getRoute
(
pVehicleID
);
Object
object
=
requestObject
(
routeCommand
);
SumoStringList
streetList
=
(
SumoStringList
)
object
;
SumoCommand
roadIDCommand
=
Vehicle
.
getRoadID
(
pVehicleID
);
String
currentRoadID
=
(
String
)
requestObject
(
roadIDCommand
);
obtainRoadNetwork
();
List
<
RoadNetworkEdge
>
streets
=
new
ArrayList
<>();
boolean
add
=
false
;
for
(
String
street
:
streetList
)
{
streets
.
add
(
_roadNetwork
.
getEdge
(
street
));
if
(
street
.
equals
(
currentRoadID
))
{
add
=
true
;
}
if
(
add
)
{
streets
.
add
(
_roadNetwork
.
getEdge
(
street
));
}
}
if
(
streets
.
size
()
==
0
)
{
for
(
String
street
:
streetList
)
{
streets
.
add
(
_roadNetwork
.
getEdge
(
street
));
}
}
return
new
RoadNetworkRoute
(
streets
);
...
...
@@ -383,7 +400,7 @@ public class TraciSimulationController implements VehicleController, SimulationS
}
public
RoadNetworkEdge
getVehicleDestination
(
String
pVehicleID
)
{
RoadNetworkRoute
roadNetworkRoute
=
getRoute
(
pVehicleID
);
RoadNetworkRoute
roadNetworkRoute
=
get
Current
Route
(
pVehicleID
);
return
roadNetworkRoute
.
getDestination
();
}
...
...
@@ -396,7 +413,7 @@ public class TraciSimulationController implements VehicleController, SimulationS
public
RoadNetworkRoute
findNewRoute
(
String
pVehicle
)
throws
NoAdditionalRouteAvailableException
{
List
<
RoadNetworkRoute
>
routes
=
new
ArrayList
<>();
RoadNetworkRoute
route
=
getRoute
(
pVehicle
);
RoadNetworkRoute
route
=
get
Current
Route
(
pVehicle
);
routes
.
add
(
route
);
RoadNetworkRoute
findRoute
=
_algorithm
.
findRoute
(
_roadNetwork
,
route
.
getStart
(),
route
.
getDestination
(),
routes
);
if
(
findRoute
==
null
)
{
...
...
@@ -408,7 +425,7 @@ public class TraciSimulationController implements VehicleController, SimulationS
public
RoadNetworkRoute
findNewRoute
(
String
pVehicle
,
List
<
RoadNetworkEdge
>
pEdgesToAvoid
,
boolean
pKeepDestination
)
throws
NoAdditionalRouteAvailableException
,
NoExitAvailableException
{
if
(
pKeepDestination
)
{
List
<
RoadNetworkRoute
>
routes
=
new
ArrayList
<>();
RoadNetworkRoute
route
=
getRoute
(
pVehicle
);
RoadNetworkRoute
route
=
get
Current
Route
(
pVehicle
);
routes
.
add
(
route
);
RoadNetworkRoute
findRoute
=
_algorithm
.
findRoute
(
_roadNetwork
,
route
.
getStart
(),
route
.
getDestination
(),
routes
,
pEdgesToAvoid
);
...
...
@@ -417,7 +434,7 @@ public class TraciSimulationController implements VehicleController, SimulationS
}
return
findRoute
;
}
else
{
RoadNetworkRoute
route
=
getRoute
(
pVehicle
);
RoadNetworkRoute
route
=
get
Current
Route
(
pVehicle
);
List
<
RoadNetworkEdge
>
routeList
=
route
.
getRoute
();
RoadNetworkEdge
lastEdge
=
null
;
...
...
src/de/tud/kom/p2psim/impl/topology/movement/vehicular/sumo/simulation/controller/xml/XMLSimulationController.java
View file @
8a484e4e
...
...
@@ -14,6 +14,7 @@ import de.tud.kom.p2psim.impl.topology.movement.vehicular.information.Position;
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.csv.RoadSideUnitInformationHandler
;
import
de.tudarmstadt.maki.simonstrator.api.component.vehicular.roadnetwork.RoadNetworkRoute
;
public
class
XMLSimulationController
implements
VehicleController
,
SimulationSetupExtractor
,
Runnable
{
private
String
_vehicleDataPath
;
...
...
@@ -165,4 +166,9 @@ public class XMLSimulationController implements VehicleController, SimulationSet
return
-
1
;
}
@Override
public
RoadNetworkRoute
getCurrentRoute
(
String
pVehicleID
)
{
throw
new
UnsupportedOperationException
(
"This method is not supported for "
+
getClass
().
getSimpleName
());
}
}
src/de/tud/kom/p2psim/impl/vehicular/DefaultVehicleInformationComponent.java
0 → 100755
View file @
8a484e4e
/*
* 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.vehicular
;
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.tudarmstadt.maki.simonstrator.api.Host
;
import
de.tudarmstadt.maki.simonstrator.api.component.vehicular.VehicleInformationComponent
;
import
de.tudarmstadt.maki.simonstrator.api.component.vehicular.roadnetwork.RoadNetworkRoute
;
public
class
DefaultVehicleInformationComponent
implements
VehicleInformationComponent
{
private
Host
host
;
private
VehicleController
controller
;
private
SimulationSetupExtractor
extractor
;
private
String
vehicleID
;
public
DefaultVehicleInformationComponent
(
Host
host
,
VehicleController
controller
,
SimulationSetupExtractor
extractor
)
{
this
.
host
=
host
;
this
.
controller
=
controller
;
this
.
extractor
=
extractor
;
}
@Override
public
void
setVehicleID
(
String
pVehicleID
)
{
vehicleID
=
pVehicleID
;
}
@Override
public
void
resetVehicleID
()
{
vehicleID
=
null
;
}
@Override
public
void
initialize
()
{
// TODO Auto-generated method stub
}
@Override
public
void
shutdown
()
{
// TODO Auto-generated method stub
}
@Override
public
Host
getHost
()
{
return
host
;
}
@Override
public
RoadNetworkRoute
getCurrentRoute
()
{
return
controller
.
getCurrentRoute
(
vehicleID
);
}
}
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