Navigation in Applications
The navigation of vehicles (i.e. calculation of routes) is handled completely by the
Application Simulator. Each vehicle is equipped
with a NavigationModule
which provides all required information and functions for navigational purposes:
- Retrieve the current position and heading of the vehicle.
- Get the target of the vehicle.
- Calculate various routes from the current position to an arbitrary target.
- Choose a suitable route out of existing ones from the current position to an arbitrary target.
- Switch onto a specific route.
In order to provide routing functionality, a map model based on Open Street Map data is used, which
needs to be transformed before the simulation using scenario-convert (see
Create a new Scenario).
The map data including initial routes for vehicles is provided with the database file which needs to be located in
mosaic/scenarios/<scenario_name>/application/<scenario_name>.db
. Further information about the database can be found in the
scenario database documentation.
To access routing capabilities for non-moving entities (i.e. RSUs or Servers), the getRoutingModule()
method can be used,
which provides similar functionality as the navigation module except route switching.
Configuration
If the database needs to be located somewhere else, the path can be specified in
mosaic/scenarios/<scenario_name>/application/application_config.json
:
{
...
"navigationConfiguration": {
"databaseFile": "path/to/scenario.db"
}
}
Note: Different from other modules bundled with the application simulator the navigation module doesn’t need to be explicitly enabled.
Usage
The following snippet shows, how the navigation system can be used within an application:
//get navigation module
NavigationModule navigationModule = getOs().getNavigationModule();
//choose current target as target position
RoutingPosition targetPosition = new RoutingPosition(navigationModule.getTargetPosition());
//set routing parameters to fastest route search
RoutingParameters params = new RoutingParameters().costFunction(IRoutingCostFunction.Fastest);
//calculate routes
RoutingResponse response = navigationModule.calculateRoutes(targetPosition, params);
//switch to best route
if (response.getBestRoute() != null) {
boolean routeSwitched = navigationModule.switchRoute(response.getBestRoute());
...
}