A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Documentation ▼
Installation
Manual
Models
Contributing
Wiki
Development ▼
API Docs
Issue Tracker
Merge Requests
API
Loading...
Searching...
No Matches
hierarchical-mobility-model.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2007 INRIA
3
*
4
* SPDX-License-Identifier: GPL-2.0-only
5
*
6
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
7
*/
8
#ifndef HIERARCHICAL_MOBILITY_MODEL_H
9
#define HIERARCHICAL_MOBILITY_MODEL_H
10
11
#include "
mobility-model.h
"
12
13
namespace
ns3
14
{
15
16
/**
17
* @ingroup mobility
18
* @brief Hierarchical mobility model.
19
*
20
* This model allows you to specify the position of a child object
21
* relative to a parent object.
22
*
23
* Basically this is a mobility model that combines two other mobility
24
* models: a "parent" model and a "child" model. The position of the
25
* hierarchical model is always the vector sum of the parent + child
26
* positions, so that if the parent model "moves", then this model
27
* will report an equal relative movement. Useful, for instance, if
28
* you want to simulate a node inside another node that moves, such as
29
* a vehicle.
30
*
31
* Setting the position on this model is always done using world
32
* absolute coordinates, and it changes only the child mobility model
33
* position, never the parent. The child mobility model always uses a
34
* coordinate system relative to the parent model position.
35
*
36
* \note: as a special case, the parent model may be NULL, which is
37
* semantically equivalent to having a ConstantPositionMobilityModel
38
* as parent positioned at origin (0,0,0). In other words, setting
39
* the parent model to NULL makes the child model and the hierarchical
40
* model start using world absolute coordinates.
41
*
42
* \warning: changing the parent/child mobility models in the middle
43
* of a simulation will probably not play very well with the
44
* ConfigStore APIs, so do this only if you know what you are doing.
45
*/
46
class
HierarchicalMobilityModel
:
public
MobilityModel
47
{
48
public
:
49
/**
50
* Register this type with the TypeId system.
51
* @return the object TypeId
52
*/
53
static
TypeId
GetTypeId
();
54
55
HierarchicalMobilityModel
();
56
57
// Inherited from MobilityModel
58
Ptr<MobilityModel>
Copy
()
const override
59
{
60
return
CreateObject<HierarchicalMobilityModel>
(*
this
);
61
}
62
63
/**
64
* @return the child mobility model.
65
*
66
* Calling GetPosition() on the model returned by this method allows
67
* one to access the position of the child relative to its parent.
68
*/
69
Ptr<MobilityModel>
GetChild
()
const
;
70
/**
71
* @return the parent mobility model.
72
*
73
* Calling GetPosition() on the model returned by this method allows
74
* one to access the position of the parent alone, which is used
75
* as the reference position to which the child position is added.
76
*/
77
Ptr<MobilityModel>
GetParent
()
const
;
78
/**
79
* Sets the child mobility model to a new one, possibly replacing
80
* an existing one. If the child model is being replaced,
81
* then the new child mobility model's current position is also set to
82
* the previous position to ensure that the composite
83
* position is preserved by this operation.
84
* @param model new mobility model child
85
*/
86
void
SetChild
(
Ptr<MobilityModel>
model);
87
/**
88
* Sets the parent mobility model to a new one, possibly replacing
89
* an existing one. If the parent model is being replaced,
90
* then the new position is set to the position that was set before
91
* replacement, to ensure that the composite position is preserved
92
* across changes to the parent model.
93
* @param model new mobility model parent
94
*/
95
void
SetParent
(
Ptr<MobilityModel>
model);
96
97
private
:
98
Vector
DoGetPosition
()
const override
;
99
void
DoSetPosition
(
const
Vector& position)
override
;
100
Vector
DoGetVelocity
()
const override
;
101
void
DoInitialize
()
override
;
102
int64_t
DoAssignStreams
(int64_t)
override
;
103
104
/**
105
* Callback for when parent mobility model course change occurs
106
* @param model mobility mode (unused)
107
*/
108
void
ParentChanged
(
Ptr<const MobilityModel>
model);
109
/**
110
* Callback for when child mobility model course change occurs
111
* @param model mobility mode (unused)
112
*/
113
void
ChildChanged
(
Ptr<const MobilityModel>
model);
114
115
Ptr<MobilityModel>
m_child
;
//!< pointer to child mobility model
116
Ptr<MobilityModel>
m_parent
;
//!< pointer to parent mobility model
117
};
118
119
}
// namespace ns3
120
121
#endif
/* HIERARCHICAL_MOBILITY_MODEL_H */
ns3::HierarchicalMobilityModel::m_child
Ptr< MobilityModel > m_child
pointer to child mobility model
Definition
hierarchical-mobility-model.h:115
ns3::HierarchicalMobilityModel::GetChild
Ptr< MobilityModel > GetChild() const
Definition
hierarchical-mobility-model.cc:111
ns3::HierarchicalMobilityModel::DoGetVelocity
Vector DoGetVelocity() const override
Definition
hierarchical-mobility-model.cc:161
ns3::HierarchicalMobilityModel::ChildChanged
void ChildChanged(Ptr< const MobilityModel > model)
Callback for when child mobility model course change occurs.
Definition
hierarchical-mobility-model.cc:185
ns3::HierarchicalMobilityModel::m_parent
Ptr< MobilityModel > m_parent
pointer to parent mobility model
Definition
hierarchical-mobility-model.h:116
ns3::HierarchicalMobilityModel::DoSetPosition
void DoSetPosition(const Vector &position) override
Definition
hierarchical-mobility-model.cc:137
ns3::HierarchicalMobilityModel::Copy
Ptr< MobilityModel > Copy() const override
Copy function allows one to copy the underlying MobilityModel from a MobilityModel pointer,...
Definition
hierarchical-mobility-model.h:58
ns3::HierarchicalMobilityModel::SetParent
void SetParent(Ptr< MobilityModel > model)
Sets the parent mobility model to a new one, possibly replacing an existing one.
Definition
hierarchical-mobility-model.cc:80
ns3::HierarchicalMobilityModel::HierarchicalMobilityModel
HierarchicalMobilityModel()
Definition
hierarchical-mobility-model.cc:44
ns3::HierarchicalMobilityModel::DoGetPosition
Vector DoGetPosition() const override
Definition
hierarchical-mobility-model.cc:123
ns3::HierarchicalMobilityModel::GetTypeId
static TypeId GetTypeId()
Register this type with the TypeId system.
Definition
hierarchical-mobility-model.cc:22
ns3::HierarchicalMobilityModel::GetParent
Ptr< MobilityModel > GetParent() const
Definition
hierarchical-mobility-model.cc:117
ns3::HierarchicalMobilityModel::DoInitialize
void DoInitialize() override
Initialize() implementation.
Definition
hierarchical-mobility-model.cc:191
ns3::HierarchicalMobilityModel::SetChild
void SetChild(Ptr< MobilityModel > model)
Sets the child mobility model to a new one, possibly replacing an existing one.
Definition
hierarchical-mobility-model.cc:52
ns3::HierarchicalMobilityModel::ParentChanged
void ParentChanged(Ptr< const MobilityModel > model)
Callback for when parent mobility model course change occurs.
Definition
hierarchical-mobility-model.cc:179
ns3::HierarchicalMobilityModel::DoAssignStreams
int64_t DoAssignStreams(int64_t) override
The default implementation does nothing but return the passed-in parameter.
Definition
hierarchical-mobility-model.cc:202
ns3::MobilityModel::MobilityModel
MobilityModel()
Definition
mobility-model.cc:47
ns3::Ptr
Smart pointer class similar to boost::intrusive_ptr.
Definition
ptr.h:67
ns3::TypeId
a unique identifier for an interface.
Definition
type-id.h:49
ns3::CreateObject
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
Definition
object.h:619
mobility-model.h
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
src
mobility
model
hierarchical-mobility-model.h
Generated on Wed Oct 1 2025 18:22:19 for ns-3 by
1.13.2