NED File src/inet/mobility/single/TurtleMobility.ned
Name | Type | Description |
---|---|---|
TurtleMobility | simple module |
A LOGO-style movement model, with the script coming from XML. It can be useful for describing random as well as deterministic scenarios. |
Source code
// // Copyright (C) 2005 OpenSim Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later // package inet.mobility.single; import inet.mobility.base.MovingMobilityBase; // // 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); }