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
/**
58
* \return the child mobility model.
59
*
60
* Calling GetPosition() on the model returned by this method allows
61
* one to access the position of the child relative to its parent.
62
*/
63
Ptr<MobilityModel>
GetChild
()
const
;
64
/**
65
* \return the parent mobility model.
66
*
67
* Calling GetPosition() on the model returned by this method allows
68
* one to access the position of the parent alone, which is used
69
* as the reference position to which the child position is added.
70
*/
71
Ptr<MobilityModel>
GetParent
()
const
;
72
/**
73
* Sets the child mobility model to a new one, possibly replacing
74
* an existing one. If the child model is being replaced,
75
* then the new child mobility model's current position is also set to
76
* the previous position to ensure that the composite
77
* position is preserved by this operation.
78
* \param model new mobility model child
79
*/
80
void
SetChild
(
Ptr<MobilityModel>
model);
81
/**
82
* Sets the parent mobility model to a new one, possibly replacing
83
* an existing one. If the parent model is being replaced,
84
* then the new position is set to the position that was set before
85
* replacement, to ensure that the composite position is preserved
86
* across changes to the parent model.
87
* \param model new mobility model parent
88
*/
89
void
SetParent
(
Ptr<MobilityModel>
model);
90
91
private
:
92
Vector
DoGetPosition
()
const override
;
93
void
DoSetPosition
(
const
Vector& position)
override
;
94
Vector
DoGetVelocity
()
const override
;
95
void
DoInitialize
()
override
;
96
int64_t
DoAssignStreams
(int64_t)
override
;
97
98
/**
99
* Callback for when parent mobility model course change occurs
100
* \param model mobility mode (unused)
101
*/
102
void
ParentChanged
(
Ptr<const MobilityModel>
model);
103
/**
104
* Callback for when child mobility model course change occurs
105
* \param model mobility mode (unused)
106
*/
107
void
ChildChanged
(
Ptr<const MobilityModel>
model);
108
109
Ptr<MobilityModel>
m_child
;
//!< pointer to child mobility model
110
Ptr<MobilityModel>
m_parent
;
//!< pointer to parent mobility model
111
};
112
113
}
// namespace ns3
114
115
#endif
/* HIERARCHICAL_MOBILITY_MODEL_H */
ns3::HierarchicalMobilityModel
Hierarchical mobility model.
Definition
hierarchical-mobility-model.h:47
ns3::HierarchicalMobilityModel::m_child
Ptr< MobilityModel > m_child
pointer to child mobility model
Definition
hierarchical-mobility-model.h:109
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:110
ns3::HierarchicalMobilityModel::DoSetPosition
void DoSetPosition(const Vector &position) override
Definition
hierarchical-mobility-model.cc:137
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
Keep track of the current position and velocity of an object.
Definition
mobility-model.h:29
ns3::Ptr
Smart pointer class similar to boost::intrusive_ptr.
Definition
mpi-test-fixtures.h:37
ns3::TypeId
a unique identifier for an interface.
Definition
type-id.h:48
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 Fri Nov 8 2024 13:59:04 for ns-3 by
1.11.0