Package: inet.mobility.single
TurtleMobility
simple moduleA LOGO-style movement model, with the script coming from XML. It can be useful for describing random as well as deterministic scenarios.
First, a few examples.
Node will move along a square's borders:
<movement> <set speed="10" angle="180"/> <repeat n="4"> <forward d="50"/> <turn angle="90"/> </repeat> </movement>
MassMobility (in which the node is assumed to have a mass, and cannot turn abruptly):
<movement> <repeat> <set speed="uniform(10,20)"/> <turn angle="uniform(-30,30)"/> <forward t="uniform(0.1,1)"/> </repeat> </movement>
<movement> <repeat> <set speed="uniform(20,60)"/> <moveto x="uniform($MINX,$MAXX)" y="uniform($MINY,$MAXY)"/> </repeat> </movement>
Commands (XML element names) are: repeat, set, forward, turn, wait, moveto, and moveby.
Accepted attributes:
- repeat: n (optional)
- set: x, y, speed, angle, borderPolicy (all optional)
- forward: d, t (at last one of them must be present)
- turn: angle (required)
- wait: t (required)
- moveto: x, y, t (all optional)
- moveby: x, y, t (all optional)
Attribute values can be literal numbers (e.g. x="100"), or any distribution accepted in omnetpp.ini (e.g. speed="uniform(10,20)"). A new value will be chosen each time the statement is executed. The $MINX, $MAXX, $MINY and $MAXY strings will be substituted with the limits of constraint area, respectively.
t is time interval, calculated from the end of the previous movement. x, y are absolute coordinates with <set> and <moveto>, and relative with <moveby>. angle is clockwise in degrees, with 0 pointing west. d is distance in meters (speed is m/s).
borderPolicy controls what happens when a node reaches the edge of the constraint area, and can take one of the values "reflect", "wrap", "placerandomly". In the first case, the node reflects off the wall; with "wrap", it'll come in on the other side (torus); and with "placerandomly", it will be placed at a random position on the constraint area.
In addition to the node position, the module maintains two interval variables, 'speed' and 'angle', which can be adjusted by <set> and <turn>. The <forward> statement, if only t or d is given, uses the speed variable. If you specify d and t together, that determines speed as well, so the speed variable will be ignored completely.
Likewise, <moveto> and <moveby> will ignore the angle variable, and will only use the speed variable if the t attribute is omitted.
If the repeat count n is omitted for the <repeat> statement, that means an infinite loop.
You can find the DTD with the sources: TurtleMobility.dtd.
TODO update documentation; <turn heading=".."> is strange
Inheritance diagram
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.
Extends
Name | Type | Description |
---|---|---|
MovingMobilityBase | simple module |
Abstract base module for mobility models. |
Parameters
Name | Type | Default value | Description |
---|---|---|---|
subjectModule | string | "^" |
module path which determines the subject module, the motion of which this mobility model describes, the default value is the parent module |
coordinateSystemModule | string | "" |
module path of the geographic coordinate system module |
displayStringTextFormat | string | "p: %p\nv: %v" |
format string for the mobility module's display string text |
updateDisplayString | bool | true |
enables continuous update of the subject module's position via modifying its display string |
constraintAreaMinX | double | -inf m |
min x position of the constraint area, unconstrained by default (negative infinity) |
constraintAreaMinY | double | -inf m |
min y position of the constraint area, unconstrained by default (negative infinity) |
constraintAreaMinZ | double | -inf m |
min z position of the constraint area, unconstrained by default (negative infinity) |
constraintAreaMaxX | double | inf m |
max x position of the constraint area, unconstrained by default (positive infinity) |
constraintAreaMaxY | double | inf m |
max y position of the constraint area, unconstrained by default (positive infinity) |
constraintAreaMaxZ | double | inf m |
max z position of the constraint area, unconstrained by default (positive infinity) |
updateInterval | double | 0.1s |
the simulation time interval used to regularly signal mobility state changes and update the display |
faceForward | bool | true | |
turtleScript | xml |
describes the movement |
Properties
Name | Value | Description |
---|---|---|
display | i=block/cogwheel | |
class | TurtleMobility |
Signals
Name | Type | Unit |
---|---|---|
mobilityStateChanged | inet::MobilityBase |
Scheduled messages (observed)
msg | kind | ctrl | tags | msgname | context |
---|---|---|---|---|---|
omnetpp::cMessage | 0 | move |
Direct method calls (observed)
call to | function | info |
---|---|---|
AttachedMobility | inet::AttachedMobility::receiveSignal | mobilityStateChanged |
Source code
// // A LOGO-style movement model, with the script coming from XML. It can be // useful for describing random as well as deterministic scenarios. // // First, a few examples. // // Node will move along a square's borders: // // <pre><nohtml> // <movement> // <set speed="10" angle="180"/> // <repeat n="4"> // <forward d="50"/> // <turn angle="90"/> // </repeat> // </movement> // </nohtml></pre> // // ~MassMobility (in which the node is assumed to have a mass, and cannot turn // abruptly): // // <pre><nohtml> // <movement> // <repeat> // <set speed="uniform(10,20)"/> // <turn angle="uniform(-30,30)"/> // <forward t="uniform(0.1,1)"/> // </repeat> // </movement> // </nohtml></pre> // // ~RandomWaypointMobility: // // <pre><nohtml> // <movement> // <repeat> // <set speed="uniform(20,60)"/> // <moveto x="uniform($MINX,$MAXX)" y="uniform($MINY,$MAXY)"/> // </repeat> // </movement> // </nohtml></pre> // // Commands (XML element names) are: repeat, set, forward, turn, wait, // moveto, and moveby. // // Accepted attributes: // - repeat: n (optional) // - set: x, y, speed, angle, borderPolicy (all optional) // - forward: d, t (at last one of them must be present) // - turn: angle (required) // - wait: t (required) // - moveto: x, y, t (all optional) // - moveby: x, y, t (all optional) // // Attribute values can be literal numbers (e.g. x="100"), or any // distribution accepted in omnetpp.ini (e.g. speed="uniform(10,20)"). // A new value will be chosen each time the statement is executed. // The $MINX, $MAXX, $MINY and $MAXY strings will be substituted with the // limits of constraint area, respectively. // // t is time interval, calculated from the end of the previous movement. // x, y are absolute coordinates with <set> and <moveto>, and relative // with <moveby>. angle is clockwise in degrees, with 0 pointing west. // d is distance in meters (speed is m/s). // // borderPolicy controls what happens when a node reaches the edge of the // constraint area, and can take one of the values "reflect", "wrap", // "placerandomly". In the first case, the node reflects off the wall; // with "wrap", it'll come in on the other side (torus); and with // "placerandomly", it will be placed at a random position on the // constraint area. // // In addition to the node position, the module maintains two interval variables, // 'speed' and 'angle', which can be adjusted by <set> and <turn>. // The <forward> statement, if only t or d is given, uses the speed variable. // If you specify d and t together, that determines speed as well, // so the speed variable will be ignored completely. // // Likewise, <moveto> and <moveby> will ignore the angle variable, // and will only use the speed variable if the t attribute is omitted. // // If the repeat count n is omitted for the <repeat> statement, that // means an infinite loop. // // You can find the DTD with the sources: TurtleMobility.dtd. // //TODO update documentation; <turn heading=".."> is strange simple TurtleMobility extends MovingMobilityBase { parameters: xml turtleScript; // describes the movement @class(TurtleMobility); }File: src/inet/mobility/single/TurtleMobility.ned