INET Framework for OMNeT++/OMNEST
inet::MobilityBase Class Referenceabstract

Abstract base class for mobility modules. More...

#include <MobilityBase.h>

Inheritance diagram for inet::MobilityBase:
inet::IMobility inet::AttachedMobility inet::FacingMobility inet::MovingMobilityBase inet::RotatingMobilityBase inet::StationaryMobilityBase inet::SuperpositioningMobility inet::CircleMobility inet::LinearMobility inet::LineSegmentsMobilityBase inet::RectangleMobility inet::VehicleMobility inet::LinearRotatingMobilityBase inet::StaticConcentricMobility inet::StaticGridMobility inet::StaticLinearMobility inet::StationaryMobility

Classes

class  DirectiveResolver
 

Public Types

enum  BorderPolicy { REFLECT, WRAP, PLACERANDOMLY, RAISEERROR }
 Selects how a mobility module should behave if it reaches the edge of the constraint area. More...
 

Public Member Functions

virtual double getMaxSpeed () const override
 Returns the maximum possible speed at any future time. More...
 
virtual const CoordgetConstraintAreaMax () const override
 Returns the maximum position along each axes for. More...
 
virtual const CoordgetConstraintAreaMin () const override
 Returns the minimum position along each axes for. More...
 
- Public Member Functions inherited from inet::IMobility
virtual ~IMobility ()
 
virtual const CoordgetCurrentPosition ()=0
 Returns the position at the current simulation time. More...
 
virtual const CoordgetCurrentVelocity ()=0
 Returns the velocity at the current simulation time. More...
 
virtual const CoordgetCurrentAcceleration ()=0
 Returns the acceleration at the current simulation time. More...
 
virtual const QuaterniongetCurrentAngularPosition ()=0
 Returns the angular position at the current simulation time. More...
 
virtual const QuaterniongetCurrentAngularVelocity ()=0
 Returns the angular velocity at the current simulation time. More...
 
virtual const QuaterniongetCurrentAngularAcceleration ()=0
 Returns the angular acceleration at the current simulation time. More...
 

Protected Member Functions

 MobilityBase ()
 
virtual int getId () const override
 
virtual int numInitStages () const override
 Returns the required number of initialize stages. More...
 
virtual void initialize (int stage) override
 Initializes mobility model parameters. More...
 
virtual void initializePosition ()
 Initializes mobility position. More...
 
virtual void setInitialPosition ()
 Initializes the position from the display string or from module parameters. More...
 
virtual void checkPosition ()
 Checks whether the position is valid or not. More...
 
virtual void initializeOrientation ()
 Initializes the orientation from module parameters. More...
 
virtual void refreshDisplay () const override
 Moves the visual representation module's icon to the new position on the screen. More...
 
virtual void updateDisplayStringFromMobilityState () const
 
virtual void handleParameterChange (const char *name) override
 Allows changing parameters from the GUI. More...
 
virtual void handleMessage (cMessage *msg) override
 This modules should only receive self-messages. More...
 
virtual void handleSelfMessage (cMessage *msg)=0
 Called upon arrival of a self messages, subclasses must override. More...
 
virtual void emitMobilityStateChangedSignal ()
 Emits a signal with the updated mobility state. More...
 
virtual Coord getRandomPosition ()
 Returns a new random position satisfying the constraint area. More...
 
virtual cModule * findSubjectModule ()
 Returns the module that represents the object moved by this mobility module. More...
 
virtual bool isOutside ()
 Returns true if the mobility is outside of the constraint area. More...
 
virtual void reflectIfOutside (Coord &targetPosition, Coord &velocity, rad &angle, rad &elevation, Quaternion &quaternion)
 Utility function to reflect the node if it goes outside the constraint area. More...
 
virtual void wrapIfOutside (Coord &targetPosition)
 Utility function to wrap the node to the opposite edge (torus) if it goes outside the constraint area. More...
 
virtual void placeRandomlyIfOutside (Coord &targetPosition)
 Utility function to place the node randomly if it goes outside the constraint area. More...
 
virtual void raiseErrorIfOutside ()
 Utility function to raise an error if the node gets outside the constraint area. More...
 
virtual void handleIfOutside (BorderPolicy policy, Coord &targetPosition, Coord &velocity)
 Invokes one of reflectIfOutside(), wrapIfOutside() and placeRandomlyIfOutside(), depending on the given border policy. More...
 
