21 #include "ns3/simulator.h"
22 #include "ns3/double.h"
33 static TypeId tid =
TypeId (
"ns3::SteadyStateRandomWaypointMobilityModel")
35 .SetGroupName (
"Mobility")
37 .AddAttribute (
"MinSpeed",
38 "Minimum speed value, [m/s]",
41 MakeDoubleChecker<double> ())
42 .AddAttribute (
"MaxSpeed",
43 "Maximum speed value, [m/s]",
46 MakeDoubleChecker<double> ())
47 .AddAttribute (
"MinPause",
48 "Minimum pause value, [s]",
51 MakeDoubleChecker<double> ())
52 .AddAttribute (
"MaxPause",
53 "Maximum pause value, [s]",
56 MakeDoubleChecker<double> ())
57 .AddAttribute (
"MinX",
58 "Minimum X value of traveling region, [m]",
61 MakeDoubleChecker<double> ())
62 .AddAttribute (
"MaxX",
63 "Maximum X value of traveling region, [m]",
66 MakeDoubleChecker<double> ())
67 .AddAttribute (
"MinY",
68 "Minimum Y value of traveling region, [m]",
71 MakeDoubleChecker<double> ())
72 .AddAttribute (
"MaxY",
73 "Maximum Y value of traveling region, [m]",
76 MakeDoubleChecker<double> ())
78 "Z value of traveling region (fixed), [m]",
81 MakeDoubleChecker<double> ());
87 alreadyStarted (false)
89 m_speed = CreateObject<UniformRandomVariable> ();
90 m_pause = CreateObject<UniformRandomVariable> ();
91 m_x1_r = CreateObject<UniformRandomVariable> ();
92 m_y1_r = CreateObject<UniformRandomVariable> ();
93 m_x2_r = CreateObject<UniformRandomVariable> ();
94 m_y2_r = CreateObject<UniformRandomVariable> ();
95 m_u_r = CreateObject<UniformRandomVariable> ();
96 m_x = CreateObject<UniformRandomVariable> ();
97 m_y = CreateObject<UniformRandomVariable> ();
118 m_position = CreateObject<RandomRectanglePositionAllocator> ();
138 double log1 = b*b / a*std::log (std::sqrt ((a*a)/(b*b) + 1) + a/b);
139 double log2 = a*a / b*std::log (std::sqrt ((b*b)/(a*a) + 1) + b/a);
140 double expectedTravelTime = 1.0/6.0*(log1 + log2);
141 expectedTravelTime += 1.0/15.0*((a*a*a)/(b*b) + (b*b*b)/(a*a)) -
142 1.0/15.0*std::sqrt (a*a + b*b)*((a*a)/(b*b) + (b*b)/(a*a) - 3);
145 expectedTravelTime /= v0;
149 expectedTravelTime *= std::log (v1/v0)/(v1 - v0);
151 double probabilityPaused = expectedPauseTime/(expectedPauseTime + expectedTravelTime);
152 NS_ASSERT (probabilityPaused >= 0 && probabilityPaused <= 1);
155 if (u < probabilityPaused)
175 pause = Seconds (u*expectedPauseTime);
182 double x1, x2, y1, y2;
192 r = std::sqrt (((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1))/(a*a + b*b));
215 double dx = (destination.
x - m_current.
x);
216 double dy = (destination.
y - m_current.
y);
217 double dz = (destination.
z - m_current.
z);
218 double k = speed / std::sqrt (dx*dx + dy*dy + dz*dz);
237 double dx = (destination.
x - m_current.
x);
238 double dy = (destination.
y - m_current.
y);
239 double dz = (destination.
z - m_current.
z);
240 double k = speed / std::sqrt (dx*dx + dy*dy + dz*dz);
284 int64_t positionStreamsAllocated = 0;
294 positionStreamsAllocated =
m_position->AssignStreams (stream + 9);
295 return (9 + positionStreamsAllocated);
virtual void DoInitialize(void)
keep track of time values and allow control of global simulation resolution
void SetStream(int64_t stream)
Specifies the stream number for this RNG stream.
Ptr< UniformRandomVariable > m_speed
Ptr< UniformRandomVariable > m_pause
Vector GetCurrentPosition(void) const
#define NS_ASSERT(condition)
Ptr< UniformRandomVariable > m_x1_r
SteadyStateRandomWaypointMobilityModel()
bool IsRunning(void) const
Ptr< UniformRandomVariable > m_u_r
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Ptr< UniformRandomVariable > m_x2_r
ConstantVelocityHelper m_helper
void SteadyStateBeginWalk(const Vector &destination)
Keep track of the current position and velocity of an object.
Ptr< UniformRandomVariable > m_y2_r
double CalculateDistance(const Vector3D &a, const Vector3D &b)
void NotifyCourseChange(void) const
NS_OBJECT_ENSURE_REGISTERED(AntennaModel)
virtual void DoSetPosition(const Vector &position)
Ptr< RandomRectanglePositionAllocator > m_position
Steady-state random waypoint mobility model.
static void Remove(const EventId &id)
void SetVelocity(const Vector &vel)
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
Vector GetVelocity(void) const
virtual Vector DoGetPosition(void) const
virtual Vector DoGetVelocity(void) const
Ptr< UniformRandomVariable > m_y1_r
Ptr< UniformRandomVariable > m_y
virtual int64_t DoAssignStreams(int64_t)
static TypeId GetTypeId(void)
void SetPosition(const Vector &position)
Hold an floating point type.
void SetAttribute(std::string name, const AttributeValue &value)
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Ptr< UniformRandomVariable > m_x
void DoInitializePrivate(void)
virtual void DoInitialize(void)