Simple Module TurtleMobility

File: contrib/mobility/TurtleMobility.ned

C++ definition: click here

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:

    <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>

Random Waypoint:

    <movement>
        <repeat>
            <set speed="uniform(20,60)"/>
            <moveto x="uniform(0,$MAXX)" y="uniform(0,$MAXY)"/>
        </repeat>
    </movement>

Commands (XML element names) are: repeat, set, forward, turn, wait, moveto, and moveby.

Accepted attributes:

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 $MAXX and $MAXY strings will be substituted with the playground width and height minus 1, 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 playground, 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 playground.

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.

See also: ChannelControl

Author: Andras Varga

Usage diagram:

The following diagram shows usage relationships between modules, networks and channels. Unresolved module (and channel) types are missing from the diagram. Click here to see the full picture.

Parameters:

Name Type Description
coreDebug bool

debug switch

debug bool

debug switch

turtleScript xml

describes the movement

updateInterval numeric const

time interval to update the hosts position

Source code:

simple TurtleMobility
    parameters:
        coreDebug : bool, // debug switch
        debug : bool, // debug switch
        turtleScript: xml, // describes the movement
        updateInterval : numeric const; // time interval to update the hosts position
endsimple