src/mobility/model/gauss-markov-mobility-model.cc
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--
Update SteadyStateRandomWaypointMobilityModel with fixed z axis values
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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