美文网首页NS3(Network Simulator)
NS3 mobility移动模型内容翻译

NS3 mobility移动模型内容翻译

作者: shawn168 | 来源:发表于2017-06-25 20:30 被阅读1020次

    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

    相关文章

      网友评论

        本文标题:NS3 mobility移动模型内容翻译

        本文链接:https://www.haomeiwen.com/subject/unsgnttx.html