author | Marco Miozzo <marco.miozzo@cttc.es> |
Fri, 14 Jun 2013 16:13:07 +0200 | |
changeset 10086 | 7fa6d3329928 |
parent 8984 | 85eed149a0ea |
child 10410 | 4d4eb8097fa3 |
permissions | -rw-r--r-- |
7385
10beb0e53130
standardize emacs c++ mode comments
Vedran Miletić <rivanvx@gmail.com>
parents:
7179
diff
changeset
|
1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
6100
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> |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
19 |
*/ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
20 |
#include <cmath> |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
21 |
#include "ns3/simulator.h" |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
22 |
#include "ns3/double.h" |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
23 |
#include "ns3/pointer.h" |
8983
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
24 |
#include "ns3/string.h" |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
25 |
#include "gauss-markov-mobility-model.h" |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
26 |
#include "position-allocator.h" |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
27 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
28 |
namespace ns3 { |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
29 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
30 |
NS_OBJECT_ENSURE_REGISTERED (GaussMarkovMobilityModel); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
31 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
32 |
TypeId |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
33 |
GaussMarkovMobilityModel::GetTypeId (void) |
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 |
static TypeId tid = TypeId ("ns3::GaussMarkovMobilityModel") |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
36 |
.SetParent<MobilityModel> () |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
37 |
.SetGroupName ("Mobility") |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
38 |
.AddConstructor<GaussMarkovMobilityModel> () |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
39 |
.AddAttribute ("Bounds", |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
40 |
"Bounds of the area to cruise.", |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
41 |
BoxValue (Box (-100.0, 100.0, -100.0, 100.0, 0.0, 100.0)), |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
42 |
MakeBoxAccessor (&GaussMarkovMobilityModel::m_bounds), |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
43 |
MakeBoxChecker ()) |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
44 |
.AddAttribute ("TimeStep", |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
45 |
"Change current direction and speed after moving for this time.", |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
46 |
TimeValue (Seconds (1.0)), |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
47 |
MakeTimeAccessor (&GaussMarkovMobilityModel::m_timeStep), |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
48 |
MakeTimeChecker ()) |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
49 |
.AddAttribute ("Alpha", |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
50 |
"A constant representing the tunable parameter in the Gauss-Markov model.", |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
51 |
DoubleValue (1.0), |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
52 |
MakeDoubleAccessor (&GaussMarkovMobilityModel::m_alpha), |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
53 |
MakeDoubleChecker<double> ()) |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
54 |
.AddAttribute ("MeanVelocity", |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
55 |
"A random variable used to assign the average velocity.", |
8983
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
56 |
StringValue ("ns3::UniformRandomVariable[Min=0.0|Max=1.0]"), |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
57 |
MakePointerAccessor (&GaussMarkovMobilityModel::m_rndMeanVelocity), |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
58 |
MakePointerChecker<RandomVariableStream> ()) |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
59 |
.AddAttribute ("MeanDirection", |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
60 |
"A random variable used to assign the average direction.", |
8983
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
61 |
StringValue ("ns3::UniformRandomVariable[Min=0.0|Max=6.283185307]"), |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
62 |
MakePointerAccessor (&GaussMarkovMobilityModel::m_rndMeanDirection), |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
63 |
MakePointerChecker<RandomVariableStream> ()) |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
64 |
.AddAttribute ("MeanPitch", |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
65 |
"A random variable used to assign the average pitch.", |
8983
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
66 |
StringValue ("ns3::ConstantRandomVariable[Constant=0.0]"), |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
67 |
MakePointerAccessor (&GaussMarkovMobilityModel::m_rndMeanPitch), |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
68 |
MakePointerChecker<RandomVariableStream> ()) |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
69 |
.AddAttribute ("NormalVelocity", |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
70 |
"A gaussian random variable used to calculate the next velocity value.", |
8983
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
71 |
StringValue ("ns3::NormalRandomVariable[Mean=0.0|Variance=1.0|Bound=10.0]"), // Defaults to zero mean, and std dev = 1, and bound to +-10 of the mean |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
72 |
MakePointerAccessor (&GaussMarkovMobilityModel::m_normalVelocity), |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
73 |
MakePointerChecker<NormalRandomVariable> ()) |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
74 |
.AddAttribute ("NormalDirection", |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
75 |
"A gaussian random variable used to calculate the next direction value.", |
8983
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
76 |
StringValue ("ns3::NormalRandomVariable[Mean=0.0|Variance=1.0|Bound=10.0]"), |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
77 |
MakePointerAccessor (&GaussMarkovMobilityModel::m_normalDirection), |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
78 |
MakePointerChecker<NormalRandomVariable> ()) |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
79 |
.AddAttribute ("NormalPitch", |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
80 |
"A gaussian random variable used to calculate the next pitch value.", |
8983
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
81 |
StringValue ("ns3::NormalRandomVariable[Mean=0.0|Variance=1.0|Bound=10.0]"), |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
82 |
MakePointerAccessor (&GaussMarkovMobilityModel::m_normalPitch), |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
83 |
MakePointerChecker<NormalRandomVariable> ()); |
7179
9d72cc013844
mobility coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6839
diff
changeset
|
84 |
|
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
85 |
return tid; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
86 |
} |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
87 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
88 |
GaussMarkovMobilityModel::GaussMarkovMobilityModel () |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
89 |
{ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
90 |
m_meanVelocity = 0.0; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
91 |
m_meanDirection = 0.0; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
92 |
m_meanPitch = 0.0; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
93 |
m_event = Simulator::ScheduleNow (&GaussMarkovMobilityModel::Start, this); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
94 |
m_helper.Unpause (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
95 |
} |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
96 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
97 |
void |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
98 |
GaussMarkovMobilityModel::Start (void) |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
99 |
{ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
100 |
if (m_meanVelocity == 0.0) |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
101 |
{ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
102 |
//Initialize the mean velocity, direction, and pitch variables |
8983
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
103 |
m_meanVelocity = m_rndMeanVelocity->GetValue (); |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
104 |
m_meanDirection = m_rndMeanDirection->GetValue (); |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
105 |
m_meanPitch = m_rndMeanPitch->GetValue (); |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
106 |
double cosD = std::cos (m_meanDirection); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
107 |
double cosP = std::cos (m_meanPitch); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
108 |
double sinD = std::sin (m_meanDirection); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
109 |
double sinP = std::sin (m_meanPitch); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
110 |
//Initialize the starting velocity, direction, and pitch to be identical to the mean ones |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
111 |
m_Velocity = m_meanVelocity; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
112 |
m_Direction = m_meanDirection; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
113 |
m_Pitch = m_meanPitch; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
114 |
//Set the velocity vector to give to the constant velocity helper |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
115 |
m_helper.SetVelocity (Vector (m_Velocity*cosD*cosP, m_Velocity*sinD*cosP, m_Velocity*sinP)); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
116 |
} |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
117 |
m_helper.Update (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
118 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
119 |
//Get the next values from the gaussian distributions for velocity, direction, and pitch |
8983
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
120 |
double rv = m_normalVelocity->GetValue (); |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
121 |
double rd = m_normalDirection->GetValue (); |
91d4c78133a8
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 1)
Mitch Watrous
parents:
7385
diff
changeset
|
122 |
double rp = m_normalPitch->GetValue (); |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
123 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
124 |
//Calculate the NEW velocity, direction, and pitch values using the Gauss-Markov formula: |
7179
9d72cc013844
mobility coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6839
diff
changeset
|
125 |
//newVal = alpha*oldVal + (1-alpha)*meanVal + sqrt(1-alpha^2)*rv |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
126 |
//where rv is a random number from a normal (gaussian) distribution |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
127 |
double one_minus_alpha = 1 - m_alpha; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
128 |
double sqrt_alpha = std::sqrt (1 - m_alpha*m_alpha); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
129 |
m_Velocity = m_alpha * m_Velocity + one_minus_alpha * m_meanVelocity + sqrt_alpha * rv; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
130 |
m_Direction = m_alpha * m_Direction + one_minus_alpha * m_meanDirection + sqrt_alpha * rd; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
131 |
m_Pitch = m_alpha * m_Pitch + one_minus_alpha * m_meanPitch + sqrt_alpha * rp; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
132 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
133 |
//Calculate the linear velocity vector to give to the constant velocity helper |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
134 |
double cosDir = std::cos (m_Direction); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
135 |
double cosPit = std::cos (m_Pitch); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
136 |
double sinDir = std::sin (m_Direction); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
137 |
double sinPit = std::sin (m_Pitch); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
138 |
double vx = m_Velocity * cosDir * cosPit; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
139 |
double vy = m_Velocity * sinDir * cosPit; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
140 |
double vz = m_Velocity * sinPit; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
141 |
m_helper.SetVelocity (Vector (vx, vy, vz)); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
142 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
143 |
m_helper.Unpause (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
144 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
145 |
DoWalk (m_timeStep); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
146 |
} |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
147 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
148 |
void |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
149 |
GaussMarkovMobilityModel::DoWalk (Time delayLeft) |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
150 |
{ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
151 |
m_helper.UpdateWithBounds (m_bounds); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
152 |
Vector position = m_helper.GetCurrentPosition (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
153 |
Vector speed = m_helper.GetVelocity (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
154 |
Vector nextPosition = position; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
155 |
nextPosition.x += speed.x * delayLeft.GetSeconds (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
156 |
nextPosition.y += speed.y * delayLeft.GetSeconds (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
157 |
nextPosition.z += speed.z * delayLeft.GetSeconds (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
158 |
if (delayLeft.GetSeconds () < 0.0) delayLeft = Seconds (1.0); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
159 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
160 |
// Make sure that the position by the next time step is still within the boundary. |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
161 |
// If out of bounds, then alter the velocity vector and average direction to keep the position in bounds |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
162 |
if (m_bounds.IsInside (nextPosition)) |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
163 |
{ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
164 |
m_event = Simulator::Schedule (delayLeft, &GaussMarkovMobilityModel::Start, this); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
165 |
} |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
166 |
else |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
167 |
{ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
168 |
if (nextPosition.x > m_bounds.xMax || nextPosition.x < m_bounds.xMin) |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
169 |
{ |
7179
9d72cc013844
mobility coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6839
diff
changeset
|
170 |
speed.x = -speed.x; |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
171 |
m_meanDirection = 3.14159265 - m_meanDirection; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
172 |
} |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
173 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
174 |
if (nextPosition.y > m_bounds.yMax || nextPosition.y < m_bounds.yMin) |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
175 |
{ |
7179
9d72cc013844
mobility coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6839
diff
changeset
|
176 |
speed.y = -speed.y; |
9d72cc013844
mobility coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6839
diff
changeset
|
177 |
m_meanDirection = -m_meanDirection; |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
178 |
} |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
179 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
180 |
if (nextPosition.z > m_bounds.zMax || nextPosition.z < m_bounds.zMin) |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
181 |
{ |
7179
9d72cc013844
mobility coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6839
diff
changeset
|
182 |
speed.z = -speed.z; |
9d72cc013844
mobility coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6839
diff
changeset
|
183 |
m_meanPitch = -m_meanPitch; |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
184 |
} |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
185 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
186 |
m_Direction = m_meanDirection; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
187 |
m_Pitch = m_meanPitch; |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
188 |
m_helper.SetVelocity (speed); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
189 |
m_helper.Unpause (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
190 |
m_event = Simulator::Schedule (delayLeft, &GaussMarkovMobilityModel::Start, this); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
191 |
} |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
192 |
NotifyCourseChange (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
193 |
} |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
194 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
195 |
void |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
196 |
GaussMarkovMobilityModel::DoDispose (void) |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
197 |
{ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
198 |
// chain up |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
199 |
MobilityModel::DoDispose (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
200 |
} |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
201 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
202 |
Vector |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
203 |
GaussMarkovMobilityModel::DoGetPosition (void) const |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
204 |
{ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
205 |
m_helper.Update (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
206 |
return m_helper.GetCurrentPosition (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
207 |
} |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
208 |
void |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
209 |
GaussMarkovMobilityModel::DoSetPosition (const Vector &position) |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
210 |
{ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
211 |
m_helper.SetPosition (position); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
212 |
Simulator::Remove (m_event); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
213 |
m_event = Simulator::ScheduleNow (&GaussMarkovMobilityModel::Start, this); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
214 |
} |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
215 |
Vector |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
216 |
GaussMarkovMobilityModel::DoGetVelocity (void) const |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
217 |
{ |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
218 |
return m_helper.GetVelocity (); |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
219 |
} |
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
220 |
|
8984
85eed149a0ea
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 2)
Mitch Watrous
parents:
8983
diff
changeset
|
221 |
int64_t |
85eed149a0ea
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 2)
Mitch Watrous
parents:
8983
diff
changeset
|
222 |
GaussMarkovMobilityModel::DoAssignStreams (int64_t stream) |
85eed149a0ea
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 2)
Mitch Watrous
parents:
8983
diff
changeset
|
223 |
{ |
85eed149a0ea
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 2)
Mitch Watrous
parents:
8983
diff
changeset
|
224 |
m_rndMeanVelocity->SetStream (stream); |
85eed149a0ea
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 2)
Mitch Watrous
parents:
8983
diff
changeset
|
225 |
m_normalVelocity->SetStream (stream + 1); |
85eed149a0ea
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 2)
Mitch Watrous
parents:
8983
diff
changeset
|
226 |
m_rndMeanDirection->SetStream (stream + 2); |
85eed149a0ea
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 2)
Mitch Watrous
parents:
8983
diff
changeset
|
227 |
m_normalDirection->SetStream (stream + 3); |
85eed149a0ea
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 2)
Mitch Watrous
parents:
8983
diff
changeset
|
228 |
m_rndMeanPitch->SetStream (stream + 4); |
85eed149a0ea
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 2)
Mitch Watrous
parents:
8983
diff
changeset
|
229 |
m_normalPitch->SetStream (stream + 5); |
85eed149a0ea
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 2)
Mitch Watrous
parents:
8983
diff
changeset
|
230 |
return 6; |
85eed149a0ea
Replace src/mobility usage of RandomVariable with RandomVariableStream (Patch Set 2)
Mitch Watrous
parents:
8983
diff
changeset
|
231 |
} |
6100
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
232 |
|
38066d5d262b
Merge Gauss Markov Mobility Model
Dan Broyles <muxman@sbcglobal.net>
parents:
diff
changeset
|
233 |
} // namespace ns3 |