The emulated world model can be used to control the signal propagation environment for the nodes in the emulator indirectly, as described in the Control Software page.
Devices connected to the emulator reside in a virtual physical environment represented by the EmuWorld class. This world is a three dimensional space inhabited by virtual physical objects.
Physical objects in the emulator are represented by the MovableObject class. These objects may be positioned in a hierarchy similar to the "scene graph" used by graphical languages. By default, the emulator uses a two level hierarchy: EmuNodes represent the laptops connected to the emulator, and Antennas represent the actual antennas. As antennas are a separate object from the EmuNode, the orientation and position of antennas can change independent of the EmuNodes on which they reside.
The relationship between the EmuNodes in the emulated physical world and the antennas and channel models in the signal progation environment is shown in the figure below. Each EmuNode may have one or more wireless NICs, and each NIC has one or more antennas. Each pair of antennas is connected by a two channel models, one in each direction. Antennas can move either because the EmuNodes move in the emulated environment, or because the antenna moves relative the Emunode. Either way, the channel model modules are informed of the movement and the channel model parameters are automatically updated.
Spatial attributes of MovableObjects (e.g. position, velocity) are contained in subclasses of the abstract class RelSpatialAttribute. This class allows "listeners" to register interest in the changes in magnitude or at intervals. For instance, a user can register interest in obtaining position updates whenever a given condition is met such as whenever "a node moves more than 1 meter or whenever the last position update was over 1 second ago." Velocity is an instance of the RelVector class while orientation is an instance of RelOrientation which is a subclass of RelMatrix.
As the name implies, all RelSpatialAttributes have a parent which they are relative to. A value of null for the parent means that the parent is the physical world, or in other words, that the value of this spatial attribute is absolute. When retrieving values from relative spatial attributes, users must specify whether they are interested in obtaining a value relative to the parent or an absolute value (relative to the world.)
While users can directly retrieve values and register for change updates from spatial attributes, users do not directly modify spatial attributes of movable objects. Spatial attributes are modified indirectly by invoking navigation code
MovableObjects internally only support a single method of navigation: movement over a linear segment. Users can register with the MovableObject to be notified whenever it starts or finishes a linear segment. When moving over a segment, a MovableObject will only reside at certain points on the line segment since movement occurs in discrete steps. The navigation code guarantees, however, that the endpoints of the segment will always be traversed.
Externally, MovableObjects support two types of navigation: direct and route-based. When using direct navigation, a user simply calls navigation method on the movable object such as moveToOverTime(). These methods then construct a segment for navigation and cause the MovableObject to move over that segment. For route based navigation, users define a route as a series of waypoints, and then tell a MovableObject to start navigating the route. A Navigator class is responsible for breaking the route up into linear segments and causing the MovableObject to traverse them. Note that direct and route-based navigation are mutually exclusive. Commanding the object to use one method while the other is ongoing will cause the ongoing navigation to cease in favor of the new navigation command.
An object's orientation may either defined as relative to the parent object's reference frame, or relative to the node's velocity within the parent object's reference frame. By default, orientation is specified as relative to the node's velocity. Thus, by default an object will "point" in the direction that it is moving within its parent's reference frame.
See MovableObject Orientation and Reference Frames and Orientation Usage Examples for documentation on orientation as well as samples.