ns3-model-library.pdf文档中移动模型翻译
Mobility
在ns3中mobility包含如下内容:
1. 一系列mobility模型,可以用来跟踪和保持一个对象的笛卡尔位置和速度。
2. a “course change notifier” trace source,可以用于注册一个mobility模型的轨迹的改变
3. 许多helper类,可以用于放置节点和建立移动模型(包括解析一些mobility定义格式)。
22.1 MOdel Description
mobility的源码放在src/mobility目录中。
22.1.1 Design
这一节包括mobility模型,位置分配器和helper函数。
在ns3中,MobilityModel使用一个(笛卡尔)坐标系跟踪位置的演化。mobility模型聚合了ns3::Node对象和使用GetObject<MobilityModel> ()方法查询节点。基类ns3::MobilityModel是许多不同motion行为的父类。
对象的初始位置使用一个PositionAllocator进行设置的。这些对象的类型铺排在一个notional canvas上。一旦仿真启动,位置分配器可能不再使用,或者被用于挑选未来waypoints这样的移动模型。
大多数用户使用mobility帮助类完成移动系统。MobilityHelper结合了一个移动模型和一个位置分配器,可用于在一系列节点上建立移动能力。
我们首先描述坐标系系统和周围多个坐标系统的问题。
Coordinate system
有许多位置坐标系,它们之间也可以转换。目前ns3仅使用笛卡尔坐标系。
对于不同的坐标系,如何使用(支持笛卡尔坐标系)移动模型这是个问题。在ns3笛卡尔坐标系和其他坐标系之间执行转换是可能的。一个可用的库是proj4 http://trac.osgeo.org/proj/ 库完成映射和反映射。
如果我们支持坐标系之间的转换,我们必须采用一个参考。建议使用地心直角坐标系作为参考。在这方面我们欢迎大家有所贡献。
添加一个在不同坐标系下本地实现的移动模型也是一个问题(例如使用球面坐标系实现的轨道模型)。我们建议使用已经创建的APIS(例如Get/SetSphericalPosition)的子类和一个新的位置分配器实现期望的运动,但是必须支持能够转换到笛卡尔坐标系(可通过笛卡尔Get/SetPosition完成)。
Coordinates
坐标系的基类是ns3::Vector。在文献中位置通常使用坐标系而不使用矢量(vectors)进行描述,但是重新使用相同的数据结构表现位置(x,y,z)和速度是可能的。ns3的Vector类结合使用了两者。
也有另外一些相关的结构用于支持移动模型:
• Rectangle
• Box
• Waypoint
**MobilityModel **
描述基类:
• GetPosition ()
• Position and Velocity attributes
• GetDistanceFrom ()
• CourseChangeNotification
MobilityModel Subclasses 子类
• ConstantPosition
• ConstantVelocity
• ConstantAcceleration
• GaussMarkov
• Hierarchical
• RandomDirection2D
• RandomWalk2D
• RandomWaypoint
• SteadyStateRandomWaypoint
• Waypoint
PositionAllocator
PositionAllocator仅用于开始时初始化节点位置。然而,一些移动模型(例如RandomWaypoint)将用一个位置分配器挑选新的waypoints。
• ListPositionAllocator
• GridPositionAllocator
• RandomRectanglePositionAllocator
• RandomBoxPositionAllocator
• RandomDiscPositionAllocator
• UniformDiscPositionAllocator
Helper
一个特殊的mobility helper已经提供,主要用来帮助完成节点容器(当使用帮助API的容器时)安装移动特性。MobilityHelper类包含MobilityModel工厂对象和一个用于初始化节点布局的PositionAllocator。
ns-2 MobilityHelper
(略)咱们是用的ns3,不翻译。(翻译很累人的好吧。。(<::>))
22.1.2 Scope and Limitations
目前仅支持笛卡尔坐标系
22.1.3 References
TBD
22.2 Usage
大多数ns3程序作者仅在配置时使用移动模型。然而,多个的ns3对象与mobility对象交互发生在执行期间,例如传播模型尝试决定两个移动节点之间的路径损耗。
22.2.1 Helper
可以在教程tutorial的third.cc代码中找到典型的使用模式。
首先,用户初始化MobilityHelper对象,并设置一些属性来控制postion allocator的功能。
MobilityHelper mobility;
mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
"MinX", DoubleValue (0.0),
"MinY", DoubleValue (0.0),
"DeltaX", DoubleValue (5.0),
"DeltaY", DoubleValue (10.0),
"GridWidth", UintegerValue (3),
"LayoutType", StringValue ("RowFirst"));
这些代码告诉mobility helper使用二维网格初始放置的节点。第一个参数是ns3的typeId,就是指定了mobility model的类型;剩下的参数属性/值对配置了这个position allocator(位置分配器)。
下一步,用户指定MobilityModel的子类:
mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
"Bounds", RectangleValue (Rectangle (-50, 50, -50, 50)));
一旦这个helper对象配置完成,典型的用法是传递给一个容器,如:
mobility.Install (wifiStaNodes);
一个MobilityHelper对象可以被重新配置和使用,用于ns3场景的配置中的不同的NodeContainers。
22.2.2 Ns2MobilityHelper
【略】(原始文档中这一节是没有内容的)
22.2.3 Use of Random Variables
一个典型的案例就是在移动拓扑中来评估协议,设计在运动货初始化位置分配的随机性。为了获取到的随机运动和位置与场景中其他部分的配置没有影响,建议使用随机数字系统的“AssignStreams”技巧。
类MobilityModel和类PositionAllocator都有公开的API来分配底层的随机变量:
/**
* Assign a fixed random variable stream number to the random variables
* used by this model. Return the number of streams (possibly zero) that
* have been assigned.
*
* \param stream first stream index to use
* \return the number of stream indices assigned by this model
*
* 分配一个被这个模型所用的固定的随机变量流数字到随机变量。返回一个已经分配的流数字
*(可能是0)
*/
int64_t AssignStreams (int64_t stream);
MobilityHelper类也提供了这个API,当使用这个helper对象时的典型用法是:
int64_t streamIndex = /*some positive integer */
MobilityHelper mobility;
... (configure mobility)
mobility.Install (wifiStaNodes);
int64_t streamsUsed = mobility.AssignStreams (wifiStaNodes, streamIndex);
如果AssignStreams在Install之前调用,将不会有任何效果。
22.2.4 Advanced Usage
许多额外的工具可以用于产生被Ns2MobilityHelper读取的轨迹。
ns2 scengen
TBD
BonnMotion
http://net.cs.uni-bonn.de/wg/cs/applications/bonnmotion/
SUMO
http://sourceforge.net/apps/mediawiki/sumo/index.php?title=Main_Page
TraNS
http://trans.epfl.ch/
22.2.5 Examples
• main-random-topology.cc
• main-random-walk.cc
• main-grid-topology.cc
• ns2-mobility-trace.cc
• ns2-bonnmotion.cc
22.3 Validation
TBD
网友评论