Gauss-Markov mobility model. More...
#include "gauss-markov-mobility-model.h"
Public Member Functions | |
GaussMarkovMobilityModel () | |
~GaussMarkovMobilityModel () override | |
Public Member Functions inherited from ns3::MobilityModel | |
MobilityModel () | |
~MobilityModel () override=0 | |
int64_t | AssignStreams (int64_t stream) |
Assign a fixed random variable stream number to the random variables used by this model. | |
double | GetDistanceFrom (Ptr< const MobilityModel > position) const |
Vector | GetPosition () const |
Vector | GetPositionWithReference (const Vector &referencePosition) const |
This method may be used if the position returned may depend on some reference position provided. | |
double | GetRelativeSpeed (Ptr< const MobilityModel > other) const |
Vector | GetVelocity () const |
void | SetPosition (const Vector &position) |
Public Member Functions inherited from ns3::Object | |
Object () | |
Constructor. | |
~Object () override | |
Destructor. | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. | |
void | Dispose () |
Dispose of this Object. | |
AggregateIterator | GetAggregateIterator () const |
Get an iterator to the Objects aggregated to this one. | |
TypeId | GetInstanceTypeId () const override |
Get the most derived TypeId for this Object. | |
template<typename T > | |
Ptr< T > | GetObject () const |
Get a pointer to the requested aggregated Object. | |
template<> | |
Ptr< Object > | GetObject () const |
Specialization of () for objects of type ns3::Object. | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. | |
template<> | |
Ptr< Object > | GetObject (TypeId tid) const |
Specialization of (TypeId tid) for objects of type ns3::Object. | |
void | Initialize () |
Invoke DoInitialize on all Objects aggregated to this one. | |
bool | IsInitialized () const |
Check if the object has been initialized. | |
void | UnidirectionalAggregateObject (Ptr< Object > other) |
Aggregate an Object to another Object. | |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
SimpleRefCount () | |
Default constructor. | |
SimpleRefCount (const SimpleRefCount &o) | |
Copy constructor. | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. | |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
Assignment operator. | |
void | Ref () const |
Increment the reference count. | |
void | Unref () const |
Decrement the reference count. | |
Public Member Functions inherited from ns3::ObjectBase | |
virtual | ~ObjectBase () |
Virtual destructor. | |
void | GetAttribute (std::string name, AttributeValue &value, bool permissive=false) const |
Get the value of an attribute, raising fatal errors if unsuccessful. | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising errors. | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. | |
Static Public Member Functions | |
static TypeId | GetTypeId () |
Register this type with the TypeId system. | |
Static Public Member Functions inherited from ns3::MobilityModel | |
static TypeId | GetTypeId () |
Register this type with the TypeId system. | |
Static Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId () |
Register this type. | |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId () |
Get the type ID. | |
Private Member Functions | |
int64_t | DoAssignStreams (int64_t) override |
The default implementation does nothing but return the passed-in parameter. | |
void | DoDispose () override |
Destructor implementation. | |
Vector | DoGetPosition () const override |
Vector | DoGetVelocity () const override |
void | DoSetPosition (const Vector &position) override |
void | DoWalk (Time timeLeft) |
Perform a walk operation. | |
void | Start () |
Initialize the model and calculate new velocity, direction, and pitch. | |
Private Attributes | |
double | m_alpha |
tunable constant in the model | |
Box | m_bounds |
bounding box | |
double | m_Direction |
current direction | |
EventId | m_event |
event id of scheduled start | |
ConstantVelocityHelper | m_helper |
constant velocity helper | |
double | m_meanDirection |
current mean direction | |
double | m_meanPitch |
current mean pitch | |
double | m_meanVelocity |
current mean velocity | |
Ptr< NormalRandomVariable > | m_normalDirection |
Gaussian rv for next direction value. | |
Ptr< NormalRandomVariable > | m_normalPitch |
Gaussian rv for next pitch. | |
Ptr< NormalRandomVariable > | m_normalVelocity |
Gaussian rv used to for next velocity. | |
double | m_Pitch |
current pitch | |
Ptr< RandomVariableStream > | m_rndMeanDirection |
rv used to assign avg direction | |
Ptr< RandomVariableStream > | m_rndMeanPitch |
rv used to assign avg. | |
Ptr< RandomVariableStream > | m_rndMeanVelocity |
rv used to assign avg velocity | |
Time | m_timeStep |
duraiton after which direction and speed should change | |
double | m_Velocity |
current velocity | |
Additional Inherited Members | |
Public Types inherited from ns3::MobilityModel | |
typedef void(* | TracedCallback) (Ptr< const MobilityModel > model) |
TracedCallback signature. | |
Protected Member Functions inherited from ns3::MobilityModel | |
void | NotifyCourseChange () const |
Must be invoked by subclasses when the course of the position changes to notify course change listeners. | |
Protected Member Functions inherited from ns3::Object | |
Object (const Object &o) | |
Copy an Object. | |
virtual void | DoInitialize () |
Initialize() implementation. | |
virtual void | NotifyNewAggregate () |
Notify all Objects aggregated to this one of a new Object being aggregated. | |
Protected Member Functions inherited from ns3::ObjectBase | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. | |
virtual void | NotifyConstructionCompleted () |
Notifier called once the ObjectBase is fully constructed. | |
Related Symbols inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. | |
Gauss-Markov mobility model.
This is a 3D version of the Gauss-Markov mobility model described in [1]. Unlike the other mobility models in ns-3, which are memoryless, the Gauss Markov model has both memory and variability. The tunable alpha parameter determines the how much memory and randomness you want to model. Each object starts with a specific velocity, direction (radians), and pitch angle (radians) equivalent to the mean velocity, direction, and pitch. At each timestep, a new velocity, direction, and pitch angle are generated based upon the previous value, the mean value, and a gaussian random variable. This version is suited for simple airplane flight, where direction, velocity, and pitch are the key variables. The motion field is limited by a 3D bounding box (called "box") which is a 3D version of the "rectangle" field that is used in 2-dimensional ns-3 mobility models.
Here is an example of how to implement the model and set the initial node positions:
[1] Tracy Camp, Jeff Boleng, Vanessa Davies, "A Survey of Mobility Models for Ad Hoc Network Research", Wireless Communications and Mobile Computing, Wiley, vol.2 iss.5, September 2002, pp.483-502
Definition at line 70 of file gauss-markov-mobility-model.h.
ns3::GaussMarkovMobilityModel::GaussMarkovMobilityModel | ( | ) |
Definition at line 86 of file gauss-markov-mobility-model.cc.
References m_event, m_helper, m_meanDirection, m_meanPitch, m_meanVelocity, ns3::Simulator::ScheduleNow(), Start(), and ns3::ConstantVelocityHelper::Unpause().
|
override |
Definition at line 95 of file gauss-markov-mobility-model.cc.
References ns3::EventId::Cancel(), and m_event.
|
overrideprivatevirtual |
The default implementation does nothing but return the passed-in parameter.
Subclasses using random variables are expected to override this.
start | starting stream index |
Reimplemented from ns3::MobilityModel.
Definition at line 232 of file gauss-markov-mobility-model.cc.
References m_normalDirection, m_normalPitch, m_normalVelocity, m_rndMeanDirection, m_rndMeanPitch, m_rndMeanVelocity, and ns3::RandomVariableStream::SetStream().
|
overrideprivatevirtual |
Destructor implementation.
This method is called by Dispose() or by the Object's destructor, whichever comes first.
Subclasses are expected to implement their real destruction code in an overridden version of this method and chain up to their parent's implementation once they are done. i.e, for simplicity, the destructor of every subclass should be empty and its content should be moved to the associated DoDispose() method.
It is safe to call GetObject() from within this method.
Reimplemented from ns3::Object.
Definition at line 204 of file gauss-markov-mobility-model.cc.
References ns3::Object::DoDispose().
|
overrideprivatevirtual |
Concrete subclasses of this base class must implement this method.
Implements ns3::MobilityModel.
Definition at line 211 of file gauss-markov-mobility-model.cc.
References ns3::ConstantVelocityHelper::GetCurrentPosition(), m_helper, and ns3::ConstantVelocityHelper::Update().
|
overrideprivatevirtual |
Concrete subclasses of this base class must implement this method.
Implements ns3::MobilityModel.
Definition at line 226 of file gauss-markov-mobility-model.cc.
References ns3::ConstantVelocityHelper::GetVelocity(), and m_helper.
|
overrideprivatevirtual |
position | the position to set. |
Concrete subclasses of this base class must implement this method.
Implements ns3::MobilityModel.
Definition at line 218 of file gauss-markov-mobility-model.cc.
References ns3::EventId::Cancel(), m_event, m_helper, ns3::Simulator::ScheduleNow(), ns3::ConstantVelocityHelper::SetPosition(), and Start().
|
private |
Perform a walk operation.
timeLeft | time until Start method is called again |
Definition at line 153 of file gauss-markov-mobility-model.cc.
References ns3::ConstantVelocityHelper::GetCurrentPosition(), ns3::Time::GetSeconds(), ns3::ConstantVelocityHelper::GetVelocity(), ns3::Box::IsInside(), m_bounds, m_Direction, m_event, m_helper, m_meanDirection, m_meanPitch, m_Pitch, ns3::MobilityModel::NotifyCourseChange(), ns3::Simulator::Schedule(), ns3::Seconds(), ns3::ConstantVelocityHelper::SetVelocity(), Start(), ns3::ConstantVelocityHelper::Unpause(), ns3::ConstantVelocityHelper::UpdateWithBounds(), ns3::Box::xMax, ns3::Box::xMin, ns3::Box::yMax, ns3::Box::yMin, ns3::Box::zMax, and ns3::Box::zMin.
Referenced by Start().
|
static |
Register this type with the TypeId system.
Definition at line 25 of file gauss-markov-mobility-model.cc.
References m_alpha, m_bounds, m_normalDirection, m_normalPitch, m_normalVelocity, m_rndMeanDirection, m_rndMeanPitch, m_rndMeanVelocity, m_timeStep, ns3::MakeBoxAccessor(), ns3::MakeBoxChecker(), ns3::MakeDoubleAccessor(), ns3::MakeDoubleChecker(), ns3::MakePointerAccessor(), ns3::MakePointerChecker(), ns3::MakeTimeAccessor(), ns3::MakeTimeChecker(), ns3::Seconds(), and ns3::TypeId::SetParent().
|
private |
Initialize the model and calculate new velocity, direction, and pitch.
Definition at line 101 of file gauss-markov-mobility-model.cc.
References DoWalk(), ns3::RandomVariableStream::GetValue(), m_alpha, m_Direction, m_helper, m_meanDirection, m_meanPitch, m_meanVelocity, m_normalDirection, m_normalPitch, m_normalVelocity, m_Pitch, m_rndMeanDirection, m_rndMeanPitch, m_rndMeanVelocity, m_timeStep, m_Velocity, ns3::ConstantVelocityHelper::SetVelocity(), ns3::ConstantVelocityHelper::Unpause(), and ns3::ConstantVelocityHelper::Update().
Referenced by GaussMarkovMobilityModel(), DoSetPosition(), and DoWalk().
|
private |
tunable constant in the model
Definition at line 98 of file gauss-markov-mobility-model.h.
Referenced by GetTypeId(), and Start().
|
private |
bounding box
Definition at line 112 of file gauss-markov-mobility-model.h.
Referenced by DoWalk(), and GetTypeId().
|
private |
current direction
Definition at line 103 of file gauss-markov-mobility-model.h.
|
private |
event id of scheduled start
Definition at line 111 of file gauss-markov-mobility-model.h.
Referenced by GaussMarkovMobilityModel(), ~GaussMarkovMobilityModel(), DoSetPosition(), and DoWalk().
|
private |
constant velocity helper
Definition at line 96 of file gauss-markov-mobility-model.h.
Referenced by GaussMarkovMobilityModel(), DoGetPosition(), DoGetVelocity(), DoSetPosition(), DoWalk(), and Start().
|
private |
current mean direction
Definition at line 100 of file gauss-markov-mobility-model.h.
Referenced by GaussMarkovMobilityModel(), DoWalk(), and Start().
|
private |
current mean pitch
Definition at line 101 of file gauss-markov-mobility-model.h.
Referenced by GaussMarkovMobilityModel(), DoWalk(), and Start().
|
private |
current mean velocity
Definition at line 99 of file gauss-markov-mobility-model.h.
Referenced by GaussMarkovMobilityModel(), and Start().
|
private |
Gaussian rv for next direction value.
Definition at line 108 of file gauss-markov-mobility-model.h.
Referenced by DoAssignStreams(), GetTypeId(), and Start().
|
private |
Gaussian rv for next pitch.
Definition at line 110 of file gauss-markov-mobility-model.h.
Referenced by DoAssignStreams(), GetTypeId(), and Start().
|
private |
Gaussian rv used to for next velocity.
Definition at line 106 of file gauss-markov-mobility-model.h.
Referenced by DoAssignStreams(), GetTypeId(), and Start().
|
private |
current pitch
Definition at line 104 of file gauss-markov-mobility-model.h.
|
private |
rv used to assign avg direction
Definition at line 107 of file gauss-markov-mobility-model.h.
Referenced by DoAssignStreams(), GetTypeId(), and Start().
|
private |
rv used to assign avg.
pitch
Definition at line 109 of file gauss-markov-mobility-model.h.
Referenced by DoAssignStreams(), GetTypeId(), and Start().
|
private |
rv used to assign avg velocity
Definition at line 105 of file gauss-markov-mobility-model.h.
Referenced by DoAssignStreams(), GetTypeId(), and Start().
|
private |
duraiton after which direction and speed should change
Definition at line 97 of file gauss-markov-mobility-model.h.
Referenced by GetTypeId(), and Start().
|
private |
current velocity
Definition at line 102 of file gauss-markov-mobility-model.h.
Referenced by Start().