NS3(Network Simulator)

NS3 mobility移动模型内容翻译

2017-06-25  本文已影响1020人  shawn168

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
上一篇 下一篇

猜你喜欢

热点阅读