| <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
| <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> |
| <channel> |
| <title>Simulators Overview | Eclipse MOSAIC – A Multi-Domain and Multi-Scale Simulation Framework for Connected and Automated Mobility</title> |
| <link>https://staging.eclipse.org/mosaic/docs/simulators/</link> |
| <atom:link href="https://staging.eclipse.org/mosaic/docs/simulators/index.xml" rel="self" type="application/rss+xml" /> |
| <description>Simulators Overview</description> |
| <generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>en-us</language><lastBuildDate>Sun, 05 May 2019 00:00:00 +0100</lastBuildDate> |
| <image> |
| <url>https://staging.eclipse.org/mosaic/images/logo.svg</url> |
| <title>Simulators Overview</title> |
| <link>https://staging.eclipse.org/mosaic/docs/simulators/</link> |
| </image> |
| |
| <item> |
| <title>Eclipse MOSAIC Application Simulator</title> |
| <link>https://staging.eclipse.org/mosaic/docs/simulators/application_simulator/</link> |
| <pubDate>Sun, 05 May 2019 00:00:00 +0100</pubDate> |
| <guid>https://staging.eclipse.org/mosaic/docs/simulators/application_simulator/</guid> |
| <description><p>The <strong>Application Simulator</strong> plays an important role in the simulation of vehicles and its functions. It provides the capability |
| to model the application logic for different simulation units (e.g. vehicles, road side units (RSUs), traffic lights, and others) |
| as well as possible interaction attempts between the units via different communication links.</p> |
| <h3 id="folder-structure">Folder Structure</h3> |
| <pre><code class="language-plaintext">└─ &lt;scenario_name&gt; |
| ├─ application |
| | ├─ YourApplication.jar |
| | ├─ application_config.json ............. Configuration file for the ambassador. |
| | └─ &lt;scenario_name&gt;.db .................. Database file for navigation. |
| └─ mapping |
| └─ mapping_config.json ................. Configuration file for the ambassador. |
| </code></pre> |
| <p>This ambassador can be configured with a configuration file. The specific path is |
| <code>&lt;scenario_name&gt;/application/application_config.json</code>. However, it is not necessary to provide such file.</p> |
| <h3 id="installation">Installation</h3> |
| <p>This simulator does not need to be installed. It is delivered as part of the Eclipse MOSAIC installation package.</p> |
| <h3 id="overview">Overview</h3> |
| <p>Each simulation unit (e.g. vehicle, RSU, traffic light ..) can have different applications (depending on their application |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/simulators/application_mapping/"> |
| Mapping |
| </a> |
| . The applications |
| for the units are basically compiled JAVA classes, which <strong>extend</strong> the abstract class <code>AbstractApplication</code>. Those |
| classes have to be deployed as pre-compiled JAR files into the <code>application</code> folder of the simulated scenario.</p> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <figure id="figure-overview-of-interaction-between-applications-and-the-units-operating-system-with-its-modules-an-example-v2x-message-propagation-is-presented"> |
| |
| |
| <a data-fancybox="" href="../images/application_overview.svg" data-caption="Overview of interaction between applications and the unit&rsquo;s operating system with its modules. An example V2X message propagation is presented."> |
| |
| |
| <img src="../images/application_overview.svg" alt="" > |
| </a> |
| |
| |
| |
| |
| <figcaption> |
| Overview of interaction between applications and the unit&rsquo;s operating system with its modules. An example V2X message propagation is presented. |
| </figcaption> |
| |
| |
| </figure> |
| |
| <h4 id="application-operating-system">Application Operating System</h4> |
| <p>The <code>AbstractApplication</code> possesses a unit-specific <code>OperatingSystem</code>, which allows interactions with the simulated parameters. |
| The operating system provides access to information like the current time or position of the units and could control unit-specific |
| actions (like <code>slowDown()</code> for vehicles).</p> |
| <p>As the interaction types for navigation (retrieving road network information and calculating routes) and communication (preparing and |
| sending messages) are more complex, they are separated into the specific modules <code>NavigationModule</code> (Navigation + Routing for |
| vehicles) / <code>RoutingModule</code> (Routing-only for static units) and <code>AdHocModule</code> / <code>CellModule</code> with APIs dedicated to their purpose.</p> |
| <p>The following table lists all modules a unit&rsquo;s operating system could provide.</p> |
| <table> |
| <thead> |
| <tr> |
| <th>Module</th> |
| <th>Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>NavigationModule</td> |
| <td>Full featured access to the central navigation component for vehicles</td> |
| </tr> |
| <tr> |
| <td>RoutingModule</td> |
| <td>Access to routing functionalities for static units as RSUs</td> |
| </tr> |
| <tr> |
| <td>AdHocModule</td> |
| <td>Communication via ad hoc mode, using WIFI or ITS G5 specific means (e.g. for addressing)</td> |
| </tr> |
| <tr> |
| <td>CellModule</td> |
| <td>Communication via cellular services (different configuration / addressing modes)</td> |
| </tr> |
| </tbody> |
| </table> |
| <blockquote> |
| <p><strong>Note:</strong> The presented communication modules <code>AdHocModule</code>, <code>CellModule</code> are used for the sending part of a transmission. The message |
| reception is realized by Application Interfaces provided by the <code>CommunicationApplication</code>.</p> |
| </blockquote> |
| <h4 id="application-interfaces">Application Interfaces</h4> |
| <p>Application interfaces handle call-backs to incoming events via their methods, like <code>onVehicleUpdated()</code>, called by the |
| application simulator. The following table lists all interfaces usable for application implementation, the type of unit as well as |
| important other interfaces it implements. Interface specific public methods which have to be implemented by the user are listed in the |
| &ldquo;Provides&rdquo; column. The elementary interface (<code>Application</code>) provides the methods <code>onStartup()</code>, <code>onShutdown()</code>. Implementation details |
| are given in |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/develop_applications/"> |
| Development of applications |
| </a> |
| .</p> |
| <table> |
| <thead> |
| <tr> |
| <th>Interface</th> |
| <th>Applicable to</th> |
| <th>Provides</th> |
| <th>Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td><code>Application / AbstractApplication</code></td> |
| <td><em>all</em></td> |
| <td><code>onStartup</code>, <code>onShutdown</code></td> |
| <td>Elementary application class providing an operating system</td> |
| </tr> |
| <tr> |
| <td><code>ConfigurableApplication</code></td> |
| <td><em>all</em></td> |
| <td></td> |
| <td>Basic application class providing an operating system and a configuration, which automatically loaded from a JSON file.</td> |
| </tr> |
| <tr> |
| <td><code>CommunicationApplication</code></td> |
| <td><em>all</em></td> |
| <td><code>onMessageReceived</code>, <code>onAcknowledgementReceived</code>, <code>onCamBuilding</code>, <code>onMessageTransmitted</code></td> |
| <td>All applications that implement some form of V2X communication are to implement this interface.</td> |
| </tr> |
| <tr> |
| <td><code>VehicleApplication</code></td> |
| <td>vehicle</td> |
| <td><code>onVehicleUpdated</code></td> |
| <td>General vehicle funtionality</td> |
| </tr> |
| <tr> |
| <td><code>ElectricVehicleApplication</code></td> |
| <td>vehicle</td> |
| <td><code>onBatteryStateUpdated</code>, <code>onChargingRequestRejected</code></td> |
| <td>Electric vehicle functionality</td> |
| </tr> |
| <tr> |
| <td><code>TrafficSignAwareApplication</code></td> |
| <td>vehicle</td> |
| <td><code>onTrafficSignInvalidated</code>, <code>onTrafficSignNoticed</code></td> |
| <td>Used by vehicles which are aware of traffic signs.</td> |
| </tr> |
| <tr> |
| <td><code>TrafficLightApplication</code></td> |
| <td>traffic light</td> |
| <td><code>onTrafficLightGroupUpdated</code></td> |
| <td>Traffic light functionality</td> |
| </tr> |
| <tr> |
| <td><code>TrafficManagementCenterApplication</code></td> |
| <td>TMC</td> |
| <td><code>onInductionLoopUpdated</code>, <code>onLaneAreaDetectorUpdated</code></td> |
| <td>Traffic management functionality</td> |
| </tr> |
| <tr> |
| <td><code>MosaicApplication</code></td> |
| <td><em>all</em></td> |
| <td><code>onSumoTraciResponded</code>, <code>onInteractionReceived</code></td> |
| <td>Features that involve customized RTI-interactions of MOSAIC</td> |
| </tr> |
| </tbody> |
| </table> |
| <p><strong>Note:</strong> A roadside unit (RSU) is the most unit and usually communicates only. Thus, an RSU application implements <code>CommunicationApplication</code>.</p> |
| <hr> |
| <h3 id="configuration">Configuration</h3> |
| <p>The Application simulator is configured in the file <code>&lt;scenario_name&gt;/application/application_config.json</code>:</p> |
| <pre><code class="language-json">{ |
| &quot;messageCacheTime&quot;: &quot;30s&quot;, |
| &quot;minimalPayloadLength&quot;: 200, |
| &quot;encodePayloads&quot;: true, |
| &quot;navigationConfiguration&quot; : { |
| &quot;type&quot;: &quot;database&quot; |
| } |
| } |
| </code></pre> |
| <p>Furthermore, depending on the deployed applications, the applications itself may offer configuration options |
| in custom configuration files (e.g. <code>ETSIApplication.json</code> or <code>ETSIApplication_veh_0.json</code>).</p> |
| <hr> |
| <h2 id="basic-applications">Basic Applications</h2> |
| <p>Eclipse MOSAIC is shipped with several example applications which can be loaded on the vehicles. Next to the applications shipped with |
| the tutorial scenarios <strong>Barnim</strong> and <strong>Tiergarten</strong>, there are further example applications to be found on our website.</p> |
| <p>Additionally, we provide an ETSI conform application which implement specific CAM generation rules for vehicles |
| (<code>org.eclipse.mosaic.fed.application.app.etsi.VehicleCamSendingApp</code>), which is described in the following:</p> |
| <h4 id="etsi-application-for-vehicles">ETSI Application for vehicles</h4> |
| <p>This application generates ETSI data for its simulation unit (e.g. heading, position, speed and time for |
| vehicles). According to its configuration, the application then sends out CAMs to other vehicles in range. |
| Note that the messages are only send when the time lies between the configured minimum and maximum |
| interval.</p> |
| <p>Currently, the default configuration (<code>ETSIApplication.json</code>) for the ETSI application looks like this:</p> |
| <pre><code class="language-json">{ |
| /* The maximum time offset (here 1 second) of sending CA-messages |
| * (the offset will be different for every single vehicle to avoid interference) */ |
| &quot;maxStartOffset&quot;: 1000000000, |
| /* CAMs are sent at most every 1 second */ |
| &quot;minInterval&quot;: 100000000, |
| /* CAMs are sent at least every 1 second */ |
| &quot;maxInterval&quot;: 1000000000, |
| /* CAMs are sent when the position of the vehicle changes at least about 4 meters */ |
| &quot;positionChange&quot;: 4, |
| /* CAMs are sent when the heading of the vehicle changes at least about 4 degrees */ |
| &quot;headingChange&quot;: 4, |
| /* CAMs are sent when the velocity of the vehicle changes at least about 0.5 m/s */ |
| &quot;velocityChange&quot;: 0.5 |
| } |
| </code></pre> |
| <p>The CAMs sent out by this application consist of four parts:</p> |
| <ul> |
| <li>Header with generic information</li> |
| <li>MessageBody</li> |
| <li>TaggedValue list</li> |
| </ul> |
| <p>First of all, generic information like protocol version and creation time stamp are transmitted. Normally |
| this data set follows a network beacon, already containing data like position and speed. Nevertheless |
| this functionality must be implemented in the network layer, i.e. in the network simulator. At |
| the moment this is not supported and is therefore compensated in the next message part, the message |
| body. The body contains vehicle awareness data, including data like vehicle width, length, position, speed, type and heading. |
| However, the specification is not completely implemented. Last but not least a message can contain optional data.</p> |
| </description> |
| </item> |
| |
| <item> |
| <title>Simulation Entities and Application Mapping</title> |
| <link>https://staging.eclipse.org/mosaic/docs/simulators/application_mapping/</link> |
| <pubDate>Sun, 05 May 2019 00:00:00 +0100</pubDate> |
| <guid>https://staging.eclipse.org/mosaic/docs/simulators/application_mapping/</guid> |
| <description><p>Closely related to the Application Simulator, the <strong>Mapping</strong> Ambassador is used for the initial choreography of a simulation. |
| It defines two major aspects for the simulation units:</p> |
| <ol> |
| <li>number, properties, position (e.g. of RSUs, traffic lights) or initial routes (of vehicles, simulated in a traffic/vehicle simulator)</li> |
| <li>specific application(s) to be &ldquo;mapped&rdquo; on the simulation units and simulated in the Application Simulation</li> |
| </ol> |
| <p>The JSON based configuration is located in <code>&lt;scenario_name&gt;/mapping/mapping_config.json</code>.</p> |
| <h3 id="configuration">Configuration</h3> |
| <p>The Mapping configuration is divided into different parts:</p> |
| <ul> |
| <li>Pre Definitions of <code>prototypes</code> and <code>deviations</code></li> |
| <li>Entity Definitions of <code>vehicles</code>, <code>rsus</code>, <code>tls</code> <code>servers</code> and <code>tmcs</code></li> |
| <li>Advanced Vehicle Definitions (including route generation) in <code>matrixMappers</code></li> |
| <li>Common Definitions in <code>config</code></li> |
| </ul> |
| <h4 id="prototypes">Prototypes</h4> |
| <p><code>prototypes</code> define models for other objects, which can be reused later in the other sections of the Mapping. This allows reusing the |
| definition of certain entities such as vehicles or the combination of multiple applications, reducing redundancies and resulting in |
| shorter Mapping configurations.</p> |
| <pre><code class="language-json">&quot;prototypes&quot;: [ |
| { |
| &quot;name&quot;: &quot;CamVehicle&quot;, |
| &quot;accel&quot;: 2.6, |
| &quot;decel&quot;: 4.5, |
| &quot;length&quot;: 5.00, |
| &quot;maxSpeed&quot;: 70.0, |
| &quot;applications&quot;: [ &quot;org.eclipse.mosaic.fed.application.app.etsi.VehicleCamSendingApp&quot; ] |
| } |
| ] |
| </code></pre> |
| <p>Prototypes can be created for all types of entities. Next to the list of <code>applications</code> which is available for all types of entities, |
| vehicle types provide various other parameters to be adjusted.</p> |
| <table> |
| <thead> |
| <tr> |
| <th>Parameter</th> |
| <th>Description</th> |
| <th>Deviation</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td><code>vehicleClass</code></td> |
| <td>The class of the vehicle, e.g. <code>Car</code>, <code>ElectricVehicle</code>, <code>EmergencyVehicle</code>, <code>Bicycle</code>, <code>HeavyGoodsVehicle</code>, and more.</td> |
| <td></td> |
| </tr> |
| <tr> |
| <td><code>accel</code></td> |
| <td>The maximum acceleration of the vehicle in $m/s^2$.</td> |
| <td>Yes</td> |
| </tr> |
| <tr> |
| <td><code>decel</code></td> |
| <td>The maximum deceleration of the vehicle in $m/s^2$, e.g. when stopping for traffic lights.</td> |
| <td>Yes</td> |
| </tr> |
| <tr> |
| <td><code>emergencyDecel</code></td> |
| <td>The maximum deceleration of the vehicle in $m/s^2$, in order to avoid accidents.</td> |
| <td></td> |
| </tr> |
| <tr> |
| <td><code>length</code></td> |
| <td>The length of the vehicle in $m$.</td> |
| <td>Yes</td> |
| </tr> |
| <tr> |
| <td><code>maxSpeed</code></td> |
| <td>The maximum speed of the vehicle in $m/s$.</td> |
| <td>Yes</td> |
| </tr> |
| <tr> |
| <td><code>minGap</code></td> |
| <td>The minimum gap towards the leader in $m$, i.e. the space in front in a traffic jam.</td> |
| <td>Yes</td> |
| </tr> |
| <tr> |
| <td><code>sigma</code></td> |
| <td>The driver&rsquo;s imperfection $[0,1]$.</td> |
| <td></td> |
| </tr> |
| <tr> |
| <td><code>tau</code></td> |
| <td>The reaction time (or time headway) of the vehicle in $s$.</td> |
| <td>Yes</td> |
| </tr> |
| <tr> |
| <td><code>speedFactor</code></td> |
| <td>This factor is used to determine the speed limit to comply on roads, e.g. <code>1.1</code> would exceed the speed limit by 10%.</td> |
| <td>Yes</td> |
| </tr> |
| <tr> |
| <td><code>laneChangeMode</code></td> |
| <td>The lane changing behavior of the vehicle: <code>COOPERATIVE</code>. <code>CAUTIOUS</code>, <code>AGGRESSIVE</code>, <code>PASSIVE</code>, <code>OFF</code></td> |
| <td></td> |
| </tr> |
| <tr> |
| <td><code>applications</code></td> |
| <td>The list of applications to map onto this vehicle type.</td> |
| <td></td> |
| </tr> |
| </tbody> |
| </table> |
| <p>For the majority of the parameters above (see column &ldquo;Deviation&rdquo;), a normal distribution can be created. In that case, each individual |
| vehicle spawned with this prototype will be loaded with a random value within this distribution. To achieve this, a separate <code>deviations</code> |
| attribute must be added to the type:</p> |
| <pre><code class="language-json">&quot;prototypes&quot;: [ |
| { |
| &quot;name&quot;: &quot;Car&quot;, |
| &quot;length&quot;: 5.0, |
| &quot;maxSpeed&quot;: 70.0, |
| &quot;deviations&quot;: { |
| &quot;length&quot;: 1.2, |
| &quot;maxSpeed&quot;: 5.0 |
| } |
| } |
| ] |
| </code></pre> |
| <p>According to the config above, the basic parameter value conforms to the expected value, and the given value in the <code>deviations</code> |
| attribute conforms to the $\sigma$ of the Gaussian distribution(meaning for the example of maxSpeed that ~68% of the values will |
| be located in the interval [65.0, 75.0]). The deviation will be limited to ±2$\sigma$.</p> |
| <h4 id="entities">Entities</h4> |
| <p><strong>Vehicles</strong></p> |
| <p>The <code>vehicles</code>-section is the centerpiece of the Mapping configuration. It defines the departures (times and number), |
| routes, and types of the vehicles.</p> |
| <p>Each spawner in this list generates a traffic stream of vehicles on a certain <code>route</code>. The vehicles stream begins at <code>startingTime</code> and |
| generates vehicles until <code>maxNumberVehicles</code> is reached. The time between two consecutively vehicles is implicitly given by the |
| <code>targetFlow</code> property, which defines how many vehicles per hour are going to be spawned.</p> |
| <p>Each vehicle spawner must refer to at least one vehicle type (<code>types</code>). A vehicle type must either refer to a type from the <code>prototypes</code> |
| section by using its <code>name</code>, or be defined as a completely new vehicle type with all necessary parameters. If more than one vehicle type |
| is referenced in the <code>types</code> attribute, <code>weight</code>s can be used to specify the ratios to choose between them when loading an individual |
| vehicle. If no weights are defined, individual vehicle types are assumed to be distributed equally.</p> |
| <blockquote> |
| <p>Note: if at least one vehicle type has a weight defined, all types without a defined weight are ignored.</p> |
| </blockquote> |
| <pre><code class="language-json">&quot;vehicles&quot;: [ |
| { |
| &quot;startingTime&quot;: 5.0, |
| &quot;targetFlow&quot;: 1800, |
| &quot;maxNumberVehicles&quot;: 120, |
| &quot;route&quot;: &quot;1&quot;, |
| &quot;types&quot;: [ |
| { |
| &quot;name&quot;: &quot;CAMVehicle&quot;, |
| &quot;weight&quot;: 0.1 |
| }, |
| { |
| &quot;name&quot;: &quot;NormalVehicle&quot;, // this vehicle has no applications |
| &quot;applications&quot;: [ ], |
| &quot;weight&quot;: 0.2 |
| } |
| ] |
| } |
| ] |
| </code></pre> |
| <p>Additional notes:</p> |
| <ul> |
| <li>The <code>route</code> refers to a route usually defined in the scenario database file (<code>*.db</code>) of the scenario.</li> |
| <li>In order to define only one single vehicle to be spawned, the <code>maxNumberVehicles</code> property can be set to <code>1</code>.</li> |
| <li>By defining the <code>endingTime</code> property, the flow is stopped from being generated when the given simulation time is reached.</li> |
| <li>By defining the <code>spawningMode</code> to one of the following values, the departure time of the individual vehicles can be adjusted: |
| <ul> |
| <li><code>CONSTANT</code> - default case, all vehicles have equal time distance to match <code>target_flow</code>.</li> |
| <li><code>POISSON</code> - vehicles depart within a Poisson distribution, resulting in a more natural traffic flow.</li> |
| <li><code>GROW</code> - the flow of departing vehicles increases linear up to <code>target_flow</code>.</li> |
| <li><code>SHRINK</code> - the flow of departing vehicles decreases linear starting at <code>target_flow</code>.</li> |
| <li><code>GROW_AND_SHRINK</code> - the flow of departing vehicles increases up to <code>target_flow</code> and decreases afterwards.</li> |
| </ul> |
| </li> |
| <li>By defining the <code>laneSelectionMode</code> to one the following values, the selection of the departure lane can be adjusted: |
| <ul> |
| <li><code>DEFAULT</code> - selects the lane for the next vehicle based on the list of given <code>lanes</code> in a roundrobin manner.</li> |
| <li><code>ROUNDROBIN_HIGHWAY</code> - trucks will be spawned on the rightmost lane, all other vehicles according to <code>DEFAULT</code>.</li> |
| <li><code>HIGHWAY</code> - trucks will be spawned on the rightmost lane, all other vehicles according to <code>BEST</code>.</li> |
| <li><code>RANDOM</code> - the vehicle will be placed randomly on one of the available lanes of the road.</li> |
| <li><code>FREE</code> - the vehicle will be placed on a free lane of the road.</li> |
| <li><code>BEST</code> - the vehicle will be placed on the best lane of the road, according to the current traffic situation and departure speed.</li> |
| </ul> |
| </li> |
| </ul> |
| <p><strong>Road Side Units</strong></p> |
| <p>The <code>rsus</code>-section offers the possibility to define instances of application supported Road Side Units (RSU)s and place them on a |
| defined position (<code>lat</code>, <code>lon</code> coordinates). Referring to <code>prototype</code> definitions with simply specifying its name in the <code>name</code> |
| property will automatically fill in relevant properties of the RSU.</p> |
| <pre><code class="language-json">&quot;rsus&quot;: [ |
| { |
| &quot;lat&quot;: 52.65027, |
| &quot;lon&quot;: 13.54500, |
| &quot;name&quot;: &quot;WeatherServer&quot;, |
| &quot;applications&quot;: [ &quot;org.eclipse.mosaic.app.tutorial.WeatherServerApp&quot; ] |
| } |
| ] |
| </code></pre> |
| <p><strong>Traffic Lights</strong></p> |
| <p>In the <code>trafficLights</code>-section, applications can be mapped to traffic light groups. Usually, individual traffic lights are part of |
| traffic light groups to control a whole junction, whereas the junction possesses a certain position. The traffic light groups and |
| their positions are defined in the simulator specific configuration file (e.g. the *.net.xml for SUMO and *.ttl.json for PHABMACS). |
| The <code>tlGroupId</code>-property allows mapping of applications to the traffic light groups, referring them by Id.</p> |
| <p>Alternatively, the definition of the <code>weight</code>-property leads to a random distribution of the referred applications through ALL traffic lights of the |
| scenario (Note: The weights do not have to add up to 100 or 1). Consequently, all traffic lights will be mapped using the specified |
| prototypes as soon as one weight differs from zero. So in case you don’t want all traffic lights to have applications running on them you |
| have to define one traffic light without any applications and add a weight to it. If neither tlGroupId nor weight are defined for an app, the weight will be set to 1.</p> |
| <pre><code class="language-json">&quot;trafficLights&quot;: [ |
| { |
| &quot;tlGroupId&quot;: &quot;26704448&quot;, |
| &quot;applications&quot;: [ &quot;org.eclipse.mosaic.app.tutorial.TrafficLightApp&quot; ] |
| }, |
| { |
| &quot;tlGroupId&quot;: &quot;252864802&quot;, |
| &quot;applications&quot;: [ &quot;org.eclipse.mosaic.app.tutorial.TrafficLightApp&quot; ] |
| } |
| ] |
| </code></pre> |
| <p>For more information, explained for detailed examples with different mapping options regarding traffic lights, please refer to |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/building_scenarios/#traffic-lights"> |
| Simulation Scenarios - Traffic Lights |
| </a> |
| .</p> |
| <p><strong>Servers</strong></p> |
| <p>The <code>servers</code>-array can be used to specify server units, which can be used to communicate with other units via the cell module. |
| Capacity configurations for servers should be done when enabling the <code>CellModule</code>. Delay and transmission models are configured |
| in the <code>network.json</code> of the cell module (see |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/simulators/network_simulator_cell/"> |
| here |
| </a> |
| ).</p> |
| <blockquote> |
| <p>Note: The <code>group</code> parameter in the mapping configuration has to match with the id in the network configuration in order to |
| properly function.</p> |
| </blockquote> |
| <pre><code class="language-json">&quot;servers&quot;: [ |
| { |
| &quot;name&quot;: &quot;MyServer&quot;, |
| &quot;group&quot;: &quot;TestServers&quot;, |
| &quot;applications&quot;: [ &quot;ServerApp1&quot;, &quot;ServerApp2&quot; ] |
| } |
| ] |
| </code></pre> |
| <p><strong>Traffic Management Centers</strong></p> |
| <p>The <code>tmc</code>-section offers the possibility to define instances of a Traffic Management Center (TMC). A TMC |
| provides the possibility to interact with the infrastructure of the road, i.e. retrieving traffic properties |
| from detectors (e.g. traffic flow), and changing properties from the road (e.g. speed limits). |
| Additionally, TMCs are an extension of Servers and can be configured in the same way that servers are</p> |
| <pre><code class="language-json">&quot;tmcs&quot;: [ |
| { |
| &quot;name&quot;: &quot;HighwayManagement&quot;, |
| &quot;group&quot;: &quot;TestTmcServers&quot;, |
| &quot;applications&quot;: [ &quot;org.eclipse.mosaic.app.tutorial.HighwayManagementApp('3', 3)&quot; ], |
| &quot;inductionLoops&quot;: [ &quot;detector_0&quot;, &quot;detector_1&quot;, &quot;detector_2&quot; ], |
| &quot;laneAreaDetectors&quot;: [ ] |
| } |
| ] |
| </code></pre> |
| <blockquote> |
| <p>All unit spawners could be realized in two different ways. The Deterministic Mapping produces the exact same sequence of mapped vehicles |
| in every simulation run with regard to the given ratios at each point in time the simulation). |
| The Stochastic Mapping results in a random order of mapped units.</p> |
| </blockquote> |
| <h4 id="use-type-distributions-in-complex-traffic-scenarios">Use Type Distributions in Complex Traffic Scenarios</h4> |
| <p>In the case, you have many vehicle spawners defined and you want to distribute prototypes on those vehicles equally without defining them |
| again and again, you can use <code>typeDistributions</code>. By doing so, it is very simple to adjust the list of types and weights at only one |
| place in the configuration file.</p> |
| <p>Instead of defining an equal list of types and weights for each single vehicle spawner, like in this example:</p> |
| <pre><code class="language-json">&quot;vehicles&quot;: [ |
| { |
| &quot;startingTime&quot;: 5.0, |
| &quot;targetFlow&quot;: 1800, |
| &quot;maxNumberVehicles&quot;: 120, |
| &quot;route&quot;: &quot;1&quot;, |
| &quot;types&quot;: [ |
| { &quot;name&quot;: &quot;TypeA&quot;, &quot;weight&quot;: 0.1 }, |
| { &quot;name&quot;: &quot;TypeB&quot;, &quot;weight&quot;: 0.9 } |
| ] |
| }, |
| { |
| &quot;startingTime&quot;: 55.0, |
| &quot;targetFlow&quot;: 1800, |
| &quot;maxNumberVehicles&quot;: 120, |
| &quot;route&quot;: &quot;2&quot;, |
| &quot;types&quot;: [ |
| { &quot;name&quot;: &quot;TypeA&quot;, &quot;weight&quot;: 0.1 }, |
| { &quot;name&quot;: &quot;TypeB&quot;, &quot;weight&quot;: 0.9 } |
| ] |
| } |
| ] |
| </code></pre> |
| <p>&hellip; you can use <code>typeDistributions</code> to define the distribution of types for each vehicle once and reuse them:</p> |
| <pre><code class="language-json">&quot;typeDistributions&quot;: { |
| &quot;exampleTypeDist&quot; : [ |
| { &quot;name&quot;: &quot;TypeA&quot;, &quot;weight&quot;: 0.1 }, |
| { &quot;name&quot;: &quot;TypeB&quot;, &quot;weight&quot;: 0.9 } |
| ] |
| }, |
| &quot;vehicles&quot;: [ |
| { |
| &quot;startingTime&quot;: 5.0, |
| &quot;targetFlow&quot;: 1800, |
| &quot;maxNumberVehicles&quot;: 120, |
| &quot;route&quot;: &quot;1&quot;, |
| &quot;typeDistribution&quot;: &quot;exampleTypeDist&quot; |
| }, |
| { |
| &quot;startingTime&quot;: 55.0, |
| &quot;targetFlow&quot;: 1800, |
| &quot;maxNumberVehicles&quot;: 120, |
| &quot;route&quot;: &quot;2&quot;, |
| &quot;typeDistribution&quot;: &quot;exampleTypeDist&quot; |
| } |
| ] |
| </code></pre> |
| <h4 id="advanced-vehicle-spawners-with-route-generation">Advanced vehicle spawners with route generation</h4> |
| <p>It is also possible to define and use OD (origin-destination) matrices by adding a ODMatrixMapper to the <code>matrixMappers</code>-list. |
| Each MatrixMapper consists of a list of <code>points</code>, the vehicle-<code>types</code> to be used and the actual flow-values (<code>odValues</code>) between each |
| of the points. It is possible to define multiple matrices. This way can achieve distinctively different compositions of the vehicle flows.</p> |
| <p>The MatrixMapper will be called before the actual execution of the simulation and will generate vehicle-spawners for the flow between |
| each of the points.</p> |
| <pre><code class="language-json"> |
| &quot;matrixMappers&quot;: [ |
| { |
| &quot;points&quot;: [ |
| { |
| &quot;name&quot;: &quot;CityA&quot;, |
| &quot;position&quot;: { |
| &quot;center&quot;: { |
| &quot;latitude&quot;: 52, |
| &quot;longitude&quot;: 13 |
| }, |
| &quot;radius&quot;: 1000 |
| } |
| }, |
| { |
| &quot;name&quot;: &quot;CityB&quot;, |
| &quot;position&quot;: { |
| &quot;center&quot;: { |
| &quot;latitude&quot;: 48, |
| &quot;longitude&quot;: 10 |
| }, |
| &quot;radius&quot;: 1000 |
| } |
| } |
| ], |
| &quot;types&quot;: [ |
| { |
| &quot;name&quot;: &quot;CAMVehicle&quot; |
| } |
| ], |
| &quot;odValues&quot;: [ |
| [0, 100], //100 vehicles from CityA to CityB |
| [200, 0] //200 vehicles from CityB to CityA |
| ] |
| } |
| ] |
| </code></pre> |
| <h4 id="common-configuration">Common Configuration</h4> |
| <p>Next to the specific configuration of prototypes and simulation entities, some general parameters can be adjusted:</p> |
| <pre><code class="language-json">{ |
| &quot;config&quot;: { |
| &quot;scaleTraffic&quot; : 1.0, |
| &quot;start&quot;: 0, |
| &quot;end&quot;: 500, |
| &quot;adjustStartingTimes&quot;: false, |
| &quot;randomizeFlows&quot;: false, |
| &quot;randomizeStartingTimes&quot; : false, |
| &quot;randomizeWeights&quot;: false |
| } |
| } |
| </code></pre> |
| <table> |
| <thead> |
| <tr> |
| <th>Parameter</th> |
| <th>Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td><code>scaleTraffic</code></td> |
| <td>Scales the <code>targetFlow</code> of spawned vehicles per hour as well as the <code>maxNumberVehicles</code> by the given factor.</td> |
| </tr> |
| <tr> |
| <td><code>start</code></td> |
| <td>Adjusts the point in time (in $s$) to start spawning vehicles. Any vehicle spawner with a lower <code>startingTime</code> will be ignored.</td> |
| </tr> |
| <tr> |
| <td><code>end</code></td> |
| <td>Adjusts the point in time (in $s$) to end spawning vehicles. Any vehicle spawner with a greater <code>startingTime</code> will be ignored.</td> |
| </tr> |
| <tr> |
| <td><code>adjustStartingTimes</code></td> |
| <td>If set to <code>true</code>, the starting time of each spawner is reduced by the value in <code>start</code>.</td> |
| </tr> |
| <tr> |
| <td><code>randomizeFlows</code></td> |
| <td>If set to <code>true</code>, the departure time of vehicles within a vehicle spawner is slightly randomized.</td> |
| </tr> |
| <tr> |
| <td><code>randomizeStartingTimes</code></td> |
| <td>If set to <code>true</code>, the starting time of each vehicle spawner is slightly randomized.</td> |
| </tr> |
| <tr> |
| <td><code>randomizeWeights</code></td> |
| <td>If set to <code>true</code>, each <code>weight</code> greater than zero is slightly randomized.</td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="alert alert-tip"> |
| <div> |
| <p>Read the detailed documentation of the |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/mosaic_configuration/mapping_ambassador_config/"> |
| Mapping Configuration |
| </a> |
| .</p> |
| </div> |
| </div> |
| <h3 id="unit-identifiers">Unit Identifiers</h3> |
| <p>Every traffic object in Eclipse MOSAIC has a globally unique string identifier. These identifiers are used to identify |
| a traffic object in Eclipse MOSAIC as well as in different ambassadors. From user’s aspect, these identifiers will be seen in the log files |
| which are generated after a simulation. The following table explains, which identifier belongs to which traffic object.</p> |
| <table> |
| <thead> |
| <tr> |
| <th><strong>Traffic Object</strong></th> |
| <th><strong>Eclipse MOSAIC Internal ID</strong></th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td><strong>Vehicle</strong></td> |
| <td><code>veh_&lt;seq_nr&gt;</code></td> |
| </tr> |
| <tr> |
| <td><strong>RSU</strong></td> |
| <td><code>rsu_&lt;seq_nr&gt;</code></td> |
| </tr> |
| <tr> |
| <td><strong>TMC</strong></td> |
| <td><code>tmc_&lt;seq_nr&gt;</code></td> |
| </tr> |
| <tr> |
| <td><strong>Traffic Light</strong></td> |
| <td><code>tl_&lt;group_id&gt;</code></td> |
| </tr> |
| </tbody> |
| </table> |
| <ul> |
| <li><code>seq_nr</code> is the sequence number of simulated vehicles, RSUs, TMCs, each starting from zero.</li> |
| <li><code>group_id</code> is the group id of the traffic light.</li> |
| </ul> |
| </description> |
| </item> |
| |
| <item> |
| <title>Eclipse SUMO - Simulation of Urban MObility</title> |
| <link>https://staging.eclipse.org/mosaic/docs/simulators/traffic_simulator_sumo/</link> |
| <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate> |
| <guid>https://staging.eclipse.org/mosaic/docs/simulators/traffic_simulator_sumo/</guid> |
| <description><p><strong>Eclipse SUMO</strong> is a highly portable, microscopic and continuous road traffic |
| simulation tool. It is designed to handle large road networks faster than real-time and simulates each vehicle |
| individually.</p> |
| <table> |
| <thead> |
| <tr> |
| <th></th> |
| <th></th> |
| <th></th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td><strong>Operating System</strong></td> |
| <td>GNU/Linux and Microsoft Windows</td> |
| <td></td> |
| </tr> |
| <tr> |
| <td><strong>License</strong></td> |
| <td>EPL-2.0</td> |
| <td></td> |
| </tr> |
| <tr> |
| <td><strong>Website</strong></td> |
| <td> |
| |
| |
| |
| |
| <a href="https://www.eclipse.org/sumo/" target="_blank" rel="noopener"> |
| https://www.eclipse.org/sumo/ |
| </a> |
| </td> |
| <td></td> |
| </tr> |
| <tr> |
| <td><strong>Supported versions</strong></td> |
| <td>Recommended version:<br>Full support:<br>Limited support:</td> |
| <td>1.8.0<br>1.2.0 - 1.8.0<br>1.0.1, 1.1.0</td> |
| </tr> |
| <tr> |
| <td></td> |
| <td></td> |
| <td></td> |
| </tr> |
| </tbody> |
| </table> |
| <h3 id="installation">Installation</h3> |
| |
| |
| <a class="mosaic-btn mosaic-btn-primary" href="https://sumo.dlr.de/wiki/Downloads" title="Download Eclipse SUMO"><i class="fas fa-external-link-alt"></i>Download Eclipse SUMO</a> |
| |
| <p>Download the SUMO binary bundle or installer from the SUMO website. Linux users may build SUMO from the source code. |
| Please refer to the |
| SUMO Wiki for further information.</p> |
| <div class="alert alert-note"> |
| <div> |
| <p>In order to run SUMO with Eclipse MOSAIC you need to make the SUMO binaries available system wide by adding the SUMO |
| binary folder to your |
| <code>PATH</code> environment variable. Alternatively, the environment variable <code>SUMO_HOME</code> can be used to |
| define the installation directory of SUMO.</p> |
| </div> |
| </div> |
| <div class="alert alert-tip"> |
| <div> |
| <p>We recommend using the 64 bit version of SUMO if you want to simulate scenarios with large traffic networks.</p> |
| </div> |
| </div> |
| <h3 id="configuration">Configuration</h3> |
| <p>This ambassador can be configured with a configuration file. The specific path is <code>&lt;scenarioName&gt;/sumo/sumo_config.json</code>. |
| If no such file exists, the following default configuration options are used:</p> |
| <pre><code class="language-json">{ |
| &quot;updateInterval&quot;: 1000, |
| &quot;sumoConfigurationFile&quot;: &quot;&lt;scenarioName&gt;.sumo.cfg&quot;, |
| &quot;exitOnInsertionError&quot;: true, |
| &quot;additionalSumoParameters&quot;: &quot;--time-to-teleport 0 --seed 100000&quot;, |
| &quot;subscriptions&quot;: [ &quot;roadposition&quot;, &quot;signals&quot;, &quot;emissions&quot; ], |
| &quot;subscribeToAllVehicles&quot;: true |
| } |
| </code></pre> |
| <div class="alert alert-tip"> |
| <div> |
| <p>Read the detailed documentation of the |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/mosaic_configuration/sumo_config/"> |
| SUMO Configuration |
| </a> |
| .</p> |
| </div> |
| </div> |
| <p>Next to <code>sumo_config.json</code>, the following configuration files are required for every SUMO simulation scenario:</p> |
| <pre><code class="language-plaintext">└─ &lt;scenario_name&gt; |
| └─ sumo |
| ├─ &lt;scenarioName&gt;.net.xml .............. SUMO Network file |
| ├─ &lt;scenarioName&gt;.sumocfg .............. SUMO configuration file |
| └─ sumo_config.json .................... Ambassador configuraition file] |
| </code></pre> |
| <p>The SUMO configuration consists of sumo specific config files and the sumo-ambassador configuration |
| file. The main configuration file name must end with the suffix *.sumocfg, which needs to refer to the network. |
| The network file is mandatory and can be generated with the <code>scenario-convert</code> tool provided with Eclipse MOSAIC.</p> |
| <div class="alert alert-warning"> |
| <div> |
| <p>When you are coming from SUMO you might notice the missing route file (<code>*.rou.xml</code>). This is because with Eclipse MOSAIC, |
| the traffic definition (definition of vehicles, flows, vehicle types) is usually part of the Mapping configuration file. Routes |
| usually are defined in the Application database. You can however add route files to your scenario and mosaic will handle |
| all vehicles in coherence.</p> |
| </div> |
| </div> |
| <p>Vehicle related parameters, such as acceleration, maximum speed, and the like, are configured via the Mapping configuration file. However, |
| some SUMO specific parameters, like the car following model can only be configured in the <code>sumo_config.json</code>. For example, if you have |
| configured a vehicle type called <code>MyVehicle</code> in the Mapping configuration, you can set specific parameters for this type as following:</p> |
| <pre><code class="language-json">{ |
| ..., |
| &quot;additionalVehicleTypeParameters&quot;: { |
| &quot;MyVehicle&quot;: { |
| &quot;carFollowModel&quot;: &quot;IDM&quot;, |
| &quot;lcKeepRight&quot;: &quot;10&quot; |
| }, |
| ... |
| } |
| } |
| </code></pre> |
| <blockquote> |
| <p>Note: All parameters have to be specified as Strings.</p> |
| </blockquote> |
| <p>Further information about SUMO and its configuration can be found in the official SUMO wiki.</p> |
| <h3 id="using-the-sumo-gui-with-eclipse-mosaic">Using the SUMO GUI with Eclipse MOSAIC</h3> |
| <p>It is also possible to use the graphical interface of SUMO in order to visualize and interact with the simulation. |
| To |
| achieve this, Eclipse MOSAIC can be configured to start the GUI process of SUMO as the federate rather than the |
| command |
| line interface. In order to use the SUMO GUI the file <code>&lt;mosaic&gt;/etc/runtime.json</code> needs to be edited. |
| Here, the entry |
| <code>org.eclipse.mosaic.fed.sumo.ambassador.SumoAmbassador</code> must be |
| replaced with |
| <code>org.eclipse.mosaic.fed.sumo.ambassador.SumoGuiAmbassador</code>.</p> |
| <div class="alert alert-note"> |
| <div> |
| <p>Keep in mind to launch Eclipse MOSAIC with the argument <code>-w 0</code> in order to disable the watchdog timer. |
| Otherwise, it |
| would shut down Eclipse MOSAIC if the simulation is paused in the SUMO GUI.</p> |
| </div> |
| </div> |
| <h2 id="adding-vehicles">Adding Vehicles</h2> |
| <p>The <code>SumoAmbassador</code> handles vehicles added via Mapping (<em>mapping vehicles</em>) and via SUMO route files (<em>sumo vehicles</em>). |
| There are however some caveats:</p> |
| <ul> |
| <li><em>mapping vehicles</em> can drive on routes specified in route files, however <em>sumo vehicles</em> can&rsquo;t drive on routes specified in the scenario |
| database</li> |
| <li>you can only map applications on <em>sumo vehicles'</em> vehicle types, however you can work around this limitation by using |
| different vehicle types for different applications</li> |
| <li>Stay away from giving your <em>sumo vehicles</em> the prefix <code>veh_</code> since this will most likely lead to your simulation crashing, because |
| MOSAIC uses this as a prefix internally</li> |
| <li>The vehicle types defined in Mapping and defined in route files can&rsquo;t share the same names</li> |
| </ul> |
| <p>This duality of adding vehicles has some powerful use cases. For example, you can use an existing SUMO scenario and add your own |
| traffic via MOSAIC and equip all vehicles with applications.</p> |
| <h2 id="deep-dive-route-files--additional-files">Deep dive: Route Files / Additional Files</h2> |
| <p>In SUMO the route files (<code>&lt;..&gt;.rou.xml</code>) fulfill three main purposes supported by Eclipse MOSAIC:</p> |
| <ol> |
| <li>Define vehicle types.</li> |
| <li>Define routes for vehicles.</li> |
| <li>Define vehicle departures to spawn vehicles with defined types (1.) on defined routes (2.)</li> |
| </ol> |
| <p>These definitions can also be done in additional files (<code>&lt;...&gt;.add.xml</code>).</p> |
| <p>Route and vehicle departure definitions can also be handled by SUMO&rsquo;s <strong>Tr</strong>affic <strong>C</strong>ontrol <strong>I</strong>nterface (TraCI), which is also |
| the way Eclipse MOSAIC adds them to the simulation. This has the advantage that it can be done at runtime leading to a smaller overhead |
| before simulation start. Vehicle types however have to be defined in a route file, or an additional file before simulation start, |
| additional files have the advantage, that they are loaded before route files, which is helpful for our use case. |
| We write a new additional file (<code>mosaic_types.add.xml</code>), which contains types specified in Mapping and merges them |
| with the aforementioned <code>additionalVehicleTypeParameters</code> (Note: these are not validated in any form). The image below shows |
| a schematic view of how the configuration files and RTI components interact with each other. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <figure id="figure-schematic-overview-of-vehicle-type-handling-in-eclipse-mosaic"> |
| |
| |
| <a data-fancybox="" href="../images/sumo_route_files.svg" data-caption="Schematic overview of vehicle type handling in Eclipse MOSAIC"> |
| |
| |
| <img src="../images/sumo_route_files.svg" alt="" > |
| </a> |
| |
| |
| |
| |
| <figcaption> |
| Schematic overview of vehicle type handling in Eclipse MOSAIC |
| </figcaption> |
| |
| |
| </figure> |
| </p> |
| </description> |
| </item> |
| |
| <item> |
| <title>Network Simulator OMNeT++</title> |
| <link>https://staging.eclipse.org/mosaic/docs/simulators/network_simulator_omnetpp/</link> |
| <pubDate>Sun, 05 May 2019 00:00:00 +0100</pubDate> |
| <guid>https://staging.eclipse.org/mosaic/docs/simulators/network_simulator_omnetpp/</guid> |
| <description><p><strong>OMNeT++</strong> is a simulation platform for discrete-event systems. Even though it is primarily targeted at simulating computer networks and |
| distributed systems, it cannot be used without any extensions for wireless communication. For this kind of simulations, external model frameworks have to be included. |
| Currently, there are two prominent model frameworks which cover whole model suites for according focus of wireless research. |
| These are the Mobility Framework and the <strong>INET</strong> Framework. As INET provides all models necessary for simulating Vehicle-2-X communication, |
| it is selected for the integration to Eclipse MOSAIC.</p> |
| <p>For more information on the <strong>INET</strong> extension you should look closer on the |
| |
| |
| |
| |
| <a href="https://inet.omnetpp.org" target="_blank" rel="noopener"> |
| website |
| </a> |
| .</p> |
| <table> |
| <thead> |
| <tr> |
| <th></th> |
| <th></th> |
| <th style="text-align:left"></th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td><strong>Operating System</strong></td> |
| <td>GNU/Linux<br>(Windows with mingw)</td> |
| <td style="text-align:left"></td> |
| </tr> |
| <tr> |
| <td><strong>License</strong></td> |
| <td>GPL, free to use for academic use</td> |
| <td style="text-align:left"></td> |
| </tr> |
| <tr> |
| <td><strong>Supported version(s)</strong></td> |
| <td>OMNeT++ 5.5 <br>INET 4.1</td> |
| <td style="text-align:left"> |
| |
| |
| |
| |
| <a href="http://www.omnetpp.org" target="_blank" rel="noopener"> |
| http://www.omnetpp.org |
| </a> |
| <br> |
| |
| |
| |
| |
| <a href="https://inet.omnetpp.org" target="_blank" rel="noopener"> |
| https://inet.omnetpp.org |
| </a> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| <h3 id="installation">Installation</h3> |
| <p>There are two installation types of the MOSAIC OMNeT++ Federate:</p> |
| <table> |
| <thead> |
| <tr> |
| <th style="text-align:left">Type</th> |
| <th style="text-align:left">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td style="text-align:left"> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="#installation-for-users"> |
| USER |
| </a> |
| </td> |
| <td style="text-align:left">This installation type addresses those who only want to use the <strong>OMNeT++</strong> network simulator for simulations.<br>Network configurations can also be adjusted.<br><br>If you install the federate with this installation type, <strong>OMNeT++ 5.5</strong> and <strong>INET 4.1</strong> will automatically be installed inside <code>&lt;mosaic&gt;/bin/fed/omnetpp</code> during the installation.</td> |
| </tr> |
| <tr> |
| <td style="text-align:left"> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="#installation-for-developers"> |
| DEVELOPER |
| </a> |
| </td> |
| <td style="text-align:left">The installation for developers addresses those who want to make changes or extend the MOSAIC OMNeT++ Federate.<br><br>This installation type awaits that <strong>OMNeT++ 5.5</strong> and <strong>INET 4.1</strong> are already installed on your system and<br>- <code>PATH</code> contains <code>/path/to/omnetpp/bin</code><br>- <code>LD_LIBRARY_PATH</code> contains <code>/path/to/omnetpp/lib</code> and <code>/path/to/inet/src</code><br>- <code>C_INCLUDE_PATH</code> contains <code>/path/to/omnetpp/include</code> and <code>/path/to/inet/src</code></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="alert alert-note"> |
| <div> |
| <p>If you already have <strong>OMNeT++ 5.5</strong> and <strong>INET 4.1</strong> installed on your |
| system, but you simply want to use <strong>OMNeT++</strong> for simulations with Eclipse MOSAIC without developing further the MOSAIC |
| OMNeT++ Federate, you may also choose the |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/simulators/network_simulator_omnetpp/#installation-for-developers"> |
| installation for developers |
| </a> |
| |
| to avoid multiple installations of <strong>OMNeT++</strong> and <strong>INET</strong> on your system.</p> |
| </div> |
| </div> |
| <p>First of all, please make sure that you have the following libraries installed: |
| <code>unzip</code>, <code>tar</code>, <code>bison</code>, <code>flex</code>, <code>gcc</code>, <code>python</code>, <code>protoc</code></p> |
| <div class="alert alert-note"> |
| <div> |
| <p>The installation of the current version of the OMNeT++ Federate was tested with protobuf version 3.7.0.<br> |
| It is recommended to install this version. Here you receive more information about |
| |
| |
| |
| |
| <a href="https://github.com/protocolbuffers/protobuf/blob/master/src/README.md" target="_blank" rel="noopener"> |
| how to install protobuf |
| </a> |
| .</p> |
| </div> |
| </div> |
| <p>Follow the links and download the source code of OMNeT++, INET and the MOSAIC OMNeT++ Federate:</p> |
| <table> |
| <thead> |
| <tr> |
| <th style="text-align:left">Software</th> |
| <th style="text-align:left">Version</th> |
| <th style="text-align:left">Link</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td style="text-align:left"><strong>OMNeT++</strong></td> |
| <td style="text-align:left">5.5</td> |
| <td style="text-align:left"> |
| |
| |
| |
| |
| <a href="https://omnetpp.org/download/" target="_blank" rel="noopener"> |
| https://omnetpp.org/download/ |
| </a> |
| </td> |
| </tr> |
| <tr> |
| <td style="text-align:left"><strong>INET</strong></td> |
| <td style="text-align:left">4.1</td> |
| <td style="text-align:left"> |
| |
| |
| |
| |
| <a href="https://github.com/inet-framework/inet/releases" target="_blank" rel="noopener"> |
| https://github.com/inet-framework/inet/releases |
| </a> |
| </td> |
| </tr> |
| <tr> |
| <td style="text-align:left"><strong>MOSAIC OMNeT++ Federate</strong></td> |
| <td style="text-align:left">21.0</td> |
| <td style="text-align:left"> |
| |
| |
| |
| |
| <a href="https://github.com/mosaic-addons/omnetpp-federate/releases" target="_blank" rel="noopener"> |
| https://github.com/mosaic-addons/omnetpp-federate/releases |
| </a> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| <p>Available parameters of <code>omnet_installer.sh</code>:</p> |
| <table> |
| <thead> |
| <tr> |
| <th style="text-align:center"></th> |
| <th style="text-align:left">Parameter</th> |
| <th style="text-align:left">Value</th> |
| <th style="text-align:left">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td style="text-align:center"><code>-t</code></td> |
| <td style="text-align:left"><code>--installation-type</code></td> |
| <td style="text-align:left"><code>&lt;INSTALLATION_TYPE&gt;</code></td> |
| <td style="text-align:left">Either <code>USER</code> or <code>DEVELOPER</code>.</td> |
| </tr> |
| <tr> |
| <td style="text-align:center"><code>-o</code></td> |
| <td style="text-align:left"><code>--omnetpp</code></td> |
| <td style="text-align:left"><code>&lt;PATH_TO_OMNET_TGZ&gt;</code></td> |
| <td style="text-align:left">Provide the archive containing the OMNeT++ source. You can obtain it from |
| |
| |
| |
| |
| <a href="https://omnetpp.org/download/" target="_blank" rel="noopener"> |
| https://omnetpp.org/download/ |
| </a> |
| </td> |
| </tr> |
| <tr> |
| <td style="text-align:center"><code>-i</code></td> |
| <td style="text-align:left"><code>--inet</code></td> |
| <td style="text-align:left"><code>&lt;PATH_TO_INET_TGZ&gt;</code></td> |
| <td style="text-align:left">Provide the archive containing the inet source code. You can obtain it from |
| |
| |
| |
| |
| <a href="https://inet.omnetpp.org/Download.html" target="_blank" rel="noopener"> |
| https://inet.omnetpp.org/Download.html |
| </a> |
| . If not given, the inet-source files are downloaded by this installation script.</td> |
| </tr> |
| <tr> |
| <td style="text-align:center"><code>-f</code></td> |
| <td style="text-align:left"><code>--federate</code></td> |
| <td style="text-align:left"><code>&lt;PATH_TO_FEDERATE_ZIP&gt;</code></td> |
| <td style="text-align:left">Provide the archive containing the OMNeT++-federate and patches for coupling OMNeT++ to Eclipse MOSAIC. If not given, the omnetpp-federate is downloaded by this installation script.</td> |
| </tr> |
| <tr> |
| <td style="text-align:center"><code>-so</code></td> |
| <td style="text-align:left"><code>--skip-omnetpp</code></td> |
| <td style="text-align:left">-</td> |
| <td style="text-align:left">Skip the installation of OMNeT++</td> |
| </tr> |
| <tr> |
| <td style="text-align:center"><code>-si</code></td> |
| <td style="text-align:left"><code>--skip-inet</code></td> |
| <td style="text-align:left">-</td> |
| <td style="text-align:left">Skip the installation of INET</td> |
| </tr> |
| <tr> |
| <td style="text-align:center"><code>-q</code></td> |
| <td style="text-align:left"><code>--quiet</code></td> |
| <td style="text-align:left">-</td> |
| <td style="text-align:left">Less output and no interaction required</td> |
| </tr> |
| <tr> |
| <td style="text-align:center"><code>-j</code></td> |
| <td style="text-align:left"><code>--parallel</code></td> |
| <td style="text-align:left"><code>&lt;NUMBER_OF_THREADS&gt;</code></td> |
| <td style="text-align:left">Enables make to use the given number of compilation threads.<br>Per default your systems maximum is selected automatically.</td> |
| </tr> |
| <tr> |
| <td style="text-align:center"><code>-u</code></td> |
| <td style="text-align:left"><code>--uninstall</code></td> |
| <td style="text-align:left">-</td> |
| <td style="text-align:left">Uninstalls the OMNeT++ federate</td> |
| </tr> |
| <tr> |
| <td style="text-align:center"><code>-h</code></td> |
| <td style="text-align:left"><code>--help</code></td> |
| <td style="text-align:left">-</td> |
| <td style="text-align:left">Shows this usage screen</td> |
| </tr> |
| </tbody> |
| </table> |
| <h4 id="installation-for-users">Installation for Users</h4> |
| <p>Run the installation script (this takes a few minutes):</p> |
| <pre><code class="language-bash">cd &lt;mosaic&gt;/bin/fed/omnetpp |
| chmod +x omnet_installer.sh` |
| ./omnet_install.sh \ |
| --installation-type USER \ |
| --omnetpp /path/to/omnetpp-5.5-src.tgz \ |
| --inet /path/to/inet-4.1-src.tgz \ |
| --federate /path/to/omnetpp-federate-21.0.zip |
| </code></pre> |
| <p>For the installation type <code>USER</code> the parameters <code>-o</code>, <code>-i</code> and <code>-f</code> are required.<br> |
| The installation script should terminate with <code>SUCESS: The MOSAIC OMNeT++ Federate was successfully installed.</code> otherwise the installation failed.</p> |
| <h4 id="installation-for-developers">Installation for Developers</h4> |
| <p>Run the installation script (this takes a few minutes):</p> |
| <pre><code class="language-bash">cd &lt;mosaic&gt;/bin/fed/omnetpp |
| chmod +x omnet_installer.sh` |
| ./omnet_install.sh \ |
| --installation-type DEVELOPER \ |
| --federate /path/to/omnetpp-federate-21.0.zip |
| </code></pre> |
| <p>For the installation type <code>DEVELOPER</code> the parameter <code>-f</code> is required.<br> |
| The installation script should terminate with <code>SUCCESS: The MOSAIC OMNeT++ Federate was successfully installed.</code> otherwise the installation failed.</p> |
| <p> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/extending_mosaic/omnetpp_details/"> |
| Extending MOSAIC OMNeT++ Federate |
| </a> |
| </p> |
| <h3 id="omnet-federate-configuration">OMNeT++ Federate Configuration</h3> |
| <p>To use OMNeT++ as network simulator in an Eclipse MOSAIC simulation, open <code>&lt;scenarioName&gt;/scenario_config.json</code> and enable OMNeT++:</p> |
| <pre><code class="language-json">&quot;federates&quot;: { |
| ... |
| &quot;omnetpp&quot;: true, |
| ... |
| } |
| </code></pre> |
| <p>Now, when you run this scenario, Eclipse MOSAIC will automatically start the MOSAIC OMNeT++ Federate.</p> |
| <p>The main configuration of the MOSAIC OMNeT++ Federate is done within the configuration files <code>omnetpp.ini</code> and <code>omnetpp_config.json</code> in the scenario:</p> |
| <pre><code class="language-plaintext">└─ &lt;scenario_name&gt; |
| └─ omnetpp |
| ├─ omnetpp.ini ...................... OMNeT++ federate configuration file |
| └─ omnetpp_config.json .............. Ambassador configuration file |
| </code></pre> |
| <p>The whole OMNeT++ specific configuration is done via the <code>omnetpp.ini</code> file. It covers static parts for the |
| simulator coupling such as the specific Eclipse MOSAIC Event Scheduler and the ScenarioManager. Furthermore, |
| logging configurations and the typical parameters for the communication layers (MAC, PHY and Radio |
| Channel) are addressed. The communication parameters are different for vehicles and RSUs. Please refer |
| to the OMNeT++ documentation on the OMNeT++ homepage for further information about the structure |
| of the <code>omnetpp.ini</code> file.</p> |
| <h3 id="installation-in-docker-environment">Installation in Docker environment</h3> |
| <div class="alert alert-note"> |
| <div> |
| <p>This is an experimental feature. Please refer to our mailing list if you experience any problems.</p> |
| </div> |
| </div> |
| <p>This guide gives instructions to execute the OMNeT++ federate inside a docker container. If you already installed |
| OMNeT++ on your machine following the steps before, you can skip this section.</p> |
| <p>Docker is a new approach to execute software. More precisely, it &ldquo;wraps software in a complete filesystem |
| that contains everything it needs to run: code, runtime, system tools, and system libraries&rdquo;. As a result, the |
| software is executed within a container and its execution does not rely on the environment the container is running in.</p> |
| <p>In context of Eclipse MOSAIC, this approach allows to execute OMNeT++ within a docker container. The user does not |
| need to manually install OMNeT++ and can even run OMNeT++ on Windows hosts.</p> |
| <ol> |
| <li>Install Docker ≥ 1.13 on your machine.</li> |
| <li>To get everything to work, please make sure to execute the following steps depending on your operating system: |
| <ul> |
| <li>Windows - In the settings, share the drive where Eclipse MOSAIC is installed on. You may need to restart docker in the reset tab.</li> |
| <li>Linux - Make sure your user account belongs to the unix-group <code>docker</code>. You may need to restart your machine.</li> |
| </ul> |
| </li> |
| <li>Switch to the location of the Dockerfile in <code>&lt;mosaic&gt;/bin/fed/omnetpp</code></li> |
| <li>Execute the following command on command line:<br> |
| <code>docker build -t omnetpp-federate</code>.<br> |
| This could take a while to finish.</li> |
| <li>Enter the name of the docker image <code>etc/runtime.json</code> in the <code>omnetpp</code>-section into the property <code>dockerImage</code>:</li> |
| </ol> |
| <pre><code class="language-json">&quot;federates&quot;: [ |
| ... |
| { |
| &quot;id&quot;: &quot;omnetpp&quot;, |
| &quot;dockerImage&quot;: &quot;omnetpp-federate&quot;, |
| ... |
| }, |
| ... |
| ] |
| </code></pre> |
| </description> |
| </item> |
| |
| <item> |
| <title>Network Simulator ns-3</title> |
| <link>https://staging.eclipse.org/mosaic/docs/simulators/network_simulator_ns3/</link> |
| <pubDate>Sun, 05 May 2019 00:00:00 +0100</pubDate> |
| <guid>https://staging.eclipse.org/mosaic/docs/simulators/network_simulator_ns3/</guid> |
| <description><p>The ns-3 is a discrete-event network simulator that was developed as a replacement for the popular |
| network simulator 2 (ns-2) and mainly focuses upon improving the core architecture, software integration, |
| models, and educational components for real-world network devices and protocols. It simulates both |
| unicast and multicast protocols and is used extensively in research on mobile ad-hoc networks.</p> |
| <p>Regardless, ns-2 still remains in active use and will continue to be maintained in the near future. For |
| Eclipse MOSAIC coupling, only ns-3 will be available.</p> |
| <p>Like other network simulators, ns-3 has a relatively steep learning curve, especially compared to GUI- |
| based simulators. If you have no prior experience with ns-3, we recommend familiarizing yourself with |
| the ns-3 simulation environment and the ns-3 simulation basics first. The ns-3 documentation can be |
| found under: <a href="https://www.nsnam.org/documentation" target="_blank">https://www.nsnam.org/documentation</a></p> |
| <p>To take your first steps with ns-3, you might want to download 2 the latest version, build a copy of ns-3 (it |
| uses the Python-based build-system waf) and take a look at the examples, that are shipped within most |
| of the ns-3 source code repositories and packages. You might also examine the simulation output and try |
| to adjust it.</p> |
| <p>Typically, a ns-3 user will work under a Linux environment. For those running under Windows, there do |
| exist environments which simulate the Linux environment to various degrees. The ns-3 project has in the |
| past (but not presently) supported the Cygwin environment for these users (see <a href="http://www.cygwin.com" target="_blank">http://www.cygwin.com</a> |
| for details on downloading). MiniGW is presently not officially supported, however there are also |
| some people who managed to use it with ns-3. For detailed information of how to set up ns-3, please refer |
| to their Wiki: <a href="https://www.nsnam.org/wiki/Installation" target="_blank">https://www.nsnam.org/wiki/Installation</a></p> |
| <p>For more information on how to set up ns-3 with Eclipse MOSAIC, please just refer to the following section. We |
| prepared an installation script, which manages most of the required work.</p> |
| <div class="alert alert-warning"> |
| <div> |
| <p>As stated above, ns-3 is primarily developed on and for GNU/Linux platforms. |
| Since Windows is such a widely used platform and Cygwin is not a perfect emulation |
| of any Linux, we highly recommended for non-Linux users to consider the installation of a |
| Linux virtual machine with a virtual machine environment, such as |
| <a href="https://www.vmware.com/products/workstation-player.html" target="_blank">VMware</a> or <a href="https://www.virtualbox.org/" target="_blank">VirtualBox</a>.</p> |
| </div> |
| </div> |
| <table> |
| <thead> |
| <tr> |
| <th style="text-align:left"></th> |
| <th style="text-align:left">Software information</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td style="text-align:left"><strong>Developer(s)</strong></td> |
| <td style="text-align:left">Tom Henderson, Mathieu Lacage, George Riley, Mitch Watrous, Gustavo Carneiro, Tommaso Pecorella and others</td> |
| </tr> |
| <tr> |
| <td style="text-align:left"><strong>Written in</strong></td> |
| <td style="text-align:left">C++ (core) and Python (bindings)</td> |
| </tr> |
| <tr> |
| <td style="text-align:left"><strong>Operating system</strong></td> |
| <td style="text-align:left">GNU/Linux FreeBSD Mac OS X</td> |
| </tr> |
| <tr> |
| <td style="text-align:left"><strong>License</strong></td> |
| <td style="text-align:left">Free software: GNU GPLv2</td> |
| </tr> |
| <tr> |
| <td style="text-align:left"><strong>Website</strong></td> |
| <td style="text-align:left"><a href="http://www.nsnam.org/" target="_blank">http://www.nsnam.org/</a></td> |
| </tr> |
| <tr> |
| <td style="text-align:left"><strong>Supported version(s)</strong></td> |
| <td style="text-align:left">3.28</td> |
| </tr> |
| <tr> |
| <td style="text-align:left"><strong>Dependencies</strong></td> |
| <td style="text-align:left">libprotobuf 3.3.0</td> |
| </tr> |
| <tr> |
| <td style="text-align:left"></td> |
| <td style="text-align:left">libxml2</td> |
| </tr> |
| <tr> |
| <td style="text-align:left"></td> |
| <td style="text-align:left">libsqlite3</td> |
| </tr> |
| <tr> |
| <td style="text-align:left"><strong>Deployed in MOSAIC all-in-one</strong></td> |
| <td style="text-align:left">no (and need a patch to link)</td> |
| </tr> |
| </tbody> |
| </table> |
| <h3 id="ns3-ambassador-folder-structure">ns3-ambassador folder structure</h3> |
| <pre><code class="language-plaintext">└─ &lt;scenario_name&gt; |
| └─ ns3 |
| ├─ ns3_config.json ................. Ambassador configuration file |
| ├─ configTechnologies.xml ...........ns-3 federate configuration file |
| └─ confWifi.xml .....................ns-3 federate configuration file |
| </code></pre> |
| <h3 id="installation">Installation</h3> |
| <p>Eclipse MOSAIC offers support for the current stable release of ns-3 (3.28), that was released in March 2018. Older |
| versions of ns-3 (prior to 3.28) are not supported. However, also for newer versions we cannot guarantee |
| the correct operation. The coupling to Eclipse MOSAIC is designed in a manner of minimal code changes on the |
| ns-3 simulator itself to keep the update capabilities for future versions.</p> |
| <h4 id="prerequisites">Prerequisites</h4> |
| <p>For GNU/Linux platforms, the minimal requirements to run basic simulations are a <strong>gcc</strong> or <strong>clang</strong> compiler |
| and a <strong>Python</strong> interpreter. At least you need the following packages to be installed:</p> |
| <p><em><strong>Minimum requirement:</strong></em></p> |
| <pre><code>gcc |
| g++ |
| python |
| python-dev |
| </code></pre> |
| <p>For a complete list of required packages for different distributions, please refer to the ns-3 installation |
| guide: <a href="https://www.nsnam.org/wiki/Installation" target="_blank">https://www.nsnam.org/wiki/Installation</a></p> |
| <p>Please make sure the following libraries are installed before running the installation script:</p> |
| <ul> |
| <li>libxml2</li> |
| <li>libsqlite3</li> |
| <li>libprotobuf 3.3.0</li> |
| </ul> |
| <h4 id="run-the-installation-script">Run the installation script</h4> |
| <div class="alert alert-warning"> |
| <div> |
| <p>ns-3 requires several packages to be installed on your computer. You will |
| need to ensure, that all required libraries are present on your system before proceeding. You |
| may need superuser permissions to install packages.</p> |
| </div> |
| </div> |
| <div class="alert alert-warning"> |
| <div> |
| <p>If your local protobuf version does not fit the required one, the installation |
| may fail with an error. In that case, you can run the install script with the <code>-p</code> flag. This will |
| rebuild the protobuf files during installation and allow it to proceed correctly.</p> |
| </div> |
| </div> |
| <p>To ease the installation of ns-3 for Eclipse MOSAIC, the installation process has been delegated to an installation |
| script, that can be found in the associated ns-3 federate folder.</p> |
| <p><strong>ns3-ambassador federate folder structure:</strong></p> |
| <pre><code class="language-plaintext">└─ mosaic/bin/fed/ns3 |
| └─ ns3 |
| ├─ Dockerfile.sh ....................Dockerfile for ns-3 federate |
| └─ ns3_installer.sh ................ Installation script for ns-3 |
| </code></pre> |
| <p><strong>The ns-3 installation script accomplishes the following tasks:</strong></p> |
| <ol> |
| <li>Download ns-3 tarball from the official sources</li> |
| <li>Download the ns-3 federate for Eclipse MOSAIC.</li> |
| <li>Apply a patch to ns-3 in order to make it work with Eclipse MOSAIC.</li> |
| <li>Add the ns-3 federate to the waf build system.</li> |
| <li>Configure and build the patched ns-3 with the ns-3 federate.</li> |
| </ol> |
| <p><strong>In order to start the simulation, the following steps need to be performed:</strong></p> |
| <ol> |
| <li>Set up the <code>confWifi.xml</code>-file in the scenario folder (see section |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/simulators/network_simulator_ns3/#configuration"> |
| Configuration |
| </a> |
| ). An example confWifi.xml - file is shipped with the Tiergarten scenario.</li> |
| <li>For reasonable result logging, the logger-configuration in <code>mosaic/etc/logback.xml</code> has to be adapted to support the ns-3 ambassador and federate.</li> |
| <li>At last ns-3 has to be activated in the <code>mosaic_config.xml</code> and the simulation can be started.</li> |
| </ol> |
| <h3 id="installation-in-docker-environment">Installation in Docker environment</h3> |
| <div class="alert alert-note"> |
| <div> |
| <p>This is an experimental feature. Please refer to our mailing list if you experience any problems.</p> |
| </div> |
| </div> |
| <p>This guide gives instructions to execute the ns-3 federate inside a docker container. If you already installed |
| ns-3 on your machine following the steps before, you can skip this section.</p> |
| <p>Docker is a new approach to execute software. More precisely, it &ldquo;wraps software in a complete filesystem |
| that contains everything it needs to run: code, runtime, system tools, and system libraries&rdquo;. As a result, the |
| software is executed within a container and its execution does not rely on the environment the container is running in.</p> |
| <p>In context of Eclipse MOSAIC, this approach allows to execute ns-3 within a docker container. The user does not |
| need to manually install ns-3 and can even run ns-3 on Windows hosts.</p> |
| <ol> |
| <li>Install Docker ≥ 1.13 on your machine.</li> |
| <li>To get everything to work, please make sure to execute the following steps depending on your operating system: |
| <ul> |
| <li>Windows - In the settings, share the drive where Eclipse MOSAIC is installed on. You may need to restart docker in the reset tab.</li> |
| <li>Linux - Make sure your user account belongs to the unix-group <code>docker</code>. You may need to restart your machine.</li> |
| </ul> |
| </li> |
| <li>Switch to the location of the Dockerfile in <code>&lt;mosaic&gt;/bin/fed/ns3</code></li> |
| <li>Execute the following command on command line:<br> |
| <code>docker build -t ns3-federate</code>.<br> |
| This could take a while to finish.</li> |
| <li>Enter the name of the docker image <code>etc/runtime.json</code> in the <code>ns3</code>-section into the property <code>dockerImage</code>:</li> |
| </ol> |
| <pre><code class="language-json">&quot;federates&quot;: [ |
| ... |
| { |
| &quot;id&quot;: &quot;ns3&quot;, |
| &quot;dockerImage&quot;: &quot;ns3-federate&quot;, |
| ... |
| }, |
| ... |
| ] |
| </code></pre> |
| <p>You can test the installation of your docker image with the Tiergarten scenario, by activating ns3 in the <code>scenario_config.json</code>.</p> |
| <h3 id="configuration">Configuration</h3> |
| <p>The whole ns-3 specific configuration is done via the <code>confWifi.xml</code> and <code>configTechnologies.xml</code> files.</p> |
| <p><strong>confWifi.xml:</strong></p> |
| <pre><code class="language-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt; |
| &lt;wifi&gt; |
| &lt;!-- IPv4 address generator --&gt; |
| &lt;ipConfiguration&gt; |
| &lt;ip address=&quot;192.168.0.0&quot; mask=&quot;255.255.0.0&quot;/&gt; |
| &lt;/ipConfiguration&gt; |
| &lt;!-- Calculate a propagation delay --&gt; |
| &lt;propagationDelayModel&gt; |
| &lt;delay model= &quot;ns3::NonePropagationDelayModel&quot;/&gt; |
| &lt;/propagationDelayModel&gt; |
| &lt;!-- Modelize the propagation loss through a transmission medium --&gt; |
| &lt;propagationLossModel&gt; |
| &lt;loss model= &quot;ns3::FriisPropagationLossModel&quot;/&gt; |
| &lt;/propagationLossModel&gt; |
| &lt;wifiConfiguration&gt; |
| &lt;!-- Create non QoS-enabled MAC layers --&gt; |
| &lt;wifiMac property=&quot;type&quot; value=&quot;ns3::AdhocWifiMac&quot;/&gt; |
| &lt;!-- Wifi PHY mode --&gt; |
| &lt;wifiManager property=&quot;phyMode&quot; value=&quot;OfdmRate54Mbps&quot;/&gt; |
| &lt;!-- Wifi manager --&gt; |
| &lt;wifiManager property=&quot;type&quot; value=&quot;ns3::ConstantRateWifiManager&quot;/&gt; |
| &lt;!-- The energy of a received signal should be higher than this threshold (dbm) to allow the PHY layer to detect the signal --&gt; |
| &lt;wifiPhy property=&quot;EnergyDetectionThreshold&quot; value=&quot;-81.0&quot;/&gt; |
| &lt;!-- The energy of a received signal should be higher than this threshold (dbm) to allow the PHY layer to declare CCA BUSY state --&gt; |
| &lt;wifiPhy property=&quot;CcaMode1Threshold&quot; value=&quot;-99.0&quot;/&gt; |
| &lt;!-- Transmission gain (dB) --&gt; |
| &lt;wifiPhy property=&quot;TxGain&quot; value=&quot;0.0&quot;/&gt; |
| &lt;!-- Reception gain (dB) --&gt; |
| &lt;wifiPhy property=&quot;RxGain&quot; value=&quot;0.0&quot;/&gt; |
| &lt;!-- Number of transmission power levels available between TxPowerStart and TxPowerEnd included --&gt; |
| &lt;wifiPhy property=&quot;TxPowerLevels&quot; value=&quot;1&quot;/&gt; |
| &lt;!-- Maximum available transmission level (dbm) --&gt; |
| &lt;wifiPhy property=&quot;TxPowerEnd&quot; value=&quot;17.0&quot;/&gt; |
| &lt;!-- Minimum available transmission level (dbm) --&gt; |
| &lt;wifiPhy property=&quot;TxPowerStart&quot; value=&quot;17.0&quot;/&gt; |
| &lt;!-- Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver --&gt; |
| &lt;wifiPhy property=&quot;RxNoiseFigure&quot; value=&quot;0.0&quot;/&gt; |
| &lt;!-- Channel center frequency = Channel starting frequency + 5 MHz * (nch - 1) --&gt; |
| &lt;wifiPhy property=&quot;ChannelNumber&quot; value=&quot;1&quot;/&gt; |
| &lt;/wifiConfiguration&gt; |
| &lt;/wifi&gt; |
| </code></pre> |
| <p>The IP configuration information includes the network address and network mask. The ns-3 propagation |
| module defines two generic interfaces, namely <strong>PropagationLossModel</strong> and <strong>PropagationDelayModel</strong>, |
| for the modelling of propagation loss respectively propagation delay.</p> |
| <p>In the default <code>confWifi.xml</code>, the Wi-Fi device uses the ns-3 standard propagation delay model |
| <code>ns3::ConstantSpeedPropagationDelayModel</code> and the ns-3 standard propagation loss model |
| <code>ns3::FriisPropagationLossModel</code>. Radio propagation models in ns-3 can easily be exchanged with |
| the ns-3 class registration system (see the ns-3 documentation for details). The Wi-Fi configuration |
| includes additional parameters, like sending power and antenna gain.</p> |
| <p><strong>configTechnologies.xml:</strong></p> |
| <pre><code class="language-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt; |
| &lt;ns3Configuration&gt; |
| &lt;installers&gt; |
| &lt;installer type=&quot;ns3::WifiVehicleInstaller&quot; name=&quot;WifiVehicle&quot; file=&quot;confWifi.xml&quot; default=&quot;true&quot; /&gt; |
| &lt;installer type=&quot;ns3::MobilityModelInstaller&quot; name=&quot;Mobility&quot; default=&quot;true&quot; /&gt; |
| &lt;/installers&gt; |
| &lt;/ns3Configuration&gt; |
| </code></pre> |
| <p>The configuration manager of the ns-3 federate defines, which installer should be loaded for the Wi-Fi |
| device (refering to the <code>confWifi.xml</code>) and the mobility model. Usually, you don’t need to take any |
| changes and simply use the default configuration file, that ships with the ns-3 federate.</p> |
| </description> |
| </item> |
| |
| <item> |
| <title>Simple Network Simulator (SNS)</title> |
| <link>https://staging.eclipse.org/mosaic/docs/simulators/network_simulator_sns/</link> |
| <pubDate>Tue, 30 Jun 2020 00:00:00 +0100</pubDate> |
| <guid>https://staging.eclipse.org/mosaic/docs/simulators/network_simulator_sns/</guid> |
| <description><p>The Simple Network Simulator (SNS) aims to provide simple and fast capabilities for the |
| transmission of V2X-messages using Ad hoc communication. In order to stay performant the simulator makes abstractions |
| in certain places. Those abstractions will be discussed later on.</p> |
| <h2 id="configuration">Configuration</h2> |
| <p>The SNS offers some configurability regarding the way transmissions are simulated.</p> |
| <p><strong>Main Configuration:</strong></p> |
| <table> |
| <thead> |
| <tr> |
| <th style="text-align:left">Parameter</th> |
| <th style="text-align:left">Description</th> |
| <th style="text-align:left">type</th> |
| <th style="text-align:left">Default Value</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td style="text-align:left"><code>maximumTtl</code></td> |
| <td style="text-align:left">Defines the upper bound for the amount of hops a message can make. (Note: messages can have individual <code>ttl</code>&rsquo;s)</td> |
| <td style="text-align:left">int</td> |
| <td style="text-align:left"><code>10</code></td> |
| </tr> |
| <tr> |
| <td style="text-align:left"><code>singlehopRadius</code></td> |
| <td style="text-align:left">Fallback radius to be used for transmission, if no radius is defined in the <code>AdhocConfiguration</code></td> |
| <td style="text-align:left">double</td> |
| <td style="text-align:left"><code>509.4</code></td> |
| </tr> |
| <tr> |
| <td style="text-align:left"><code>singlehopDelay</code></td> |
| <td style="text-align:left">A delay configuration for the direct communication between two nodes. ( |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/extending_mosaic/delay_models/"> |
| See here |
| </a> |
| )</td> |
| <td style="text-align:left">Delay</td> |
| <td style="text-align:left">`ConstantDelay |</td> |
| </tr> |
| <tr> |
| <td style="text-align:left"><code>singlehopTransmission</code></td> |
| <td style="text-align:left">This contains the transmission configurations for <code>lossProbability</code> and <code>maxRetries</code>.</td> |
| <td style="text-align:left">CTransmission</td> |
| <td style="text-align:left">n/a</td> |
| </tr> |
| <tr> |
| <td style="text-align:left"><code>adhocTransmissionModel</code></td> |
| <td style="text-align:left">A class extending <code>AdhocTransmissionModel</code>, this will decide the logic for transmissions.</td> |
| <td style="text-align:left">AdhocTransmissionModel</td> |
| <td style="text-align:left"><code>SimpleAdhoc TransmissionModel</code></td> |
| </tr> |
| </tbody> |
| </table> |
| <blockquote> |
| <p>On default the SNS will use the <code>SimpleAdhocTransmissionModel</code> with a <code>ConstantDelay</code> using 0 as delay. This means it usually |
| makes sense to specify the <code>AdhocTransmissionModel</code> explicitly and use a more realistic <code>Delay</code>. |
| <strong>Example Configuration:</strong></p> |
| </blockquote> |
| <pre><code class="language-json">{ |
| &quot;maximumTtl&quot;: 20, |
| &quot;singlehopRadius&quot;: 300.5, |
| &quot;singlehopDelay&quot;: { |
| &quot;type&quot;: &quot;SimpleRandomDelay&quot;, |
| &quot;steps&quot;: 5, |
| &quot;minDelay&quot;: &quot;1.5 ms&quot;, |
| &quot;maxDelay&quot;: &quot;2.5 ms&quot; |
| }, |
| &quot;singlehopTransmission&quot;: { |
| &quot;lossProbability&quot;: 0.0, |
| &quot;maxRetries&quot;: 0 |
| }, |
| &quot;adhocTransmissionModel&quot;: { |
| &quot;type&quot;: &quot;SimpleAdhocTransmissionModel&quot;, |
| &quot;simpleMultihopDelay&quot;: { |
| &quot;type&quot;: &quot;GammaRandomDelay&quot;, |
| &quot;minDelay&quot;: &quot;10 ms&quot;, |
| &quot;expDelay&quot;: &quot;30 ms&quot; |
| }, |
| &quot;simpleMultihopTransmission&quot;: { |
| &quot;lossProbability&quot;: 0.1, |
| &quot;maxRetries&quot;: 2 |
| } |
| } |
| } |
| </code></pre> |
| <div class="alert alert-tip"> |
| <div> |
| <p>Read the detailed documentation of the |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/mosaic_configuration/sns_config/"> |
| SNS Configuration |
| </a> |
| .</p> |
| </div> |
| </div> |
| <h2 id="transmission-logic">Transmission Logic</h2> |
| <p>SNS differentiates between two types of Ad hoc transmissions, geographically- and topologically-scoped transmissions, which |
| generally are abbreviated with <em>GeoCast</em> and <em>TopoCast</em> respectively.<br> |
| GeoCasts are limited to <em>BroadCasts</em>. Accordingly, there is no explicit addressing |
| of receivers (other than 255.255.255.255), instead a destination area is specified. However, GeoCasts allow for multihop forwarding.<br> |
| TopoCasts on the other hand use means of IPv4 addressing to transmit messages. Since the SNS was not build to simulate transmissions using complex topology-constructs, TopoCasts |
| are limited to transmissions with a single hop. However, TopoCasts support <em>BroadCasts</em> and <em>UniCasts</em> (we are omitting Anycasts). |
| Most transmissions in the Ad hoc domain will be some form of Broadcast, meaning every reachable entity is eligible to |
| receive a message.</p> |
| |
| |
| |
| <div class="svg-wrap mt-1 mb-4"> |
| <div class="inner"> |
| <svg id="mermaid-1603209753374" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="1207.332763671875" style="max-width: 817.0913696289062px;" viewBox="0 0 817.0913696289062 1207.332763671875"><style>#mermaid-1603209753374{font-family:"trebuchet ms",verdana,arial;font-size:16px;fill:#333;}#mermaid-1603209753374 .error-icon{fill:#552222;}#mermaid-1603209753374 .error-text{fill:#552222;stroke:#552222;}#mermaid-1603209753374 .edge-thickness-normal{stroke-width:2px;}#mermaid-1603209753374 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-1603209753374 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-1603209753374 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-1603209753374 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-1603209753374 .marker{fill:#333333;}#mermaid-1603209753374 .marker.cross{stroke:#333333;}#mermaid-1603209753374 svg{font-family:"trebuchet ms",verdana,arial;font-size:16px;}#mermaid-1603209753374 .label{font-family:"trebuchet ms",verdana,arial;color:#333;}#mermaid-1603209753374 .label text{fill:#333;}#mermaid-1603209753374 .node rect,#mermaid-1603209753374 .node circle,#mermaid-1603209753374 .node ellipse,#mermaid-1603209753374 .node polygon,#mermaid-1603209753374 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-1603209753374 .node .label{text-align:center;}#mermaid-1603209753374 .node.clickable{cursor:pointer;}#mermaid-1603209753374 .arrowheadPath{fill:#333333;}#mermaid-1603209753374 .edgePath .path{stroke:#333333;stroke-width:1.5px;}#mermaid-1603209753374 .flowchart-link{stroke:#333333;fill:none;}#mermaid-1603209753374 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-1603209753374 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-1603209753374 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-1603209753374 .cluster text{fill:#333;}#mermaid-1603209753374 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial;font-size:12px;background:hsl(80,100%,96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-1603209753374:root{--mermaid-font-family:"trebuchet ms",verdana,arial;}#mermaid-1603209753374 flowchart{fill:apa;}</style><g><g class="output"><g class="clusters"></g><g class="edgePaths"><g class="edgePath LS-id1 LE-id2" id="L-id1-id2" style="opacity: 1;"><path class="path" d="M239.4164047241211,47L239.4164047241211,72L239.9164047241211,97.5" marker-end="url(#arrowhead39)" style="fill:none"></path><defs><marker id="arrowhead39" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-id2 LE-id3" id="L-id2-id3" style="opacity: 1;"><path class="path" d="M195.9271276785066,224.93259795438553L112.671875,302.921875L113.171875,337.921875" marker-end="url(#arrowhead40)" style="fill:none"></path><defs><marker id="arrowhead40" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-id2 LE-id4" id="L-id2-id4" style="opacity: 1;"><path class="path" d="M283.9056817697356,224.93259795438553L366.1609344482422,302.921875L366.66093444824224,347.42812499999997" marker-end="url(#arrowhead41)" style="fill:none"></path><defs><marker id="arrowhead41" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-id3 LE-id5" id="L-id3-id5" style="opacity: 1;"><path class="path" d="M113.171875,478.6171875L112.671875,512.6171875L112.671875,616.9343719482422" marker-end="url(#arrowhead42)" style="fill:none"></path><defs><marker id="arrowhead42" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-id4 LE-id6" id="L-id4-id6" style="opacity: 1;"><path class="path" d="M366.66093444824224,469.1109344482418L366.1609344482422,512.6171875L366.6609344482422,547.6171905517579" marker-end="url(#arrowhead43)" style="fill:none"></path><defs><marker id="arrowhead43" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-id6 LE-id7" id="L-id6-id7" style="opacity: 1;"><path class="path" d="M314.730715999631,693.3213409996309L218.50390625,779.2515563964844L218.50390625,914.0421752929688" marker-end="url(#arrowhead44)" style="fill:none"></path><defs><marker id="arrowhead44" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-id6 LE-id8" id="L-id6-id8" style="opacity: 1;"><path class="path" d="M418.59115610436135,693.321343895639L513.8179626464844,779.2515563964844L514.3179626464845,814.2515625" marker-end="url(#arrowhead45)" style="fill:none"></path><defs><marker id="arrowhead45" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-id8 LE-id9" id="L-id8-id9" style="opacity: 1;"><path class="path" d="M451.77749555523815,1010.2923332017227L360.3570251464844,1106.8327941894531L360.3570251464844,1150.8327941894531" marker-end="url(#arrowhead46)" style="fill:none"></path><defs><marker id="arrowhead46" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-id8 LE-id10" id="L-id8-id10" style="opacity: 1;"><path class="path" d="M576.8584356425159,1010.292339503968L667.2789001464844,1106.8327941894531L667.2789001464844,1141.3327941894531" marker-end="url(#arrowhead47)" style="fill:none"></path><defs><marker id="arrowhead47" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g></g><g class="edgeLabels"><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><rect rx="0" ry="0" width="0" height="0"></rect><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-id1-id2" class="edgeLabel L-LS-id1' L-LE-id2"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(112.671875,302.921875)" style="opacity: 1;"><g transform="translate(-33.0859375,-9.5)" class="label"><rect rx="0" ry="0" width="66.171875" height="19"></rect><foreignObject width="66.171875" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-id2-id3" class="edgeLabel L-LS-id2' L-LE-id3">TopoCast</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(366.1609344482422,302.921875)" style="opacity: 1;"><g transform="translate(-29.46875,-9.5)" class="label"><rect rx="0" ry="0" width="58.9375" height="19"></rect><foreignObject width="58.9375" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-id2-id4" class="edgeLabel L-LS-id2' L-LE-id4">GeoCast</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(112.671875,512.6171875)" style="opacity: 1;"><g transform="translate(-12.1640625,-9.5)" class="label"><rect rx="0" ry="0" width="24.328125" height="19"></rect><foreignObject width="24.328125" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-id3-id5" class="edgeLabel L-LS-id3' L-LE-id5">Yes</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(366.1609344482422,512.6171875)" style="opacity: 1;"><g transform="translate(-12.1640625,-9.5)" class="label"><rect rx="0" ry="0" width="24.328125" height="19"></rect><foreignObject width="24.328125" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-id4-id6" class="edgeLabel L-LS-id4' L-LE-id6">Yes</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(218.50390625,779.2515563964844)" style="opacity: 1;"><g transform="translate(-12.1640625,-9.5)" class="label"><rect rx="0" ry="0" width="24.328125" height="19"></rect><foreignObject width="24.328125" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-id6-id7" class="edgeLabel L-LS-id6' L-LE-id7">Yes</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(513.8179626464844,779.2515563964844)" style="opacity: 1;"><g transform="translate(-9.3984375,-9.5)" class="label"><rect rx="0" ry="0" width="18.796875" height="19"></rect><foreignObject width="18.796875" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-id6-id8" class="edgeLabel L-LS-id6' L-LE-id8">No</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(360.3570251464844,1106.8327941894531)" style="opacity: 1;"><g transform="translate(-12.1640625,-9.5)" class="label"><rect rx="0" ry="0" width="24.328125" height="19"></rect><foreignObject width="24.328125" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-id8-id9" class="edgeLabel L-LS-id8' L-LE-id9">Yes</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(667.2789001464844,1106.8327941894531)" style="opacity: 1;"><g transform="translate(-9.3984375,-9.5)" class="label"><rect rx="0" ry="0" width="18.796875" height="19"></rect><foreignObject width="18.796875" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-id8-id10" class="edgeLabel L-LS-id8' L-LE-id10">No</span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="flowchart-id1-28" transform="translate(239.4164047241211,27.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-72.1953125" y="-19.5" width="144.390625" height="39" class="label-container"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-62.1953125,-9.5)"><foreignObject width="124.390625" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">V2X-Transmission</div></foreignObject></g></g></g><g class="node default" id="flowchart-id2-29" transform="translate(239.4164047241211,182.7109375)" style="opacity: 1;"><polygon points="85.7109375,0 171.421875,-85.7109375 85.7109375,-171.421875 0,-85.7109375" transform="translate(-85.7109375,85.7109375)" class="label-container"></polygon><g class="label" transform="translate(0,0)"><g transform="translate(-65.734375,-9.5)"><foreignObject width="131.46875" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Transmission Type</div></foreignObject></g></g></g><g class="node default" id="flowchart-id3-32" transform="translate(112.671875,407.76953125)" style="opacity: 1;"><polygon points="70.34765625,0 140.6953125,-70.34765625 70.34765625,-140.6953125 0,-70.34765625" transform="translate(-70.34765625,70.34765625)" class="label-container"></polygon><g class="label" transform="translate(0,0)"><g transform="translate(-39.1640625,-19)"><foreignObject width="78.328125" height="38"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Broadcast<br>or Unicast?</div></foreignObject></g></g></g><g class="node default" id="flowchart-id4-33" transform="translate(366.1609344482422,407.76953125)" style="opacity: 1;"><polygon points="60.84140625,0 121.6828125,-60.84140625 60.84140625,-121.6828125 0,-60.84140625" transform="translate(-60.84140625,60.84140625)" class="label-container"></polygon><g class="label" transform="translate(0,0)"><g transform="translate(-38.1015625,-9.5)"><foreignObject width="76.203125" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Broadcast?</div></foreignObject></g></g></g><g class="node default" id="flowchart-id5-38" transform="translate(112.671875,645.9343719482422)" style="opacity: 1;"><rect rx="29" ry="29" x="-104.671875" y="-29" width="209.34375" height="58" class="label-container"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-87.421875,-19)"><foreignObject width="174.84375" height="38"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Simulate TopoCast using<br>singlehop configuration.</div></foreignObject></g></g></g><g class="node default" id="flowchart-id6-41" transform="translate(366.1609344482422,645.9343719482422)" style="opacity: 1;"><polygon points="98.8171875,0 197.634375,-98.8171875 98.8171875,-197.634375 0,-98.8171875" transform="translate(-98.8171875,98.8171875)" class="label-container"></polygon><g class="label" transform="translate(0,0)"><g transform="translate(-70.796875,-19)"><foreignObject width="141.59375" height="38"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Simple transmission<br>model?</div></foreignObject></g></g></g><g class="node default" id="flowchart-id7-44" transform="translate(218.50390625,943.0421752929688)" style="opacity: 1;"><rect rx="29" ry="29" x="-116.0234375" y="-29" width="232.046875" height="58" class="label-container"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-98.7734375,-19)"><foreignObject width="197.546875" height="38"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Simulate transmission using<br>simpleMultihopDelay.</div></foreignObject></g></g></g><g class="node default" id="flowchart-id8-47" transform="translate(513.8179626464844,943.0421752929688)" style="opacity: 1;"><polygon points="129.290625,0 258.58125,-129.290625 129.290625,-258.58125 0,-129.290625" transform="translate(-129.290625,129.290625)" class="label-container"></polygon><g class="label" transform="translate(0,0)"><g transform="translate(-104.65625,-19)"><foreignObject width="209.3125" height="38"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Sender directly able to reach<br>destination area?</div></foreignObject></g></g></g><g class="node default" id="flowchart-id9-50" transform="translate(360.3570251464844,1170.3327941894531)" style="opacity: 1;"><rect rx="19.5" ry="19.5" x="-115.109375" y="-19.5" width="230.21875" height="39" class="label-container"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-100.234375,-9.5)"><foreignObject width="200.46875" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Flooding in destination area</div></foreignObject></g></g></g><g class="node default" id="flowchart-id10-53" transform="translate(667.2789001464844,1170.3327941894531)" style="opacity: 1;"><rect rx="29" ry="29" x="-141.8125" y="-29" width="283.625" height="58" class="label-container"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-124.5625,-19)"><foreignObject width="249.125" height="38"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Greedy Forwarding to reach area,<br>then flooding in destination areay.</div></foreignObject></g></g></g></g></g></g></svg> |
| </div> |
| |
| <div class="desc"> |
| This flowchart tells how different types of messages are handled internally. |
| </div> |
| |
| </div> |
| |
| |
| <h3 id="topocasts">TopoCasts</h3> |
| <p>The only way of directly addressing entities is a <em>SingleHopUniCast</em> (see figure below), the sender will try to address an entity |
| in its transmission range. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <figure id="figure-singlehopunicast-the-rsu-is-directly-addressing-the-green-vehicle"> |
| |
| |
| <a data-fancybox="" href="../images/SingleHopUniCast.png" data-caption="SingleHopUniCast: The RSU is directly addressing the green vehicle."> |
| |
| |
| <img src="../images/SingleHopUniCast.png" alt="" > |
| </a> |
| |
| |
| |
| |
| <figcaption> |
| SingleHopUniCast: The RSU is directly addressing the green vehicle. |
| </figcaption> |
| |
| |
| </figure> |
| |
| The counterpart to that is a <em>SingleHopBroadCast</em> (see figure below), this form of transmission is commonly used for CAMs (Cooperative Awareness Messages) |
| and other types of intermediate warning messages to all entities in transmission range.<br> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <figure id="figure-singlehopbroadcast-the-rsu-is-addressing-all-units-in-transmission-range"> |
| |
| |
| <a data-fancybox="" href="../images/SingleHopBroadCast.png" data-caption="SingleHopBroadCast: The RSU is addressing all units in transmission range."> |
| |
| |
| <img src="../images/SingleHopBroadCast.png" alt="" > |
| </a> |
| |
| |
| |
| |
| <figcaption> |
| SingleHopBroadCast: The RSU is addressing all units in transmission range. |
| </figcaption> |
| |
| |
| </figure> |
| </p> |
| <h3 id="geocasts">GeoCasts</h3> |
| <p>As already explained, GeoCasts do not support direct addressing, so there is no form of UniCast. Instead of addressing |
| entities, GeoCasts specify a destination area in which a message should be distributed. |
| The SNS supports two ways to simulate GeoCasts. |
| A simple but performant model (<code>SimpleAdhocTransmissionModel</code>) &amp; a fairly realistic model ( <code>SophisticatedAdhocTransmissionModel</code>).</p> |
| <p>The simple model assumes a transmission to all entities in the specified area, whereas the delay will be calculated using the configured delay-type and the successful reception will be determined by the uniformly distributed lossProbability. |
| The figure below depicts this behaviour |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <figure id="figure-simple-geobroadcast-the-rsu-is-sending-to-all-entities-in-the-destination-area-all-arrows-transmissions-will-have-a-uniquely-calculated-delay-or-possible-loss"> |
| |
| |
| <a data-fancybox="" href="../images/SimpleMultiHop.png" data-caption="Simple GeoBroadCast: The RSU is sending to all entities in the destination area. All arrows (transmissions) will have a uniquely calculated delay or possible loss."> |
| |
| |
| <img src="../images/SimpleMultiHop.png" alt="" > |
| </a> |
| |
| |
| |
| |
| <figcaption> |
| Simple GeoBroadCast: The RSU is sending to all entities in the destination area. All arrows (transmissions) will have a uniquely calculated delay or possible loss. |
| </figcaption> |
| |
| |
| </figure> |
| </p> |
| <p>The realistic model accounts for possible transmission failures more accurately. The easiest case is that the sender itself is inside |
| of the destination area<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> and will start a |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="#flooding-transmission"> |
| Flooding Transmission |
| </a> |
| within this area (see figure below). |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <figure id="figure-geobroadcast-using-flooding-transmissionflooding-transmission-note-the-area-is-not-limited-to-circles"> |
| |
| |
| <a data-fancybox="" href="../images/FloodingTransmission.png" data-caption="GeoBroadCast using Flooding Transmission. Note: the area is not limited to circles."> |
| |
| |
| <img src="../images/FloodingTransmission.png" alt="" > |
| </a> |
| |
| |
| |
| |
| <figcaption> |
| GeoBroadCast using <a href="#flooding-transmission">Flooding Transmission</a>. Note: the area is not limited to circles. |
| </figcaption> |
| |
| |
| </figure> |
| </p> |
| <p>In case the sending entity is outside of the destination area, a |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="#approaching-transmission"> |
| Forwarding Transmission |
| </a> |
| has to |
| be executed first. This is can also be described as an <em>AnyCast</em>, since the goal of this transmission is to reach <em>any</em> entity |
| inside the destination area. We try to achieve this by building a &ldquo;chain&rdquo; of entities, that will forward the message to the destination |
| are (see figure below). |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <figure id="figure-forwarding-transmission-by-building-a-chain-of-vehicles"> |
| |
| |
| <a data-fancybox="" href="../images/ApproachingTransmission.png" data-caption="Forwarding Transmission, by building a &ldquo;chain&rdquo; of vehicles."> |
| |
| |
| <img src="../images/ApproachingTransmission.png" alt="" > |
| </a> |
| |
| |
| |
| |
| <figcaption> |
| Forwarding Transmission, by building a &ldquo;chain&rdquo; of vehicles. |
| </figcaption> |
| |
| |
| </figure> |
| </p> |
| <p>The SNS however never uses |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="#approaching-transmission"> |
| Forwarding Transmissions |
| </a> |
| individually, rather they are combined with a |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="#flooding-transmission"> |
| Flooding Transmission |
| </a> |
| , which |
| will simulate a way, that GeaCasts can be implemented in reality. The figure below depicts this behaviour. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <figure id="figure-forwarding-transmission-followed-by-a-flooding-transmissionflooding-transmission-to-realistically-simulate-geocasts"> |
| |
| |
| <a data-fancybox="" href="../images/ApproachingAndFlooding.png" data-caption="Forwarding Transmission followed by a Flooding Transmission to realistically simulate GeoCasts."> |
| |
| |
| <img src="../images/ApproachingAndFlooding.png" alt="" > |
| </a> |
| |
| |
| |
| |
| <figcaption> |
| Forwarding Transmission followed by a <a href="#flooding-transmission">Flooding Transmission</a> to realistically simulate GeoCasts. |
| </figcaption> |
| |
| |
| </figure> |
| </p> |
| <h2 id="transmission-models">Transmission Models</h2> |
| <p>As already mentioned in the previous abstracts, the SNS supports different transmission models for different use cases. |
| Depending on the configuration of the SNS and the type of message send, different models will be used. |
| The models are located in the package <code>org.eclipse.mosaic.fed.sns.ambassador.model</code>. This chapter aims to give |
| a detailed inside in the workings of the models.</p> |
| <h3 id="simpleadhoctransmissionmodel"><code>SimpleAdhocTransmissionModel</code></h3> |
| <p>This is the most basic of all transmission models and will be your model of choice if you are not interested in completely |
| accurate transmission results but care for performance. This model will approximate GeoCasts using the defined <code>simpleMultihopDelay</code> |
| and <code>simpleMultihopTransmission</code> parameters. |
| For TopoCasts the usual <code>singlehopDelay</code> will be used. |
| This model only checks, whether a potential receiver is inside the destination area and has enabled Adhoc capabilities. |
| If those conditions are met it will simulate the transmission by calculating an actual delay value and saving it into a |
| transmission-result. Such a result holds information of the success of the transmission, the delay-value, the amount of hops, |
| and the number of attempts. Though the amount of hops will always be 1 for this model.</p> |
| <h3 id="sophisticatedadhoctransmissionmodel"><code>SophisticatedAdhocTransmissionModel</code></h3> |
| <p>This model offers are more realistic simulation of adhoc transmissions, using an implementation of a greedy-forwarding and flooding |
| algorithm (see |
| |
| |
| |
| |
| <a href="https://en.wikipedia.org/wiki/Geographic_routing" target="_blank" rel="noopener"> |
| here (greedy forwarding) |
| </a> |
| &amp; |
| |
| |
| |
| |
| |
| <a href="https://en.wikipedia.org/wiki/Flooding_%28computer_networking%29" target="_blank" rel="noopener"> |
| here (flooding) |
| </a> |
| ). For TopoCasts this model behaves very |
| similarly to the <code>SimpleAdhocTransmissionModel</code>, since TopoCasts are always configured with only one hop. |
| For GeoCasts however, this model follows the flowchart above, trying to &ldquo;approach&rdquo; a destination area if it can&rsquo;t be reached directly.</p> |
| <h4 id="approaching-greedy-forwarding">Approaching (Greedy forwarding)</h4> |
| <p>Approaching can be imagined as building a &ldquo;chain&rdquo; of entities to reach an area. However, there is no |
| guarantee, that even if such a chain exists, it will be found. The way that this chain is build follows the subsequent steps:</p> |
| <ul> |
| <li>Start from the sender and collect all reachable entities.</li> |
| <li>Choose out of all reachable entities the one, that is closest to any node in the destination area.</li> |
| <li>Use the chosen node and repeat the first step.</li> |
| <li>Repeat until either a node inside the destination area is reached, or the TTL (time to live) is exceeded.</li> |
| </ul> |
| <p>By always choosing the node with the shortest distance to the destination area, we omit a lot of possible solutions. |
| Greedy Forwarding isn&rsquo;t optimal, but offers a performant approach for this problem. &ldquo;Face Routing&rdquo;-algorithms will always |
| find a path if one exists, however this hasn&rsquo;t been implemented yet (feel free to contribute :). |
| The figure below shows an example of those shortcomings, the message will be send using the green nodes and won&rsquo;t receive the destination |
| area, even though there is a possible &ldquo;chain&rdquo; using the yellow nodes.</p> |
| |
| |
| |
| <div class="svg-wrap mt-1 mb-4"> |
| <div class="inner"> |
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> |
| <svg |
| xmlns:dc="http://purl.org/dc/elements/1.1/" |
| xmlns:cc="http://creativecommons.org/ns#" |
| xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
| xmlns:svg="http://www.w3.org/2000/svg" |
| xmlns="http://www.w3.org/2000/svg" |
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" |
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" |
| width="100%" |
| height="100%" |
| viewBox="0 0 1000 1100" |
| preserveAspectRatio="xMinYMin meet" |
| version="1.1" |
| id="svg112" |
| sodipodi:docname="shortcomingsApproaching.svg" |
| inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> |
| <metadata |
| id="metadata116"> |
| <rdf:RDF> |
| <cc:Work |
| rdf:about=""> |
| <dc:format>image/svg+xml</dc:format> |
| <dc:type |
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> |
| <dc:title></dc:title> |
| </cc:Work> |
| </rdf:RDF> |
| </metadata> |
| <sodipodi:namedview |
| pagecolor="#ffffff" |
| bordercolor="#000000" |
| borderopacity="1" |
| objecttolerance="10" |
| gridtolerance="10" |
| guidetolerance="10" |
| inkscape:pageopacity="0" |
| inkscape:pageshadow="2" |
| inkscape:window-width="2560" |
| inkscape:window-height="1377" |
| id="namedview114" |
| showgrid="false" |
| inkscape:zoom="0.54909091" |
| inkscape:cx="70.460088" |
| inkscape:cy="483.05537" |
| inkscape:window-x="1912" |
| inkscape:window-y="-8" |
| inkscape:window-maximized="1" |
| inkscape:current-layer="g110" /> |
| <defs |
| id="defs66"> |
| <clipPath |
| id="EGXEKOJWuGVn"> |
| <path |
| id="svg_1" |
| d="m0,0l1673,0l0,1285l-1673,0l0,-1285z" |
| fill="none" /> |
| </clipPath> |
| </defs> |
| <g |
| id="g110"> |
| <title |
| id="title68">Layer 1</title> |
| <path |
| style="fill:#ffd700;fill-opacity:0.3" |
| inkscape:connector-curvature="0" |
| d="m 460.74242,186.92776 c 0,75.84645 -61.4857,137.33215 -137.33215,137.33215 -75.84645,0 -137.33215,-61.4857 -137.33215,-137.33215 0,-75.84645 61.4857,-137.332153 137.33215,-137.332153 75.84645,0 137.33215,61.485703 137.33215,137.332153 z" |
| id="svg_5" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#caab06;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:0.69803999" |
| inkscape:connector-curvature="0" |
| d="m 460.74242,186.92776 c 0,75.84645 -61.4857,137.33215 -137.33215,137.33215 -75.84645,0 -137.33215,-61.4857 -137.33215,-137.33215 0,-75.84645 61.4857,-137.332153 137.33215,-137.332153 75.84645,0 137.33215,61.485703 137.33215,137.332153 z" |
| stroke-miterlimit="10" |
| id="svg_6" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <text |
| style="font-style:normal;font-weight:normal;font-size:20px;font-family:geogebra-sans-serif, sans-serif;text-anchor:start;fill:#ffd700" |
| font-size="20px" |
| font-style="normal" |
| font-weight="normal" |
| x="229.62225" |
| y="37.811882" |
| id="svg_7" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96">Destination Area</text> |
| <text |
| style="font-style:normal;font-weight:normal;font-size:20px;font-family:geogebra-sans-serif, sans-serif;text-anchor:start;fill:none;stroke:#ffffff;stroke-width:3;stroke-linejoin:bevel;stroke-miterlimit:10" |
| font-size="20px" |
| font-style="normal" |
| font-weight="normal" |
| x="229.62225" |
| y="37.811882" |
| stroke-miterlimit="10" |
| id="svg_8" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96">Destination Area</text> |
| <text |
| style="font-style:normal;font-weight:normal;font-size:20px;font-family:geogebra-sans-serif, sans-serif;text-anchor:start;fill:#978006;stroke:none;stroke-opacity:1;" |
| font-size="20px" |
| font-style="normal" |
| font-weight="normal" |
| x="229.62225" |
| y="37.811882" |
| id="svg_9" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96">Destination Area</text> |
| <path |
| style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:8.5, 8;stroke-opacity:0.69803999" |
| inkscape:connector-curvature="0" |
| d="m 529.40849,873.5885 c 0,113.7697 -92.22855,205.9982 -205.99822,205.9982 -113.76968,0 -205.99822,-92.2285 -205.99822,-205.9982 0,-113.76967 92.22854,-205.99822 205.99822,-205.99822 113.76967,0 205.99822,92.22855 205.99822,205.99822 z" |
| stroke-miterlimit="10" |
| id="svg_10" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:8.5, 8;stroke-opacity:0.69803999" |
| inkscape:connector-curvature="0" |
| d="m 486.82048,688.91189 c 0,113.76968 -92.22854,205.99822 -205.99822,205.99822 -113.76968,0 -205.99822,-92.22854 -205.99822,-205.99822 0,-113.76968 92.22854,-205.99822 205.99822,-205.99822 113.76968,0 205.99822,92.22854 205.99822,205.99822 z" |
| stroke-miterlimit="10" |
| id="svg_11" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:8.5, 8;stroke-opacity:0.69803999" |
| inkscape:connector-curvature="0" |
| d="m 428.82048,511.91189 c 0,113.76968 -92.22854,205.99822 -205.99822,205.99822 -113.76968,0 -205.99822,-92.22854 -205.99822,-205.99822 0,-113.76968 92.22854,-205.99822 205.99822,-205.99822 113.76968,0 205.99822,92.22854 205.99822,205.99822 z" |
| stroke-miterlimit="10" |
| id="svg_12" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:8.5, 8;stroke-opacity:0.69803999" |
| inkscape:connector-curvature="0" |
| d="m 696.92801,775.58689 c 0,113.76968 -92.2286,205.99821 -205.99825,205.99821 -113.76968,0 -205.99822,-92.22853 -205.99822,-205.99821 0,-113.76968 92.22854,-205.99822 205.99822,-205.99822 113.76965,0 205.99825,92.22854 205.99825,205.99822 z" |
| stroke-miterlimit="10" |
| id="svg_13" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:8.5, 8;stroke-opacity:0.69803999" |
| inkscape:connector-curvature="0" |
| d="m 846.82051,657.91189 c 0,113.76968 -92.2286,205.99822 -205.9982,205.99822 -113.76973,0 -205.99827,-92.22854 -205.99827,-205.99822 0,-113.76968 92.22854,-205.99822 205.99827,-205.99822 113.7696,0 205.9982,92.22854 205.9982,205.99822 z" |
| stroke-miterlimit="10" |
| id="svg_14" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:8.5, 8;stroke-opacity:0.69803999" |
| inkscape:connector-curvature="0" |
| d="m 988.82051,527.91189 c 0,113.76968 -92.2286,205.99822 -205.9982,205.99822 -113.7697,0 -205.99827,-92.22854 -205.99827,-205.99822 0,-113.76968 92.22857,-205.99822 205.99827,-205.99822 113.7696,0 205.9982,92.22854 205.9982,205.99822 z" |
| stroke-miterlimit="10" |
| id="svg_15" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:8.5, 8;stroke-opacity:0.69803999" |
| inkscape:connector-curvature="0" |
| d="m 941.82051,347.91189 c 0,113.76968 -92.2286,205.99822 -205.9982,205.99822 -113.7697,0 -205.99827,-92.22854 -205.99827,-205.99822 0,-113.76968 92.22857,-205.99822 205.99827,-205.99822 113.7696,0 205.9982,92.22854 205.9982,205.99822 z" |
| stroke-miterlimit="10" |
| id="svg_16" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:8.5, 8;stroke-opacity:0.69803999" |
| inkscape:connector-curvature="0" |
| d="m 783.82051,235.91189 c 0,113.76968 -92.2286,205.99822 -205.99825,205.99822 -113.76968,0 -205.99822,-92.22854 -205.99822,-205.99822 0,-113.76968 92.22854,-205.998223 205.99822,-205.998223 113.76965,0 205.99825,92.228543 205.99825,205.998223 z" |
| stroke-miterlimit="10" |
| id="svg_17" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:#1565c0" |
| inkscape:connector-curvature="0" |
| d="m 332.41027,873.5885 c 0,4.97057 -4.02944,9 -9,9 -4.97056,0 -9,-4.02943 -9,-9 0,-4.97056 4.02944,-9 9,-9 4.97056,0 9,4.02944 9,9 z" |
| id="svg_18" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" |
| inkscape:connector-curvature="0" |
| d="m 332.41027,873.5885 c 0,4.97057 -4.02944,9 -9,9 -4.97056,0 -9,-4.02943 -9,-9 0,-4.97056 4.02944,-9 9,-9 4.97056,0 9,4.02944 9,9 z" |
| stroke-miterlimit="10" |
| id="svg_19" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <text |
| style="font-style:normal;font-weight:normal;font-size:20px;font-family:geogebra-sans-serif, sans-serif;text-anchor:start;fill:#1565c0" |
| font-size="20px" |
| font-style="normal" |
| font-weight="normal" |
| x="293.62225" |
| y="854.81189" |
| id="svg_20" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96">Sender</text> |
| <text |
| style="font-style:normal;font-weight:normal;font-size:20px;font-family:geogebra-sans-serif, sans-serif;text-anchor:start;fill:none;stroke:#ffffff;stroke-width:3;stroke-linejoin:bevel;stroke-miterlimit:10" |
| font-size="20px" |
| font-style="normal" |
| font-weight="normal" |
| x="293.62225" |
| y="854.81189" |
| stroke-miterlimit="10" |
| id="svg_21" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96">Sender</text> |
| <text |
| style="font-style:normal;font-weight:normal;font-size:20px;font-family:geogebra-sans-serif, sans-serif;text-anchor:start;fill:#1565c0;stroke:none;stroke-opacity:1;" |
| font-size="20px" |
| font-style="normal" |
| font-weight="normal" |
| x="293.62225" |
| y="854.81189" |
| id="svg_22" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96">Sender</text> |
| <path |
| style="fill:#ffd700" |
| inkscape:connector-curvature="0" |
| d="m 649.82231,657.91189 c 0,4.97056 -4.0295,9 -9,9 -4.9706,0 -9,-4.02944 -9,-9 0,-4.97056 4.0294,-9 9,-9 4.9705,0 9,4.02944 9,9 z" |
| id="svg_23" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" |
| inkscape:connector-curvature="0" |
| d="m 649.82231,657.91189 c 0,4.97056 -4.0295,9 -9,9 -4.9706,0 -9,-4.02944 -9,-9 0,-4.97056 4.0294,-9 9,-9 4.9705,0 9,4.02944 9,9 z" |
| stroke-miterlimit="10" |
| id="svg_24" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:#ffd700" |
| inkscape:connector-curvature="0" |
| d="m 791.82231,527.91189 c 0,4.97056 -4.0295,9 -9,9 -4.9706,0 -9,-4.02944 -9,-9 0,-4.97056 4.0294,-9 9,-9 4.9705,0 9,4.02944 9,9 z" |
| id="svg_25" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" |
| inkscape:connector-curvature="0" |
| d="m 791.82231,527.91189 c 0,4.97056 -4.0295,9 -9,9 -4.9706,0 -9,-4.02944 -9,-9 0,-4.97056 4.0294,-9 9,-9 4.9705,0 9,4.02944 9,9 z" |
| stroke-miterlimit="10" |
| id="svg_26" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:#006633" |
| inkscape:connector-curvature="0" |
| d="m 289.82226,688.91189 c 0,4.97056 -4.02944,9 -9,9 -4.97056,0 -9,-4.02944 -9,-9 0,-4.97056 4.02944,-9 9,-9 4.97056,0 9,4.02944 9,9 z" |
| id="svg_27" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" |
| inkscape:connector-curvature="0" |
| d="m 289.82226,688.91189 c 0,4.97056 -4.02944,9 -9,9 -4.97056,0 -9,-4.02944 -9,-9 0,-4.97056 4.02944,-9 9,-9 4.97056,0 9,4.02944 9,9 z" |
| stroke-miterlimit="10" |
| id="svg_28" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:#993300" |
| inkscape:connector-curvature="0" |
| d="m 310.87082,296.76468 c 0,4.97056 -4.02944,9 -9,9 -4.97057,0 -9,-4.02944 -9,-9 0,-4.97056 4.02943,-9 9,-9 4.97056,0 9,4.02944 9,9 z" |
| id="svg_29" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" |
| inkscape:connector-curvature="0" |
| d="m 310.87082,296.76468 c 0,4.97056 -4.02944,9 -9,9 -4.97057,0 -9,-4.02944 -9,-9 0,-4.97056 4.02943,-9 9,-9 4.97056,0 9,4.02944 9,9 z" |
| stroke-miterlimit="10" |
| id="svg_30" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:#993300" |
| inkscape:connector-curvature="0" |
| d="m 415.68715,197.27798 c 0,4.97057 -4.02943,9 -9,9 -4.97056,0 -9,-4.02943 -9,-9 0,-4.97056 4.02944,-9 9,-9 4.97057,0 9,4.02944 9,9 z" |
| id="svg_31" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" |
| inkscape:connector-curvature="0" |
| d="m 415.68715,197.27798 c 0,4.97057 -4.02943,9 -9,9 -4.97056,0 -9,-4.02943 -9,-9 0,-4.97056 4.02944,-9 9,-9 4.97057,0 9,4.02944 9,9 z" |
| stroke-miterlimit="10" |
| id="svg_32" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:#993300" |
| inkscape:connector-curvature="0" |
| d="m 319.75356,156.41738 c 0,4.97056 -4.02944,9 -9,9 -4.97057,0 -9,-4.02944 -9,-9 0,-4.97056 4.02943,-9 9,-9 4.97056,0 9,4.02944 9,9 z" |
| id="svg_33" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" |
| inkscape:connector-curvature="0" |
| d="m 319.75356,156.41738 c 0,4.97056 -4.02944,9 -9,9 -4.97057,0 -9,-4.02944 -9,-9 0,-4.97056 4.02943,-9 9,-9 4.97056,0 9,4.02944 9,9 z" |
| stroke-miterlimit="10" |
| id="svg_34" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:#006400" |
| inkscape:connector-curvature="0" |
| d="m 231.82226,511.91189 c 0,4.97056 -4.02944,9 -9,9 -4.97056,0 -9,-4.02944 -9,-9 0,-4.97056 4.02944,-9 9,-9 4.97056,0 9,4.02944 9,9 z" |
| id="svg_35" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" |
| inkscape:connector-curvature="0" |
| d="m 231.82226,511.91189 c 0,4.97056 -4.02944,9 -9,9 -4.97056,0 -9,-4.02944 -9,-9 0,-4.97056 4.02944,-9 9,-9 4.97056,0 9,4.02944 9,9 z" |
| stroke-miterlimit="10" |
| id="svg_36" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:#ffd700" |
| inkscape:connector-curvature="0" |
| d="m 499.92976,775.58689 c 0,4.97056 -4.02944,9 -9,9 -4.97056,0 -9,-4.02944 -9,-9 0,-4.97056 4.02944,-9 9,-9 4.97056,0 9,4.02944 9,9 z" |
| id="svg_37" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" |
| inkscape:connector-curvature="0" |
| d="m 499.92976,775.58689 c 0,4.97056 -4.02944,9 -9,9 -4.97056,0 -9,-4.02944 -9,-9 0,-4.97056 4.02944,-9 9,-9 4.97056,0 9,4.02944 9,9 z" |
| stroke-miterlimit="10" |
| id="svg_38" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:#ffd700" |
| inkscape:connector-curvature="0" |
| d="m 744.82231,347.91189 c 0,4.97056 -4.0295,9 -9,9 -4.9706,0 -9,-4.02944 -9,-9 0,-4.97056 4.0294,-9 9,-9 4.9705,0 9,4.02944 9,9 z" |
| id="svg_39" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" |
| inkscape:connector-curvature="0" |
| d="m 744.82231,347.91189 c 0,4.97056 -4.0295,9 -9,9 -4.9706,0 -9,-4.02944 -9,-9 0,-4.97056 4.0294,-9 9,-9 4.9705,0 9,4.02944 9,9 z" |
| stroke-miterlimit="10" |
| id="svg_40" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:#ffd700" |
| inkscape:connector-curvature="0" |
| d="m 586.82226,235.91189 c 0,4.97056 -4.02944,9 -9,9 -4.97056,0 -9,-4.02944 -9,-9 0,-4.97056 4.02944,-9 9,-9 4.97056,0 9,4.02944 9,9 z" |
| id="svg_41" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| <path |
| style="fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10" |
| inkscape:connector-curvature="0" |
| d="m 586.82226,235.91189 c 0,4.97056 -4.02944,9 -9,9 -4.97056,0 -9,-4.02944 -9,-9 0,-4.97056 4.02944,-9 9,-9 4.97056,0 9,4.02944 9,9 z" |
| stroke-miterlimit="10" |
| id="svg_42" |
| inkscape:export-xdpi="96" |
| inkscape:export-ydpi="96" /> |
| </g> |
| </svg> |
| |
| </div> |
| |
| <div class="desc"> |
| This figure depicts a case were the Approaching Transmission wouldn&rsquo;t reach the destination area, even though there is a possible way. (The dashed lines represent the communication range) |
| </div> |
| |
| </div> |
| |
| |
| <h4 id="flooding">Flooding</h4> |
| <p>The implementation of Flooding is fairly equivalent as described on |
| |
| |
| |
| |
| |
| <a href="https://en.wikipedia.org/wiki/Flooding_%28computer_networking%29" target="_blank" rel="noopener"> |
| wikipedia |
| </a> |
| . Each entity forwards the message to all entities |
| in its communication range. Entities, that already received the message won&rsquo;t receive it again; this is different from many real-life |
| implementations, where messages are send to all reachable entities except the sender. However, since the simulation has total |
| knowledge of all simulated entities, it is easier to overcome a lot of the disadvantages, that flooding faces |
| in real world implementations.</p> |
| <h4 id="implementing-your-own-adhoctransmissionmodel">Implementing your own <code>AdhocTransmissionModel</code></h4> |
| <p>If the implemented models don&rsquo;t suffice your needs you can easily implement your own. |
| Create a class extending <code>AdhocTransmissionModel</code> and implement the abstract methods for sending TopoCasts/GeoCasts. |
| A possible extension could be to allow for multihop TopoCasts, building an actual topology and transmit your |
| messages using that topology. Also, the aforementioned &ldquo;Face-Routing&rdquo; could be of interest. Additionally, the calculation |
| of delays could be made more realistic.</p> |
| <h2 id="accessing-sns-functionality-from-your-applications">Accessing SNS-functionality from your applications</h2> |
| <p>In order for your scenario to enable the SNS follow the steps |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/building_scenarios/scenario_configuration/#communication-simulators-cell-ns3-omnetpp-sns"> |
| here |
| </a> |
| . |
| An overview of how to configure AdHoc-modules and usage of the API for Routing and Message-Building functions, |
| can be found |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/develop_applications/communication/"> |
| here |
| </a> |
| .</p> |
| <section class="footnotes" role="doc-endnotes"> |
| <hr> |
| <ol> |
| <li id="fn:1" role="doc-endnote"> |
| <p>Or is able to communicate with an entity inside the destination area. <a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> |
| </li> |
| </ol> |
| </section> |
| </description> |
| </item> |
| |
| <item> |
| <title>Network Simulator Cell</title> |
| <link>https://staging.eclipse.org/mosaic/docs/simulators/network_simulator_cell/</link> |
| <pubDate>Sun, 05 May 2019 00:00:00 +0100</pubDate> |
| <guid>https://staging.eclipse.org/mosaic/docs/simulators/network_simulator_cell/</guid> |
| <description><p>The built-in Eclipse MOSAIC Cell Simulator enables the applications to use cellular network communication. |
| The simulation of cellular communication in Eclipse MOSAIC consists of two parts:</p> |
| <ol> |
| <li>The Cellular Simulator itself and</li> |
| <li>The applications that can communicate over cellular networks in the Application Simulator</li> |
| </ol> |
| <p>These changes are done in a generic way, making the cellular simulator exchangeable. Users interested |
| in a different kind of simulation of cellular communication may use other simulators and develop |
| ambassadors connecting them to Eclipse MOSAIC.</p> |
| <p>The Cellular Simulator in the current state consists of three main modules:</p> |
| <ol> |
| <li>UplinkModule</li> |
| <li>GeocasterModule</li> |
| <li>DownlinkModule</li> |
| </ol> |
| <p>The Geocaster module simulates a mandatory component for ITS communication. It is inspired by |
| the several architectures from research projects as simTD or CONVERGE to enable ITS use cases over |
| cellular networks. It mainly takes over the task of an addressing and routing component with geographic |
| knowledge to support geo-addressing. However, it also supports regular topological addressing. |
| The Uplink and DownlinkModule are responsible for the transmission simulation. They account for the |
| aspects of transmission delays, packet losses and available data rates. In this context,Uplink and Downlink |
| always refer to the direction towards respectively from the Geocaster. For instance, a transmission |
| from an Internet-based server towards a vehicle would include an Uplink between the server and the |
| Geocaster and a Downlink between the Geocaster and the vehicle. While the Uplink direction only allows |
| point-to-point communication (Unicast), the Downlink supports point-to-point (Unicast) as well as |
| point-to-multipoint (Multicast).</p> |
| <h3 id="cellambassador-folder-structure">CellAmbassador folder structure</h3> |
| <p>The Eclipse MOSAIC Cell simulator can be configured via three distinct configuration files, which can be |
| found within the scenarios' folder structure:</p> |
| <pre><code class="language-plaintext">└─ &lt;scenario_name&gt; |
| └─ cell |
| ├─ cell_config.json ................. Cell ambassador configuration file |
| ├─ network.json ..................... Network configuration file |
| └─ regions.json ..................... Regions configuration file |
| </code></pre> |
| <p>The network and regions configuration files are referenced in the cellular ambassador configuration |
| file.</p> |
| <div class="alert alert-tip"> |
| <div> |
| <p>Read the detailed documentation of the |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/mosaic_configuration/cell_network_config/"> |
| Network |
| </a> |
| and |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/mosaic_configuration/cell_region_config/"> |
| Regions Configuration |
| </a> |
| .</p> |
| </div> |
| </div> |
| <h3 id="installation">Installation</h3> |
| <p>This simulator does not need to be installed. It is delivered as part of the Eclipse MOSAIC-installation package.</p> |
| <h3 id="configuration">Configuration</h3> |
| <p>We provide a cellular configuration file in the example scenarios of Tiergarten and Barnim. Please note |
| that in the default configuration of this scenario the Cellular Simulator is deactivated. To activate the |
| cellular simulator just enable the <code>cell</code> federate in the <code>scenario_config.json</code>:</p> |
| <pre><code class="language-json">&quot;federates&quot;: { |
| ... |
| &quot;cell&quot;: true, |
| ... |
| } |
| </code></pre> |
| <p>The central configuration for the cellular simulator in the file |
| <code>&lt;scenarioName&gt;/cell/cell_config.json</code> could look like this:</p> |
| <pre><code class="language-Json">{ |
| &quot;debugGeocasting&quot;: false, |
| &quot;visualizeRegions&quot;: true, |
| &quot;networkConfigurationFile&quot;: &quot;network.json &quot;, |
| &quot;regionConfigurationFile&quot;: &quot;regions.json &quot; |
| } |
| </code></pre> |
| <p>The <code>visualizeRegions</code> option from the <code>cell_config.json</code> is used to write a KML-file that visualizes the |
| used cell regions. Google Earth can be used to display it.</p> |
| <div class="alert alert-tip"> |
| <div> |
| <p>Read the detailed documentations of:</p> |
| <ul> |
| <li> |
| <p> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/mosaic_configuration/cell_network_config/"> |
| Cell Network Configuration |
| </a> |
| </p> |
| </li> |
| <li> |
| <p> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/mosaic_configuration/cell_region_config/"> |
| Cell Region Configuration |
| </a> |
| </p> |
| </div> |
| </li> |
| </ul> |
| </div> |
| <p>The configuration for the global network in the cellular simulator in the file |
| <code>&lt;scenarioName&gt;/cell/network.json</code> could look like this:</p> |
| <pre><code class="language-json">{ |
| &quot;globalNetwork&quot;: { |
| &quot;uplink&quot;: { |
| &quot;delay&quot;: { |
| &quot;type&quot;: &quot;ConstantDelay&quot;, |
| &quot;delay&quot;: &quot;100 ms&quot; |
| }, |
| &quot;transmission&quot;: { |
| &quot;lossProbability&quot;: 0.0, |
| &quot;maxRetries&quot;: 2 |
| }, |
| &quot;capacity&quot;: 28000000 |
| }, |
| &quot;downlink&quot;: { |
| &quot;unicast&quot;: { |
| &quot;delay&quot;: { |
| &quot;type&quot;: &quot;ConstantDelay&quot;, |
| &quot;delay&quot;: &quot;50 ms&quot; |
| }, |
| &quot;transmission&quot;: { |
| &quot;lossProbability&quot;: 0.0, |
| &quot;maxRetries&quot;: 2 |
| } |
| }, |
| &quot;multicast&quot;: { |
| &quot;delay&quot;: { |
| &quot;type&quot;: &quot;ConstantDelay&quot;, |
| &quot;delay&quot;: &quot;100 ms&quot; |
| }, |
| &quot;transmission&quot;: { |
| &quot;lossProbability&quot;: 0.0 |
| }, |
| &quot;usableCapacity&quot;: 0.6 |
| }, |
| &quot;capacity&quot;: 42200000 |
| } |
| } |
| } |
| </code></pre> |
| <p>The <code>network.json</code> also allows setting the fields <code>defaultDownlinkCapacity</code> and <code>defaultUplinkCapacity</code>, |
| which are used if you don&rsquo;t specify any bitrates in your <code>CellConfiguration</code>s inside your applications. |
| These values are set to 100 Gigabit by default, so if you aren&rsquo;t interested in capacity/bandwidth observations you can |
| probably just leave them as is.</p> |
| <h3 id="server-configuration">Server configuration</h3> |
| <p>MOSAIC supports a type of simulation units, called servers. Traffic Management Centers are a specialised type of server. |
| What differentiates servers from other units is, that |
| they are treated as having no geographical location and instead are located &ldquo;inside the internet.&rdquo;. This concept omits prior shortcoming, |
| where one would have to configure RSU&rsquo;s as servers.<br> |
| Servers are also configured in the <code>network.json</code> as follows:</p> |
| <pre><code class="language-json">{ |
| &quot;defaultDownlinkCapacity&quot;: &quot;10 Gbps&quot;, |
| &quot;defaultUplinkCapacity&quot;: &quot;10 Gbps&quot;, |
| &quot;globalNetwork&quot;: { |
| [...] |
| }, |
| &quot;servers&quot;: { |
| { |
| &quot;id&quot;: &quot;TestServer&quot;, |
| &quot;uplink&quot;: { |
| &quot;delay&quot;: { |
| &quot;type&quot;: &quot;ConstantDelay&quot;, |
| &quot;delay&quot;: &quot;200 ms&quot; |
| }, |
| &quot;transmission&quot;: { |
| &quot;lossProbability&quot;: 0.5, |
| &quot;maxRetries&quot;: 2 |
| } |
| }, |
| &quot;downlink&quot;: { |
| &quot;unicast&quot;: { |
| &quot;delay&quot;: { |
| &quot;type&quot;: &quot;SimpleRandomDelay&quot;, |
| &quot;steps&quot;: 5, |
| &quot;minDelay&quot;: &quot;100 ms&quot;, |
| &quot;maxDelay&quot;: &quot;200 ms&quot; |
| }, |
| &quot;transmission&quot;: { |
| &quot;lossProbability&quot;: 0.1, |
| &quot;maxRetries&quot;: 2 |
| } |
| } |
| } |
| }, |
| { |
| [...] |
| } |
| } |
| } |
| </code></pre> |
| <blockquote> |
| <p>Note: The fields <code>defaultDownlinkCapacity</code>, <code>defaultUplinkCapacity</code> are used if you don&rsquo;t define any bitrates for your cell configurations |
| their default values are 100 Gigabit, so you usually don&rsquo;t need to set them.</p> |
| </blockquote> |
| <p>Servers get their configuration for the delay and retransmission models from the <code>network.json</code> and the configuration for the |
| capacity-model has to be made from within an application, by activating the <code>CellModule</code> and properly setting the bit rates. |
| This could look as follows:</p> |
| <pre><code class="language-java"> getOs().getCellModule().enable( |
| new CellModuleConfiguration() |
| .maxUlBitrate(10000) |
| .maxDlBitrate(10000) |
| ); |
| |
| // Alternatively using default values from network.json |
| getOs().getCellModule().enable(); |
| </code></pre> |
| <p>For the CellAmbassador to be able to recognize servers, the <code>group</code>-field in the mapping must match the <code>id</code>-field in the <code>network.json</code>, |
| this also allows for multiple servers to utilize the same configuration. A <code>mapping_config.json</code> using the configuration from |
| above could look as follows:</p> |
| <pre><code class="language-json">{ |
| ..., |
| &quot;tmcs&quot;: [ |
| { |
| &quot;group&quot;: &quot;TestServer&quot;, |
| &quot;applications&quot;: [ &quot;TestApplication&quot; ], |
| &quot;inductionLoops&quot;: [ ], |
| &quot;laneAreaDetectors&quot;: [ ] |
| } |
| ], |
| &quot;servers&quot;: [ |
| { |
| &quot;group&quot;: &quot;TestServer&quot;, |
| &quot;applications&quot;: [ &quot;TestApplication&quot; ] |
| } |
| ], |
| ... |
| } |
| </code></pre> |
| <blockquote> |
| <p>Note that all bandwidths are given in bit per second and all delays in nanoseconds, unless explicitly defined differently. |
| Also, every json configuration goes through a minifier, so comments are allowed in the configuration files. An example |
| would be the comment before the <code>globalNetwork</code> option.</p> |
| </blockquote> |
| <h3 id="delay-regions">Delay regions</h3> |
| <p>Additionally, the user has the option to define regions with individual delays. This can be used to simulate |
| areas with bad reception, crowded areas etc.</p> |
| <p>The regions should be stored in <code>&lt;scenarioName&gt;/cell/regions.json</code>. An |
| example definition for a single region called <code>Ernst-Reuter-Platz</code> could look like this:</p> |
| <pre><code class="language-Json">{ |
| &quot;regions&quot;:[ |
| { |
| &quot;id&quot;: &quot;Ernst-Reuter-Platz&quot;, |
| &quot;area&quot;: { |
| &quot;nw&quot;: { &quot;lon&quot;:13.3249, &quot;lat&quot;:52.5131 }, |
| &quot;se&quot;: { &quot;lon&quot;:13.3273, &quot;lat&quot;:52.5125 } |
| }, |
| &quot;uplink&quot;: { |
| &quot;delay&quot;: { |
| &quot;type&quot;: &quot;SimpleRandomDelay&quot;, |
| &quot;steps&quot;: 4, |
| &quot;minDelay&quot;: &quot;50 ms&quot;, |
| &quot;maxDelay&quot;: &quot;200 ms&quot; |
| }, |
| &quot;transmission&quot;: { |
| &quot;lossProbability&quot;: 0.8, |
| &quot;maxRetries&quot;: 2 |
| }, |
| &quot;capacity&quot;: 28000000 |
| }, |
| &quot;downlink&quot;: { |
| &quot;unicast&quot;: { |
| &quot;delay&quot;: { |
| &quot;type&quot;: &quot;SimpleRandomDelay&quot;, |
| &quot;steps&quot;: 3, |
| &quot;minDelay&quot;: &quot;100 ms&quot;, |
| &quot;maxDelay&quot;: &quot;200 ms&quot; |
| }, |
| &quot;transmission&quot;: { |
| &quot;maxRetries&quot;: 2 |
| } |
| }, |
| &quot;multicast&quot;: { |
| &quot;delay&quot;: { |
| &quot;type&quot;: &quot;SimpleRandomDelay&quot;, |
| &quot;steps&quot;: 3, |
| &quot;minDelay&quot;: &quot;120 ms&quot;, |
| &quot;maxDelay&quot;: &quot;220 ms&quot; |
| }, |
| &quot;transmission&quot;: { |
| &quot;lossProbability&quot;: 0.8 |
| }, |
| &quot;usableCapacity&quot;: 0.6 |
| }, |
| &quot;capacity&quot;: 42200000 |
| } |
| } |
| ] |
| } |
| </code></pre> |
| <p>Note that <code>nw</code> represents the upper-left (north-west) point of the rectangle and <code>se</code> the lower-right (southeast). |
| For further information about the possible options, please refer to the Eclipse MOSAIC API documentation.</p> |
| <p>The actual configuration of the uplink and the downlink modules for each region exhibits the identical |
| format as configuration of the globalNetwork in the <code>network.json</code>.</p> |
| <p>When no regions are found, or if a node (a vehicle) is not within a specified region, the globalNetwork |
| defined in the <code>network.json</code>-File will be used as the delay model.</p> |
| <h3 id="transmission-simulation">Transmission simulation</h3> |
| <p>One of the most important feature of the cellular simulator is an estimation of the delay experienced |
| through the transport over the cellular network.</p> |
| <p>The cellular simulator offers various modes to estimate the delay of the transmissions. The type of |
| estimation is specified with by <code>delayType</code> for the uplink and downlink for each region. You may also refer to the |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/extending_mosaic/delay_models/"> |
| Delay-Chapter |
| </a> |
| .</p> |
| <ul> |
| <li><code>delay.type = ’ConstantDelay’</code>: The message is transmitted with the latency being exactly equal to delay.</li> |
| <li><code>delay.type = ’SimpleRandomDelay’</code>: The latency can assume different (randomly generated and uniformly distributed) values between |
| <code>minDelay</code> and <code>maxDelay</code>. The number of different values is determined by <code>steps</code>.</li> |
| <li><code>delay.type = ’GammaRandomDelay’</code>: A gamma distribution is used to estimate the latency, with $ \alpha $ = 2 and $ \beta $= 2. The |
| minimal delay <code>minDelay</code> is added to the result. The curve is fitted so that the maximum likelihood for the delay is exactly equal to |
| <code>expDelay</code>.</li> |
| <li><code>delay.type = ’GammaSpeedDelay’</code>: This mode closely resembles the GammaRandomDelay. Additionally, a penalty for the velocity with which |
| the node is moving is calculated. This penalty is then added to the original delay. The GammaRandomDelay and the GammaSpeedDelay are |
| derived from a measurement campaign during a research project at the DCAITI.</li> |
| </ul> |
| <p>The two different modes for the downlink are <code>unicast</code> and <code>multicast</code> which are configured separately. Multicast aims to simulate the |
| features of Multimedia Broadcast Multicast Service (MBMS). The main difference in terms of the transmission for unicast and multicast |
| is the handling of undeliverable messages. For unicast, the options <code>lossProbability</code> and <code>maxRetries</code> are used. Pr is short for |
| packet retransmit and denotes the probability for a failed delivery and a subsequent retransmit. The maximum number of retries |
| for the retransmission is configured through the <code>maxRetries</code>-option. The probability of a successful |
| retransmit is recalculated on every try.</p> |
| <p>In case of multicast the <code>lossProbability</code> is used as packet loss rate. The value is factored into the delay calculation. |
| In contrast to the unicast, just one transmission attempt is made for multicast.</p> |
| <h3 id="operation">Operation</h3> |
| <p>Beside the transmission simulation, the Addressing and Routing is the other important aspect of the Cellular Simulator. This task is enabled |
| by the Geocaster.</p> |
| <p>The Geocaster evaluates the message headers for cellular messages, which are created by the communicating applications in the |
| Application Simulator.</p> |
| <p>It supports the following addressing and casting schemes.</p> |
| <p><strong><code>[CellTopocast](/docs/develop_applications/communication#cellular-topocast)</code></strong> is the normal unicast, where the Geocaster simply resolves |
| the single receiver via theIPResolver. Hence, the CellTopocast directly routes the message further. Currently, Topocast doesn&rsquo;t allow |
| broadcast or anycast addresses, but any transmission protocols (tcp, udp).</p> |
| <p><strong><code>[CellGeoUnicast](/docs/develop_applications/communication#cellular-geocast)</code></strong> addresses every node in the destination area individually. |
| In this way it takes a geographic address and results in a loop to generate multiple unicasts.</p> |
| <p><strong><code>[CellGeoBroadcast](/docs/develop_applications/communication#cellular-geobroadcast)</code></strong>, which is basically MBMS, uses one broadcast to all |
| nodes in the destined regions.The MBMS uses the different transmission mode of multicast in the downlink. CellGeoUnicast as well as |
| CellGeoBroadcast require broadcast, but don’t allow tcp (as ack for broadcasts is denied).</p> |
| </description> |
| </item> |
| |
| <item> |
| <title>Environment Simulator</title> |
| <link>https://staging.eclipse.org/mosaic/docs/simulators/environment_simulator/</link> |
| <pubDate>Sun, 05 May 2019 00:00:00 +0100</pubDate> |
| <guid>https://staging.eclipse.org/mosaic/docs/simulators/environment_simulator/</guid> |
| <description><p>This ambassador can be configured with a configuration file. The specific path is <code>mosaic/scenarios/&lt;scenarioName&gt;/environment/environment_config.json</code></p> |
| <pre><code class="language-plaintext">└─ &lt;scenario_name&gt; |
| └─ environment |
| └─ environment_config.json ..................... Environment ambassador configuration file |
| </code></pre> |
| <h3 id="installation">Installation</h3> |
| <p>This simulator does not need to be installed. It is delivered as part of the Eclipse MOSAIC-installation package.</p> |
| <h3 id="configuration">Configuration</h3> |
| <div class="alert alert-tip"> |
| <div> |
| <p>Read the detailed documentation of the |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/docs/mosaic_configuration/environment_config/"> |
| Environment Configuration |
| </a> |
| .</p> |
| </div> |
| </div> |
| <p>The root node of the configuration is a list of environment events. Each event require the type of the event, a rectangle area, a |
| strength and the time window. The following example shows the configuration of an &ldquo;Obstacle&rdquo; event which is valid in the |
| designated area (Rectangle) during the simulation time between 0 to 2000 seconds:</p> |
| <pre><code class="language-json">{ |
| &quot;events&quot; : [ |
| { |
| &quot;type&quot;: { |
| &quot;sensorType&quot;: &quot;OBSTACLE&quot;, |
| &quot;value&quot;: 1 |
| }, |
| &quot;location&quot;: { |
| &quot;area&quot;: { |
| &quot;type&quot;: &quot;Rectangle&quot;, |
| &quot;a&quot;: { |
| &quot;latitude&quot;: 52.53654, |
| &quot;longitude&quot;: 13.42116 |
| }, |
| &quot;b&quot;: { |
| &quot;latitude&quot;: 52.53435, |
| &quot;longitude&quot;: 13.42366 |
| } |
| } |
| }, |
| &quot;time&quot;: { |
| &quot;start&quot;: &quot;0 s&quot;, |
| &quot;end&quot;: &quot;2000 s&quot; |
| } |
| } |
| ] |
| } |
| </code></pre> |
| </description> |
| </item> |
| |
| <item> |
| <title>Battery Simulator</title> |
| <link>https://staging.eclipse.org/mosaic/docs/simulators/battery_simulator/</link> |
| <pubDate>Sun, 05 May 2019 00:00:00 +0100</pubDate> |
| <guid>https://staging.eclipse.org/mosaic/docs/simulators/battery_simulator/</guid> |
| <description><div class="alert alert-extended"> |
| <span class="extended-icon" style="background-image: url(/mosaic/img/alert-extended.svg)"></span> |
| <div> |
| <p>The <strong>Battery Simulator</strong> is part of |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://staging.eclipse.org/mosaic/mosaic/download/#overview"> |
| MOSAIC Extended |
| </a> |
| .<br> |
| For further information on licenses, feel free to contact us via <strong> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="mailto:mosaic@fokus.fraunhofer.de"> |
| mosaic@fokus.fraunhofer.de |
| </a> |
| </strong>.</p> |
| </div> |
| </div> |
| <p>The MOSAIC Battery Simulator is used to simulate electric vehicles. It takes environment, vehicle |
| characteristics and the battery itself into account. The main feature of the battery ambassador is that it |
| can utilize dynamic class loading to use a battery model provided by the user, depending on the given |
| needs. This also holds true for the environment model and the vehicle model. However, simple models |
| for vehicles, environment and the battery are provided and will be briefly explained in the following |
|