INET Framework for OMNeT++/OMNEST
inet::MassMobility Class Reference

Models the mobility of with mass, making random motions. More...

#include <MassMobility.h>

Inheritance diagram for inet::MassMobility:
inet::LineSegmentsMobilityBase inet::MovingMobilityBase inet::MobilityBase inet::IMobility

Public Member Functions

 MassMobility ()
 
virtual double getMaxSpeed () const override
 Returns the maximum possible speed at any future time. More...
 
- Public Member Functions inherited from inet::LineSegmentsMobilityBase
 LineSegmentsMobilityBase ()
 
- Public Member Functions inherited from inet::MovingMobilityBase
virtual Coord getCurrentPosition () override
 Returns the current position at the current simulation time. More...
 
virtual Coord getCurrentSpeed () override
 Returns the current speed at the current simulation time. More...
 
virtual EulerAngles getCurrentAngularPosition () override
 Returns the current angular position at the current simulation time. More...
 
- Public Member Functions inherited from inet::MobilityBase
virtual EulerAngles getCurrentAngularSpeed () override
 Returns the current angular speed at the current simulation time. More...
 
virtual Coord getConstraintAreaMax () const override
 Returns the current angular acceleration at the current simulation time. More...
 
virtual Coord getConstraintAreaMin () const override
 
- Public Member Functions inherited from inet::IMobility
virtual ~IMobility ()
 

Protected Member Functions

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 move () override
 Move the host according to the current simulation time. More...
 
virtual void setTargetPosition () override
 Calculate a new target position to move to. More...
 
- Protected Member Functions inherited from inet::LineSegmentsMobilityBase
virtual void initializePosition () override
 Initializes mobility position. More...
 
- Protected Member Functions inherited from inet::MovingMobilityBase
 MovingMobilityBase ()
 
virtual ~MovingMobilityBase ()
 
virtual void handleSelfMessage (cMessage *message) override
 Called upon arrival of a self messages, subclasses must override. More...
 
void scheduleUpdate ()
 Schedules the move timer that will update the mobility state. More...
 
void moveAndUpdate ()
 Moves and notifies listeners. More...
 
- Protected Member Functions inherited from inet::MobilityBase
 MobilityBase ()
 
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 handleMessage (cMessage *msg) override
 This modules should only receive self-messages. More...
 
virtual void updateVisualRepresentation ()
 Moves the visual representation module's icon to the new position on the screen. 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 * findVisualRepresentation ()
 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 &speed, double &angle)
 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 &speed, double &angle)
 Invokes one of reflectIfOutside(), wrapIfOutside() and placeRandomlyIfOutside(), depending on the given border policy. More...
 

Protected Attributes

cPar * changeIntervalParameter
 
cPar * changeAngleByParameter
 
cPar * speedParameter
 
double angle
 angle of linear motion More...
 
simtime_t previousChange
 
Coord sourcePosition
 
- Protected Attributes inherited from inet::LineSegmentsMobilityBase
Coord targetPosition
 End position of current linear movement. More...
 
- Protected Attributes inherited from inet::MovingMobilityBase
cMessage * moveTimer
 The message used for mobility state changes. More...
 
simtime_t updateInterval
 The simulation time interval used to regularly signal mobility state changes. More...
 
bool stationary
 A mobility model may decide to become stationary at any time. More...
 
Coord lastSpeed
 The last speed that was reported at lastUpdate. More...
 
simtime_t lastUpdate
 The simulation time when the mobility state was last updated. More...
 
simtime_t nextChange
 The next simulation time when the mobility module needs to update its internal state. More...
 
- Protected Attributes inherited from inet::MobilityBase
cModule * visualRepresentation
 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...
 
EulerAngles lastOrientation
 The last position that was reported. More...
 

Additional Inherited Members

- Public Types inherited from inet::MobilityBase
enum  BorderPolicy { REFLECT, WRAP, PLACERANDOMLY, RAISEERROR }
 Selects how a mobility module should behave if it reaches the edge of the constraint area. More...
 
- 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

Models the mobility of with mass, making random motions.

See NED file for more info.

Author
Emin Ilker Cetinbas, Andras Varga

Constructor & Destructor Documentation

inet::MassMobility::MassMobility ( )
28 {
29  changeIntervalParameter = nullptr;
30  changeAngleByParameter = nullptr;
31  speedParameter = nullptr;
32  angle = 0;
33 }
cPar * changeIntervalParameter
Definition: MassMobility.h:40
cPar * changeAngleByParameter
Definition: MassMobility.h:41
cPar * speedParameter
Definition: MassMobility.h:42
double angle
angle of linear motion
Definition: MassMobility.h:45

Member Function Documentation

double inet::MassMobility::getMaxSpeed ( ) const
overridevirtual

Returns the maximum possible speed at any future time.

Reimplemented from inet::MobilityBase.

83 {
84  return NaN;
85 }
#define NaN
Definition: INETMath.h:103
void inet::MassMobility::initialize ( int  stage)
overrideprotectedvirtual

Initializes mobility model parameters.

Reimplemented from inet::MovingMobilityBase.

