10#include "ns3/config.h"
11#include "ns3/hierarchical-mobility-model.h"
13#include "ns3/mobility-model.h"
15#include "ns3/pointer.h"
16#include "ns3/position-allocator.h"
17#include "ns3/simulator.h"
18#include "ns3/string.h"
31 StringValue(
"ns3::ConstantRandomVariable[Constant=0.0]"),
33 StringValue(
"ns3::ConstantRandomVariable[Constant=0.0]"));
83 NS_FATAL_ERROR(
"The requested mobility model is not a mobility model: \""
89 object->AggregateObject(model);
100 object->AggregateObject(hierarchical);
101 NS_LOG_DEBUG(
"node=" <<
object <<
", mob=" << hierarchical);
105 model->SetPosition(position);
118 for (
auto i = c.
Begin(); i != c.
End(); ++i)
139 if (v <= 1e-4 && v >= -1e-4)
143 else if (v <= 1e-3 && v >= 0)
147 else if (v >= -1e-3 && v <= 0)
160 std::ostream* os = stream->GetStream();
161 Vector pos = mobility->GetPosition();
162 Vector vel = mobility->GetVelocity();
163 *os <<
"now=" <<
Simulator::Now() <<
" node=" << mobility->GetObject<
Node>()->GetId();
170 std::streamsize saved_precision = os->precision();
171 std::ios::fmtflags saved_flags = os->flags();
173 os->setf(std::ios::fixed, std::ios::floatfield);
174 *os <<
" pos=" << pos.x <<
":" << pos.y <<
":" << pos.z <<
" vel=" << vel.x <<
":" << vel.y
175 <<
":" << vel.z << std::endl;
176 os->flags(saved_flags);
177 os->precision(saved_precision);
183 std::ostringstream oss;
184 oss <<
"/NodeList/" << nodeid <<
"/$ns3::MobilityModel/CourseChange";
193 for (
auto i = n.
Begin(); i != n.
End(); ++i)
208 int64_t currentStream = stream;
211 for (
auto i = c.
Begin(); i != c.
End(); ++i)
217 currentStream += mobility->AssignStreams(currentStream);
220 return (currentStream - stream);
235 double dist = rxPosition->GetDistanceFrom(txPosition);
236 distSq = dist * dist;
void PopReferenceMobilityModel()
Remove the top item from the top of the stack of "reference mobility models".
int64_t AssignStreams(NodeContainer c, int64_t stream)
Assign a fixed random variable stream number to the random variables used by the mobility models on t...
static void EnableAsciiAll(Ptr< OutputStreamWrapper > stream)
static double GetDistanceSquaredBetween(Ptr< Node > n1, Ptr< Node > n2)
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
ObjectFactory m_mobility
Object factory to create mobility objects.
static void CourseChanged(Ptr< OutputStreamWrapper > stream, Ptr< const MobilityModel > mobility)
Output course change events from mobility model to output stream.
std::string GetMobilityModelType() const
~MobilityHelper()
Destroy a Mobility Helper.
Ptr< PositionAllocator > m_position
Position allocator for use in hierarchical mobility model.
void PushReferenceMobilityModel(Ptr< Object > reference)
void InstallAll() const
Perform the work of MobilityHelper::Install on all nodes which exist in the simulation.
MobilityHelper()
Construct a Mobility Helper which is used to make life easier when working with mobility models.
void SetPositionAllocator(Ptr< PositionAllocator > allocator)
Set the position allocator which will be used to allocate the initial position of every node initiali...
static void EnableAscii(Ptr< OutputStreamWrapper > stream, uint32_t nodeid)
std::vector< Ptr< MobilityModel > > m_mobilityStack
Internal stack of mobility models.
Keep track of the current position and velocity of an object.
static Ptr< T > Find(std::string path)
Given a name path string, look to see if there's an object in the system with that associated to it.
keep track of a set of node pointers.
Iterator End() const
Get an iterator which indicates past-the-last Node in the container.
static NodeContainer GetGlobal()
Create a NodeContainer that contains a list of all nodes created through NodeContainer::Create() and ...
Iterator Begin() const
Get an iterator which refers to the first Node in the container.
Ptr< Object > Create() const
Create an Object instance of the configured TypeId.
TypeId GetTypeId() const
Get the TypeId which will be created by this ObjectFactory.
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
AttributeValue implementation for Pointer.
Smart pointer class similar to boost::intrusive_ptr.
static Time Now()
Return the current simulation virtual time.
Hold variables of type string.
std::string GetName() const
Get the name.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
bool ConnectWithoutContextFailSafe(std::string path, const CallbackBase &cb)
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
auto MakeBoundCallback(R(*fnPtr)(Args...), BArgs &&... bargs)
Make Callbacks with varying number of bound arguments.
Ptr< T > CreateObjectWithAttributes(Args... args)
Allocate an Object on the heap and initialize with a set of attributes.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static double DoRound(double v)
Utility function that rounds |1e-4| < input value < |1e-3| up to +/- 1e-3 and value <= |1e-4| to zero...