virtual void handleIfOutside (BorderPolicy policy, Coord &targetPosition, Coord &velocity, rad &heading)
 
virtual void handleIfOutside (BorderPolicy policy, Coord &targetPosition, Coord &velocity, rad &heading, rad &elevation)
 
virtual void handleIfOutside (BorderPolicy policy, Coord &targetPosition, Coord &velocity, rad &heading, rad &elevation, Quaternion &quaternion)
 

Protected Attributes

cModule * subjectModule
 Pointer to visual representation module, to speed up repeated access. More...
 
const CanvasProjectioncanvasProjection
 The 2D projection used on the canvas. More...
 
Coord constraintAreaMin
 3 dimensional position and size of the constraint area (in meters). More...
 
Coord constraintAreaMax
 
Coord lastPosition
 The last position that was reported. More...
 
Quaternion lastOrientation
 The last orientation that was reported. More...
 
StringFormat format
 

Additional Inherited Members

- Static Public Attributes inherited from inet::IMobility
static simsignal_t mobilityStateChangedSignal = cComponent::registerSignal("mobilityStateChanged")
 A signal used to publish mobility state changes. More...
 

Detailed Description

Abstract base class for mobility modules.

Mobility modules inheriting from this base class may be stationary or may change their mobility state over simulation time. This base class only provides a few utility methods to handle some common tasks among mobility modules.

Subclasses must redefine handleSelfMessage() to update the mobility state and schedule the next update. Subclasses must also redefine initialize() to read their specific parameters and schedule the first update.

This base class also provides random initial placement as a default mechanism. After initialization the module updates the display and emits a signal to subscribers providing the mobility state. Receivers of this signal can query the mobility state through the IMobility interface.

Member Enumeration Documentation

◆ BorderPolicy

Selects how a mobility module should behave if it reaches the edge of the constraint area.

See also
handleIfOutside()
Enumerator
REFLECT 

reflect off the wall

WRAP 

reappear at the opposite edge (torus)

PLACERANDOMLY 

placed at a randomly chosen position within the constraint area

RAISEERROR 

stop the simulation with error

55  {
56  REFLECT,
57  WRAP,
59  RAISEERROR
60  };

Constructor & Destructor Documentation

◆ MobilityBase()

inet::MobilityBase::MobilityBase ( )
protected
39  :
40  subjectModule(nullptr),
41  canvasProjection(nullptr),
45 {
46 }

Member Function Documentation

◆ checkPosition()

void inet::MobilityBase::checkPosition ( )
protectedvirtual

Checks whether the position is valid or not.

166 {
167  if (!isFiniteNumber(lastPosition.x) || !isFiniteNumber(lastPosition.y) || !isFiniteNumber(lastPosition.z))
168  throw cRuntimeError("Mobility position is not a finite number after initialize (x=%g,y=%g,z=%g)", lastPosition.x, lastPosition.y, lastPosition.z);
169  if (isOutside())
170  throw cRuntimeError("Mobility position (x=%g,y=%g,z=%g) is outside the constraint area (%g,%g,%g - %g,%g,%g)",
174 }

Referenced by initializePosition().

◆ emitMobilityStateChangedSignal()

void inet::MobilityBase::emitMobilityStateChangedSignal ( )
protectedvirtual

◆ findSubjectModule()

virtual cModule* inet::MobilityBase::findSubjectModule ( )
inlineprotectedvirtual

Returns the module that represents the object moved by this mobility module.

Reimplemented in inet::MoBanCoordinator.

123 { return findModuleFromPar<cModule>(par("subjectModule"), this); }

Referenced by initialize().

◆ getConstraintAreaMax()

virtual const Coord& inet::MobilityBase::getConstraintAreaMax ( ) const
inlineoverridevirtual

Returns the maximum position along each axes for.

Implements inet::IMobility.

Reimplemented in inet::StationaryMobilityBase.

168 { return constraintAreaMax; }

◆ getConstraintAreaMin()

virtual const Coord& inet::MobilityBase::getConstraintAreaMin ( ) const
inlineoverridevirtual

Returns the minimum position along each axes for.

Implements inet::IMobility.

Reimplemented in inet::StationaryMobilityBase.

169 { return constraintAreaMin; }

◆ getId()

virtual int inet::MobilityBase::getId ( ) const
inlineoverrideprotectedvirtual

Implements inet::IMobility.

83 { return cSimpleModule::getId(); }

◆ getMaxSpeed()

◆ getRandomPosition()

Coord inet::MobilityBase::getRandomPosition ( )
protectedvirtual

Returns a new random position satisfying the constraint area.

252 {
253  Coord p;
254  p.x = uniform(constraintAreaMin.x, constraintAreaMax.x);
255  p.y = uniform(constraintAreaMin.y, constraintAreaMax.y);
256  p.z = uniform(constraintAreaMin.z, constraintAreaMax.z);
257  return p;
258 }

Referenced by placeRandomlyIfOutside(), inet::MoBanCoordinator::selectDestination(), setInitialPosition(), and inet::RandomWaypointMobility::setTargetPosition().

◆ handleIfOutside() [1/4]

void inet::MobilityBase::handleIfOutside ( BorderPolicy  policy,
Coord targetPosition,
Coord velocity 
)
protectedvirtual

◆ handleIfOutside() [2/4]

void inet::MobilityBase::handleIfOutside ( BorderPolicy  policy,
Coord targetPosition,
Coord velocity,
rad heading 
)
protectedvirtual
360 {
361  rad dummy;
362  handleIfOutside(policy, targetPosition, velocity, heading, dummy, Quaternion::NIL);
363 }

◆ handleIfOutside() [3/4]

void inet::MobilityBase::handleIfOutside ( BorderPolicy  policy,
Coord targetPosition,
Coord velocity,
rad heading,
rad elevation 
)
protectedvirtual
366 {
367  handleIfOutside(policy, targetPosition, velocity, heading, elevation, Quaternion::NIL);
368 }

◆ handleIfOutside() [4/4]

void inet::MobilityBase::handleIfOutside ( BorderPolicy  policy,
Coord targetPosition,
Coord velocity,
rad heading,
rad elevation,
Quaternion quaternion 
)
protectedvirtual
371 {
372  switch (policy) {
373  case REFLECT:
374  reflectIfOutside(targetPosition, velocity, heading, elevation, quaternion);
375  break;
376 
377  case WRAP:
378  wrapIfOutside(targetPosition);
379  break;
380 
381  case PLACERANDOMLY:
382  placeRandomlyIfOutside(targetPosition);
383  break;
384 
385  case RAISEERROR:
387  break;
388 
389  default:
390  throw cRuntimeError("Invalid outside policy=%d in module '%s'", policy, getFullPath().c_str());
391  }
392 }

◆ handleMessage()

void inet::MobilityBase::handleMessage ( cMessage *  msg)
overrideprotectedvirtual

This modules should only receive self-messages.

239 {
240  if (message->isSelfMessage())
241  handleSelfMessage(message);
242  else
243  throw cRuntimeError("Mobility modules can only receive self messages");
244 }

◆ handleParameterChange()

void inet::MobilityBase::handleParameterChange ( const char *  name)
overrideprotectedvirtual

Allows changing parameters from the GUI.

Reimplemented in inet::FacingMobility.

231 {
232  if (name != nullptr) {
233  if (!strcmp(name, "displayStringTextFormat"))
234  format.parseFormat(par("displayStringTextFormat"));
235  }
236 }

◆ handleSelfMessage()

virtual void inet::MobilityBase::handleSelfMessage ( cMessage *  msg)
protectedpure virtual

Called upon arrival of a self messages, subclasses must override.

Implemented in inet::SuperpositioningMobility, inet::AttachedMobility, inet::FacingMobility, inet::MovingMobilityBase, inet::RotatingMobilityBase, and inet::StationaryMobilityBase.

Referenced by handleMessage().

◆ initialize()

void inet::MobilityBase::initialize ( int  stage)
overrideprotectedvirtual

Initializes mobility model parameters.

Reimplemented in inet::MoBanCoordinator, inet::MoBanLocal, inet::TractorMobility, inet::Ns2MotionMobility, inet::MovingMobilityBase, inet::SuperpositioningMobility, inet::RotatingMobilityBase, inet::MassMobility, inet::TurtleMobility, inet::VehicleMobility, inet::CircleMobility, inet::RectangleMobility, inet::GaussMarkovMobility, inet::AnsimMobility, inet::BonnMotionMobility, inet::RandomWaypointMobility, inet::StaticLinearMobility, inet::ChiangMobility, inet::LinearMobility, inet::AttachedMobility, inet::StationaryMobility, and inet::FacingMobility.

88 {
89  cSimpleModule::initialize(stage);
90  EV_TRACE << "initializing MobilityBase stage " << stage << endl;
91  if (stage == INITSTAGE_LOCAL) {
92  constraintAreaMin.x = par("constraintAreaMinX");
93  constraintAreaMin.y = par("constraintAreaMinY");
94  constraintAreaMin.z = par("constraintAreaMinZ");
95  constraintAreaMax.x = par("constraintAreaMaxX");
96  constraintAreaMax.y = par("constraintAreaMaxY");
97  constraintAreaMax.z = par("constraintAreaMaxZ");
98  format.parseFormat(par("displayStringTextFormat"));
100  if (subjectModule != nullptr) {
101  auto visualizationTarget = subjectModule->getParentModule();
102  canvasProjection = CanvasProjection::getCanvasProjection(visualizationTarget->getCanvas());
103  }
104  WATCH(constraintAreaMin);
105  WATCH(constraintAreaMax);
106  WATCH(lastPosition);
107  WATCH(lastOrientation);
108  }
109  else if (stage == INITSTAGE_SINGLE_MOBILITY) {
112  }
113 }

Referenced by inet::FacingMobility::initialize(), inet::StationaryMobility::initialize(), inet::AttachedMobility::initialize(), inet::StaticLinearMobility::initialize(), inet::RotatingMobilityBase::initialize(), inet::SuperpositioningMobility::initialize(), and inet::MovingMobilityBase::initialize().

◆ initializeOrientation()

void inet::MobilityBase::initializeOrientation ( )
protectedvirtual

Initializes the orientation from module parameters.

Reimplemented in inet::RotatingMobilityBase, and inet::LinearRotatingMobilityBase.

177 {
178  if (hasPar("initialHeading") && hasPar("initialElevation") && hasPar("initialBank")) {
179  auto alpha = deg(par("initialHeading"));
180  auto initialElevation = deg(par("initialElevation"));
181  // NOTE: negation is needed, see IMobility comments on orientation
182  auto beta = -initialElevation;
183  auto gamma = deg(par("initialBank"));
184  lastOrientation = Quaternion(EulerAngles(alpha, beta, gamma));
185  }
186 }

Referenced by initialize(), inet::LinearRotatingMobilityBase::initializeOrientation(), and inet::RotatingMobilityBase::initializeOrientation().

◆ initializePosition()

void inet::MobilityBase::initializePosition ( )
protectedvirtual

◆ isOutside()

bool inet::MobilityBase::isOutside ( )
protectedvirtual

Returns true if the mobility is outside of the constraint area.

Referenced by checkPosition(), placeRandomlyIfOutside(), and raiseErrorIfOutside().

◆ numInitStages()

◆ placeRandomlyIfOutside()

void inet::MobilityBase::placeRandomlyIfOutside ( Coord targetPosition)
protectedvirtual

Utility function to place the node randomly if it goes outside the constraint area.

Decision is made on lastPosition, but targetPosition will also be updated. (Pass a dummy you don't have it).

335 {
336  if (isOutside()) {
337  Coord newPosition = getRandomPosition();
338  targetPosition += newPosition - lastPosition;
339  lastPosition = newPosition;
340  }
341 }

Referenced by handleIfOutside().

◆ raiseErrorIfOutside()

void inet::MobilityBase::raiseErrorIfOutside ( )
protectedvirtual

Utility function to raise an error if the node gets outside the constraint area.

344 {
345  if (isOutside()) {
346  throw cRuntimeError("Mobility moved outside the area %g,%g,%g - %g,%g,%g (x=%g,y=%g,z=%g)",
350  }
351 }

Referenced by handleIfOutside(), inet::RandomWaypointMobility::move(), inet::BonnMotionMobility::move(), inet::AnsimMobility::move(), and inet::Ns2MotionMobility::move().

◆ reflectIfOutside()

void inet::MobilityBase::reflectIfOutside ( Coord targetPosition,
Coord velocity,
rad angle,
rad elevation,
Quaternion quaternion 
)
protectedvirtual

Utility function to reflect the node if it goes outside the constraint area.

Decision is made on pos, but the variables passed as args will also be updated. (Pass dummies you don't have some of them).

279 {
280  int sign;
281  double dummy = NaN;
283  sign = reflect(constraintAreaMin.x, constraintAreaMax.x, lastPosition.x, velocity.x);
284  reflect(constraintAreaMin.x, constraintAreaMax.x, targetPosition.x, dummy);
285  heading = deg(90) + (heading - deg(90)) * sign;
286  if (sign == -1 && &quaternion != &Quaternion::NIL) {
287  std::swap(quaternion.s, quaternion.v.z);
288  std::swap(quaternion.v.x, quaternion.v.y);
289  quaternion.v.x *= -1;
290  quaternion.v.y *= -1;
291  }
292  }
294  sign = reflect(constraintAreaMin.y, constraintAreaMax.y, lastPosition.y, velocity.y);
295  reflect(constraintAreaMin.y, constraintAreaMax.y, targetPosition.y, dummy);
296  heading = heading * sign;
297  if (sign == -1 && &quaternion != &Quaternion::NIL) {
298  quaternion.v.x *= -1;
299  quaternion.v.z *= -1;
300  }
301  }
303  sign = reflect(constraintAreaMin.z, constraintAreaMax.z, lastPosition.z, velocity.z);
304  reflect(constraintAreaMin.z, constraintAreaMax.z, targetPosition.z, dummy);
305  elevation = elevation * sign;
306  if (sign == -1 && &quaternion != &Quaternion::NIL) {
307  quaternion.v.x *= -1;
308  quaternion.v.y *= -1;
309  }
310  }
311 }

Referenced by handleIfOutside().

◆ refreshDisplay()

void inet::MobilityBase::refreshDisplay ( ) const
overrideprotectedvirtual

Moves the visual representation module's icon to the new position on the screen.

Reimplemented in inet::MoBanCoordinator, inet::MoBanLocal, and inet::StationaryMobility.

189 {
190  DirectiveResolver directiveResolver(const_cast<MobilityBase *>(this));
191  auto text = format.formatString(&directiveResolver);
192  getDisplayString().setTagArg("t", 0, text);
193  if (par("updateDisplayString"))
195 }

Referenced by inet::StationaryMobility::refreshDisplay().

◆ setInitialPosition()

void inet::MobilityBase::setInitialPosition ( )
protectedvirtual

Initializes the position from the display string or from module parameters.

Reimplemented in inet::MoBanCoordinator, inet::MoBanLocal, inet::Ns2MotionMobility, inet::SuperpositioningMobility, inet::TurtleMobility, inet::CircleMobility, inet::VehicleMobility, inet::RectangleMobility, inet::TractorMobility, inet::AnsimMobility, inet::BonnMotionMobility, inet::StaticLinearMobility, inet::StaticConcentricMobility, and inet::StaticGridMobility.

123 {
124  // reading the coordinates from omnetpp.ini makes predefined scenarios a lot easier
125  auto coordinateSystem = findModuleFromPar<IGeographicCoordinateSystem>(par("coordinateSystemModule"), this);
126  if (subjectModule != nullptr && hasPar("initFromDisplayString") && par("initFromDisplayString")) {
127  const char *s = subjectModule->getDisplayString().getTagArg("p", 2);
128  if (s && *s)
129  throw cRuntimeError("The coordinates of '%s' are invalid. Please remove automatic arrangement"
130  " (3rd argument of 'p' tag) from '@display' attribute.", subjectModule->getFullPath().c_str());
131  bool filled = parseIntTo(subjectModule->getDisplayString().getTagArg("p", 0), lastPosition.x) &&
132  parseIntTo(subjectModule->getDisplayString().getTagArg("p", 1), lastPosition.y);
133  if (filled) {
134  lastPosition.z = hasPar("initialZ") ? par("initialZ") : 0.0;
136  EV_DEBUG << "position initialized from displayString and initialZ parameter: " << lastPosition << endl;
137  }
138  else {
140  EV_DEBUG << "position initialized by random values: " << lastPosition << endl;
141  }
142  }
143  // not all mobility models have "initialX", "initialY" and "initialZ" parameters
144  else if (coordinateSystem == nullptr && hasPar("initialX") && hasPar("initialY") && hasPar("initialZ")) {
145  lastPosition.x = par("initialX");
146  lastPosition.y = par("initialY");
147  lastPosition.z = par("initialZ");
148  EV_DEBUG << "position initialized from initialX/Y/Z parameters: " << lastPosition << endl;
149  }
150  else if (coordinateSystem != nullptr && hasPar("initialLatitude") && hasPar("initialLongitude") && hasPar("initialAltitude")) {
151  auto initialLatitude = deg(par("initialLatitude"));
152  auto initialLongitude = deg(par("initialLongitude"));
153  auto initialAltitude = m(par("initialAltitude"));
154  lastPosition = coordinateSystem->computeSceneCoordinate(GeoCoord(initialLatitude, initialLongitude, initialAltitude));
155  EV_DEBUG << "position initialized from initialLatitude/Longitude/Altitude parameters: " << lastPosition << endl;
156  }
157  else {
159  EV_DEBUG << "position initialized by random values: " << lastPosition << endl;
160  }
161  if (par("updateDisplayString"))
163 }

Referenced by initializePosition(), inet::RectangleMobility::setInitialPosition(), and inet::TurtleMobility::setInitialPosition().

◆ updateDisplayStringFromMobilityState()

void inet::MobilityBase::updateDisplayStringFromMobilityState ( ) const
protectedvirtual
198 {
199  if (subjectModule != nullptr) {
200  // position
201  auto position = const_cast<MobilityBase *>(this)->getCurrentPosition();
202  EV_TRACE << "current position = " << position << endl;
203  auto subjectModulePosition = canvasProjection->computeCanvasPoint(position);
204  char buf[32];
205  snprintf(buf, sizeof(buf), "%lf", subjectModulePosition.x);
206  buf[sizeof(buf) - 1] = 0;
207  auto& displayString = subjectModule->getDisplayString();
208  displayString.setTagArg("p", 0, buf);
209  snprintf(buf, sizeof(buf), "%lf", subjectModulePosition.y);
210  buf[sizeof(buf) - 1] = 0;
211  displayString.setTagArg("p", 1, buf);
212  // angle
213  double angle = 0;
214  auto angularPosition = const_cast<MobilityBase *>(this)->getCurrentAngularPosition();
215  if (angularPosition != Quaternion::IDENTITY) {
216  Quaternion swing;
217  Quaternion twist;
218  Coord vector = canvasProjection->computeCanvasPointInverse(cFigure::Point(0, 0), 1);
219  vector.normalize();
220  angularPosition.getSwingAndTwist(vector, swing, twist);
221  Coord axis;
222  twist.getRotationAxisAndAngle(axis, angle);
223  angle = math::rad2deg(axis.z >= 0 ? angle : -angle);
224  }
225  snprintf(buf, sizeof(buf), "%lf", angle);
226  displayString.setTagArg("a", 0, buf);
227  }
228 }

Referenced by refreshDisplay(), and setInitialPosition().

◆ wrapIfOutside()

void inet::MobilityBase::wrapIfOutside ( Coord targetPosition)
protectedvirtual

Utility function to wrap the node to the opposite edge (torus) if it goes outside the constraint area.

Decision is made on pos, but targetPosition will also be updated. (Pass a dummy you don't have it).

319 {
322  wrap(constraintAreaMin.x, constraintAreaMax.x, targetPosition.x);
323  }
326  wrap(constraintAreaMin.y, constraintAreaMax.y, targetPosition.y);
327  }
330  wrap(constraintAreaMin.z, constraintAreaMax.z, targetPosition.z);
331  }
332 }

Referenced by handleIfOutside().

Member Data Documentation

◆ canvasProjection

const CanvasProjection* inet::MobilityBase::canvasProjection
protected

◆ constraintAreaMax

◆ constraintAreaMin

◆ format

◆ lastOrientation

◆ lastPosition

Coord inet::MobilityBase::lastPosition
protected

The last position that was reported.

Referenced by checkPosition(), inet::TurtleMobility::executeStatement(), inet::StaticLinearMobility::finish(), inet::AttachedMobility::getCurrentPosition(), inet::SuperpositioningMobility::getCurrentPosition(), inet::MovingMobilityBase::getCurrentPosition(), initialize(), inet::MoBanCoordinator::initialize(), inet::LineSegmentsMobilityBase::initializePosition(), isOutside(), inet::LineSegmentsMobilityBase::move(), inet::LinearMobility::move(), inet::GaussMarkovMobility::move(), inet::RectangleMobility::move(), inet::CircleMobility::move(), inet::MassMobility::move(), placeRandomlyIfOutside(), inet::GaussMarkovMobility::preventBorderHugging(), raiseErrorIfOutside(), inet::MoBanCoordinator::readConfigurationFile(), reflectIfOutside(), inet::MoBanLocal::refreshDisplay(), inet::TurtleMobility::resumeScript(), inet::MoBanCoordinator::selectDestination(), inet::MoBanCoordinator::selectPosture(), inet::StaticConcentricMobility::setInitialPosition(), inet::StaticGridMobility::setInitialPosition(), inet::BonnMotionMobility::setInitialPosition(), inet::StaticLinearMobility::setInitialPosition(), inet::AnsimMobility::setInitialPosition(), inet::TractorMobility::setInitialPosition(), inet::TurtleMobility::setInitialPosition(), inet::SuperpositioningMobility::setInitialPosition(), inet::Ns2MotionMobility::setInitialPosition(), inet::MoBanLocal::setInitialPosition(), setInitialPosition(), inet::MoBanLocal::setMoBANParameters(), inet::RandomWaypointMobility::setTargetPosition(), inet::ChiangMobility::setTargetPosition(), inet::AnsimMobility::setTargetPosition(), inet::BonnMotionMobility::setTargetPosition(), inet::TractorMobility::setTargetPosition(), inet::GaussMarkovMobility::setTargetPosition(), inet::MassMobility::setTargetPosition(), inet::Ns2MotionMobility::setTargetPosition(), inet::MoBanLocal::setTargetPosition(), inet::MoBanCoordinator::setTargetPosition(), inet::StationaryMobility::updateMobilityStateFromDisplayString(), and wrapIfOutside().

◆ subjectModule


The documentation for this class was generated from the following files:
inet::StringFormat::parseFormat
void parseFormat(const char *format)
Definition: StringFormat.cc:12
inet::MobilityBase::emitMobilityStateChangedSignal
virtual void emitMobilityStateChangedSignal()
Emits a signal with the updated mobility state.
Definition: MobilityBase.cc:246
inet::MobilityBase::REFLECT
@ REFLECT
reflect off the wall
Definition: MobilityBase.h:56
inet::MobilityBase::WRAP
@ WRAP
reappear at the opposite edge (torus)
Definition: MobilityBase.h:57
inet::Quaternion::NIL
static Quaternion NIL
Definition: Quaternion.h:21
inet::MobilityBase::lastPosition
Coord lastPosition
The last position that was reported.
Definition: MobilityBase.h:73
inet::units::units::deg
fscale< rad, rad2degScale > deg
Definition: Units.h:1158
inet::Coord::ZERO
static const Coord ZERO
Definition: Coord.h:27
inet::MobilityBase::checkPosition
virtual void checkPosition()
Checks whether the position is valid or not.
Definition: MobilityBase.cc:165
inet::MobilityBase::isOutside
virtual bool isOutside()
Returns true if the mobility is outside of the constraint area.
Definition: MobilityBase.cc:260
inet::CanvasProjection::getCanvasProjection
static CanvasProjection * getCanvasProjection(const cCanvas *canvas)
Definition: CanvasProjection.cc:53
inet::MobilityBase::lastOrientation
Quaternion lastOrientation
The last orientation that was reported.
Definition: MobilityBase.h:76
inet::MobilityBase::findSubjectModule
virtual cModule * findSubjectModule()
Returns the module that represents the object moved by this mobility module.
Definition: MobilityBase.h:123
inet::MobilityBase::PLACERANDOMLY
@ PLACERANDOMLY
placed at a randomly chosen position within the constraint area
Definition: MobilityBase.h:58
inet::MobilityBase::wrapIfOutside
virtual void wrapIfOutside(Coord &targetPosition)
Utility function to wrap the node to the opposite edge (torus) if it goes outside the constraint area...
Definition: MobilityBase.cc:318
inet::MobilityBase::updateDisplayStringFromMobilityState
virtual void updateDisplayStringFromMobilityState() const
Definition: MobilityBase.cc:197
inet::MobilityBase::reflectIfOutside
virtual void reflectIfOutside(Coord &targetPosition, Coord &velocity, rad &angle, rad &elevation, Quaternion &quaternion)
Utility function to reflect the node if it goes outside the constraint area.
Definition: MobilityBase.cc:278
inet::Coord::x
double x
Definition: Coord.h:36
inet::swap
INET_ALWAYS_INLINE void swap(IntrusivePtr< T > &lhs, IntrusivePtr< T > &ptr) noexcept
Definition: IntrusivePtr.h:194
inet::CanvasProjection::computeCanvasPointInverse
Coord computeCanvasPointInverse(const cFigure::Point &point, double depth) const
Definition: CanvasProjection.cc:47
inet::MobilityBase::canvasProjection
const CanvasProjection * canvasProjection
The 2D projection used on the canvas.
Definition: MobilityBase.h:67
inet::units::values::s
value< double, units::s > s
Definition: Units.h:1235
inet::MobilityBase::handleIfOutside
virtual void handleIfOutside(BorderPolicy policy, Coord &targetPosition, Coord &velocity)
Invokes one of reflectIfOutside(), wrapIfOutside() and placeRandomlyIfOutside(), depending on the giv...
Definition: MobilityBase.cc:353
inet::MobilityBase::constraintAreaMax
Coord constraintAreaMax
Definition: MobilityBase.h:70
inet::IMobility::mobilityStateChangedSignal
static simsignal_t mobilityStateChangedSignal
A signal used to publish mobility state changes.
Definition: IMobility.h:40
inet::INITSTAGE_SINGLE_MOBILITY
INET_API InitStage INITSTAGE_SINGLE_MOBILITY
Initialization of single mobility modules: calculating the initial position and orientation.
inet::Coord::z
double z
Definition: Coord.h:38
inet::CanvasProjection::computeCanvasPoint
cFigure::Point computeCanvasPoint(const Coord &point) const
Definition: CanvasProjection.cc:34
NaN
#define NaN
Definition: INETMath.h:91
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::math::sign
int sign(double v)
Returns 1 if the parameter is greater than zero, -1 if less than zero, 0 otherwise.
Definition: INETMath.h:138
inet::Quaternion::IDENTITY
static Quaternion IDENTITY
Definition: Quaternion.h:20
inet::MobilityBase::raiseErrorIfOutside
virtual void raiseErrorIfOutside()
Utility function to raise an error if the node gets outside the constraint area.
Definition: MobilityBase.cc:343
NUM_INIT_STAGES
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
inet::MobilityBase::MobilityBase
MobilityBase()
Definition: MobilityBase.cc:39
inet::MobilityBase::format
StringFormat format
Definition: MobilityBase.h:78
inet::IMobility::getCurrentAngularPosition
virtual const Quaternion & getCurrentAngularPosition()=0
Returns the angular position at the current simulation time.
inet::StringFormat::formatString
const char * formatString(IDirectiveResolver *resolver) const
Definition: StringFormat.cc:17
inet::MobilityBase::initializeOrientation
virtual void initializeOrientation()
Initializes the orientation from module parameters.
Definition: MobilityBase.cc:176
inet::MobilityBase::setInitialPosition
virtual void setInitialPosition()
Initializes the position from the display string or from module parameters.
Definition: MobilityBase.cc:122
inet::MobilityBase::initializePosition
virtual void initializePosition()
Initializes mobility position.
Definition: MobilityBase.cc:115
inet::MobilityBase::subjectModule
cModule * subjectModule
Pointer to visual representation module, to speed up repeated access.
Definition: MobilityBase.h:64
inet::units::constants::alpha
const value< double, units::unit > alpha(7.2973525376e-3)
inet::MobilityBase::placeRandomlyIfOutside
virtual void placeRandomlyIfOutside(Coord &targetPosition)
Utility function to place the node randomly if it goes outside the constraint area.
Definition: MobilityBase.cc:334
inet::MobilityBase::handleSelfMessage
virtual void handleSelfMessage(cMessage *msg)=0
Called upon arrival of a self messages, subclasses must override.
inet::MobilityBase::constraintAreaMin
Coord constraintAreaMin
3 dimensional position and size of the constraint area (in meters).
Definition: MobilityBase.h:70
inet::IMobility::getCurrentPosition
virtual const Coord & getCurrentPosition()=0
Returns the position at the current simulation time.
inet::Coord::normalize
Coord normalize()
Updates the length of this position vector to be 1.
Definition: Coord.h:280
inet::units::values::m
value< double, units::m > m
Definition: Units.h:1233
inet::units::values::rad
value< double, units::rad > rad
Definition: Units.h:1245
inet::math::rad2deg
double rad2deg(double rad)
Convert a radian value to degree.
Definition: INETMath.h:188
inet::Coord::y
double y
Definition: Coord.h:37
inet::MobilityBase::RAISEERROR
@ RAISEERROR
stop the simulation with error
Definition: MobilityBase.h:59
inet::MobilityBase::getRandomPosition
virtual Coord getRandomPosition()
Returns a new random position satisfying the constraint area.
Definition: MobilityBase.cc:251