36 {
38 
39  EV_TRACE << "initializing MassMobility stage " << stage << endl;
40  if (stage == INITSTAGE_LOCAL) {
41  angle = par("startAngle").doubleValue();
42  changeIntervalParameter = &par("changeInterval");
43  changeAngleByParameter = &par("changeAngleBy");
44  speedParameter = &par("speed");
45  }
46 }
virtual void initialize(int stage) override
Initializes mobility model parameters.
Definition: MovingMobilityBase.cc:42
cPar * changeIntervalParameter
Definition: MassMobility.h:40
cPar * changeAngleByParameter
Definition: MassMobility.h:41
Local initializations.
Definition: InitStages.h:35
cPar * speedParameter
Definition: MassMobility.h:42
double angle
angle of linear motion
Definition: MassMobility.h:45
void inet::MassMobility::move ( )
overrideprotectedvirtual

Move the host according to the current simulation time.

Reimplemented from inet::LineSegmentsMobilityBase.

63 {
64  simtime_t now = simTime();
65  if (now == nextChange) {
68  EV_INFO << "reached current target position = " << lastPosition << endl;
70  EV_INFO << "new target position = " << targetPosition << ", next change = " << nextChange << endl;
71  lastSpeed = (targetPosition - lastPosition) / (nextChange - simTime()).dbl();
72  }
73  else if (now > lastUpdate) {
74  ASSERT(nextChange == -1 || now < nextChange);
75  double alpha = (now - previousChange) / (nextChange - previousChange);
76  lastPosition = sourcePosition * (1 - alpha) + targetPosition * alpha;
77  double dummyAngle;
79  }
80 }
reflect off the wall
Definition: MobilityBase.h:61
simtime_t lastUpdate
The simulation time when the mobility state was last updated.
Definition: MovingMobilityBase.h:55
Coord lastPosition
The last position that was reported.
Definition: MobilityBase.h:78
simtime_t nextChange
The next simulation time when the mobility module needs to update its internal state.
Definition: MovingMobilityBase.h:60
Coord targetPosition
End position of current linear movement.
Definition: LineSegmentsMobilityBase.h:41
Coord sourcePosition
Definition: MassMobility.h:48
virtual void handleIfOutside(BorderPolicy policy, Coord &targetPosition, Coord &speed, double &angle)
Invokes one of reflectIfOutside(), wrapIfOutside() and placeRandomlyIfOutside(), depending on the giv...
Definition: MobilityBase.cc:269
simtime_t previousChange
Definition: MassMobility.h:47
virtual void setTargetPosition() override
Calculate a new target position to move to.
Definition: MassMobility.cc:48
const value< double, units::unit > alpha(7.2973525376e-3)
double angle
angle of linear motion
Definition: MassMobility.h:45
Coord lastSpeed
The last speed that was reported at lastUpdate.
Definition: MovingMobilityBase.h:52
virtual int inet::MassMobility::numInitStages ( ) const
inlineoverrideprotectedvirtual

Returns the required number of initialize stages.

Reimplemented from inet::MobilityBase.

51 { return NUM_INIT_STAGES; }
The number of initialization stages.
Definition: InitStages.h:116
void inet::MassMobility::setTargetPosition ( )
overrideprotectedvirtual

Calculate a new target position to move to.

Implements inet::LineSegmentsMobilityBase.

Referenced by move().

49 {
50  angle += changeAngleByParameter->doubleValue();
51  EV_DEBUG << "angle: " << angle << endl;
52  double rad = M_PI * angle / 180.0;
53  Coord direction(cos(rad), sin(rad));
54  simtime_t nextChangeInterval = changeIntervalParameter->doubleValue();
55  EV_DEBUG << "interval: " << nextChangeInterval << endl;
57  targetPosition = lastPosition + direction * speedParameter->doubleValue() * nextChangeInterval.dbl();
58  previousChange = simTime();
59  nextChange = previousChange + nextChangeInterval;
60 }
compose< m, pow< m,-1 > > rad
Definition: Units.h:764
Value cos(const value< Value, Unit > &angle)
Definition: Units.h:1201
cPar * changeIntervalParameter
Definition: MassMobility.h:40
cPar * changeAngleByParameter
Definition: MassMobility.h:41
Coord lastPosition
The last position that was reported.
Definition: MobilityBase.h:78
simtime_t nextChange
The next simulation time when the mobility module needs to update its internal state.
Definition: MovingMobilityBase.h:60
Coord targetPosition
End position of current linear movement.
Definition: LineSegmentsMobilityBase.h:41
#define M_PI
Definition: PlotFigure.cc:27
Coord sourcePosition
Definition: MassMobility.h:48
simtime_t previousChange
Definition: MassMobility.h:47
cPar * speedParameter
Definition: MassMobility.h:42
Value sin(const value< Value, Unit > &angle)
Definition: Units.h:1195
double angle
angle of linear motion
Definition: MassMobility.h:45

Member Data Documentation

double inet::MassMobility::angle
protected

angle of linear motion

Referenced by initialize(), MassMobility(), move(), and setTargetPosition().

cPar* inet::MassMobility::changeAngleByParameter
protected
cPar* inet::MassMobility::changeIntervalParameter
protected
simtime_t inet::MassMobility::previousChange
protected

Referenced by move(), and setTargetPosition().

Coord inet::MassMobility::sourcePosition
protected

Referenced by move(), and setTargetPosition().

cPar* inet::MassMobility::speedParameter
protected

The documentation for this class was generated from the following files: