author | Josh Pelkey <jpelkey@gatech.edu> |
Fri, 13 May 2011 14:56:37 -0400 | |
changeset 7179 | 9d72cc013844 |
parent 6839 | 34074e4ed93b |
child 7385 | 10beb0e53130 |
permissions | -rw-r--r-- |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
1 |
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
2 |
/* |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
3 |
* Copyright (c) 2009 Dan Broyles |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
4 |
* |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
5 |
* This program is free software; you can redistribute it and/or modify |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
6 |
* it under the terms of the GNU General Public License version 2 as |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
8 |
* |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
9 |
* This program is distributed in the hope that it will be useful, |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
12 |
* GNU General Public License for more details. |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
13 |
* |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
14 |
* You should have received a copy of the GNU General Public License |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
15 |
* along with this program; if not, write to the Free Software |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
16 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
17 |
* |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
18 |
* Author: Dan Broyles <dbroyl01@ku.edu> |
6103
12931126ea21
Minor comment update to Gauss-Markov mobility model
Dan Broyles <dbroyl01@ku.edu>
parents:
6100
diff
changeset
|
19 |
* Thanks to Kevin Peters, faculty advisor James P.G. Sterbenz, and the ResiliNets |
12931126ea21
Minor comment update to Gauss-Markov mobility model
Dan Broyles <dbroyl01@ku.edu>
parents:
6100
diff
changeset
|
20 |
* initiative at The University of Kansas, https://wiki.ittc.ku.edu/resilinets |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
21 |
*/ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
22 |
#ifndef GAUSS_MARKOV_MOBILITY_MODEL_H |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
23 |
#define GAUSS_MARKOV_MOBILITY_MODEL_H |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
24 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
25 |
#include "constant-velocity-helper.h" |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
26 |
#include "mobility-model.h" |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
27 |
#include "position-allocator.h" |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
28 |
#include "ns3/ptr.h" |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
29 |
#include "ns3/object.h" |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
30 |
#include "ns3/nstime.h" |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
31 |
#include "ns3/event-id.h" |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
32 |
#include "ns3/box.h" |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
33 |
#include "ns3/random-variable.h" |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
34 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
35 |
namespace ns3 { |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
36 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
37 |
/** |
6471
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
38 |
* \ingroup mobility |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
39 |
* \brief Gauss-Markov mobility model |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
40 |
* |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
41 |
* This is a 3D version of the Gauss-Markov mobility model described in [1]. |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
42 |
* Unlike the other mobility models in ns-3, which are memoryless, the Gauss |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
43 |
* Markov model has both memory and variability. The tunable alpha parameter |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
44 |
* determines the how much memory and randomness you want to model. |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
45 |
* Each object starts with a specific velocity, direction (radians), and pitch |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
46 |
* angle (radians) equivalent to the mean velocity, direction, and pitch. |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
47 |
* At each timestep, a new velocity, direction, and pitch angle are generated |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
48 |
* based upon the previous value, the mean value, and a gaussian random variable. |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
49 |
* This version is suited for simple airplane flight, where direction, velocity, |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
50 |
* and pitch are the key variables. |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
51 |
* The motion field is limited by a 3D bounding box (called "box") which is a 3D |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
52 |
* version of the "rectangle" field that is used in 2-dimensional ns-3 mobility models. |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
53 |
* |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
54 |
* Here is an example of how to implement the model and set the initial node positions: |
6471
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
55 |
* \code |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
56 |
MobilityHelper mobility; |
7179
9d72cc013844
mobility coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6839
diff
changeset
|
57 |
|
6471
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
58 |
mobility.SetMobilityModel ("ns3::GaussMarkovMobilityModel", |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
59 |
"Bounds", BoxValue (Box (0, 150000, 0, 150000, 0, 10000)), |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
60 |
"TimeStep", TimeValue (Seconds (0.5)), |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
61 |
"Alpha", DoubleValue (0.85), |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
62 |
"MeanVelocity", RandomVariableValue (UniformVariable (800, 1200)), |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
63 |
"MeanDirection", RandomVariableValue (UniformVariable (0, 6.283185307)), |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
64 |
"MeanPitch", RandomVariableValue (UniformVariable (0.05, 0.05)), |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
65 |
"NormalVelocity", RandomVariableValue (NormalVariable (0.0, 0.0, 0.0)), |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
66 |
"NormalDirection", RandomVariableValue (NormalVariable (0.0, 0.2, 0.4)), |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
67 |
"NormalPitch", RandomVariableValue (NormalVariable (0.0, 0.02, 0.04))); |
7179
9d72cc013844
mobility coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6839
diff
changeset
|
68 |
|
6471
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
69 |
mobility.SetPositionAllocator ("ns3::RandomBoxPositionAllocator", |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
70 |
"X", RandomVariableValue (UniformVariable (0, 150000)), |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
71 |
"Y", RandomVariableValue (UniformVariable (0, 150000)), |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
72 |
"Z", RandomVariableValue (UniformVariable (0, 10000))); |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
73 |
|
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
74 |
mobility.Install (wifiStaNodes); |
a2028222c362
Doxygen cleanup in mobility module
Pavel Boyko <boyko@iitp.ru>
parents:
6103
diff
changeset
|
75 |
* \endcode |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
76 |
* [1] Tracy Camp, Jeff Boleng, Vanessa Davies, "A Survey of Mobility Models |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
77 |
* for Ad Hoc Network Research", Wireless Communications and Mobile Computing, |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
78 |
* Wiley, vol.2 iss.5, September 2002, pp.483-502 |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
79 |
*/ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
80 |
class GaussMarkovMobilityModel : public MobilityModel |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
81 |
{ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
82 |
public: |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
83 |
static TypeId GetTypeId (void); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
84 |
GaussMarkovMobilityModel (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
85 |
private: |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
86 |
void Start (void); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
87 |
void DoWalk (Time timeLeft); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
88 |
virtual void DoDispose (void); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
89 |
virtual Vector DoGetPosition (void) const; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
90 |
virtual void DoSetPosition (const Vector &position); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
91 |
virtual Vector DoGetVelocity (void) const; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
92 |
ConstantVelocityHelper m_helper; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
93 |
Time m_timeStep; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
94 |
double m_alpha; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
95 |
double m_meanVelocity; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
96 |
double m_meanDirection; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
97 |
double m_meanPitch; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
98 |
double m_Velocity; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
99 |
double m_Direction; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
100 |
double m_Pitch; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
101 |
RandomVariable m_rndMeanVelocity; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
102 |
RandomVariable m_normalVelocity; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
103 |
RandomVariable m_rndMeanDirection; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
104 |
RandomVariable m_normalDirection; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
105 |
RandomVariable m_rndMeanPitch; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
106 |
RandomVariable m_normalPitch; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
107 |
EventId m_event; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
108 |
Box m_bounds; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
109 |
}; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
110 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
111 |
} // namespace ns3 |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
112 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
113 |
#endif /* GAUSS_MARKOV_MOBILITY_MODEL_H */ |