ns3笔记-移动模型

MobilityHelper

MobilityHelper mobility  // 用来设置节点移动模型
mobility.SetPositionAllocator()  //设置节点初始位置
mobility.SetMobilityModel()    //设置节点运动方式

1. 设置初始位置:SetPositionAllocator

1.1 GridPositionAllocator(网格布局)

mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
                                 "MinX", DoubleValue (-100.0),
                                 "MinY", DoubleValue (-100.0),
                                 "DeltaX", DoubleValue (5.0),
                                 "DeltaY", DoubleValue (20.0),
                                 "GridWidth", UintegerValue (20),
                                 "LayoutType", StringValue ("RowFirst"));
                                 

GridPositionAllocator的属性以及默认值

  • “GridWidth”, “一行最多有几个节点”,UintegerValue (10),
  • “MinX”, “网格布局起始处在x轴上的坐标.”,DoubleValue (1.0)
  • “MinY”, “网格布局起始处在y轴上的坐标.”,DoubleValue (0.0)
  • “DeltaX”, “x轴上节点间的距离.”,DoubleValue (1.0)
  • “DeltaY”, “y轴上节点间的距离”, DoubleValue (1.0)
  • “LayoutType”, “布局类型,是先分配行,还是先分配列”,EnumValue (ROW_FIRST)

1.2 RandomDiscPositionAllocator(在一个圆内随机布局)

mobility.SetPositionAllocator ("ns3::RandomDiscPositionAllocator",
                               "X", StringValue ("100.0"),
                               "Y", StringValue ("100.0"),
                               "Rho", StringValue ("ns3::UniformRandomVariable[Min=0|Max=30]"));

RandomDiscPositionAllocator属性以及默认值

  • “Theta”,“随机角度.”, StringValue (“ns3::UniformRandomVariable[Min=0.0|Max=6.2830]”),
  • “Rho”,“随机半径”, StringValue (“ns3::UniformRandomVariable[Min=0.0|Max=200.0]”),
  • “X”,“圆心x轴坐标”, DoubleValue (0.0),
  • “Y”,“圆心y轴坐标”, DoubleValue (0.0)
  • ns3::UniformRandomVariable[Min=0.0|Max=6.2830] 一个随机的值,0.0~6.2830

2. 设置运动方式:SetMobilityModel

2.1 ConstantPositionMobilityModel(固定不动)

mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");

2.2. RandomWalk2dMobilityModel(2d场景随机运动)


mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
                           "Mode", StringValue ("Time"),
                           "Time", StringValue ("2s"),
                           "Speed", StringValue ("ns3::ConstantRandomVariable[Constant=1.0]"),
                           "Bounds", StringValue ("0|200|0|200"));

RandomWalk2dMobilityModel模型的属性以及默认值

  • “Bounds”,“运动的范围”, RectangleValue (Rectangle (0.0, 100.0, 0.0, 100.0))
  • “Time”,“走多久换一次方向”,TimeValue (Seconds (1.0))
  • “Distance”,"走多远换一次方向"DoubleValue (1.0),
  • “Mode”,“Time or Distance”,EnumValue (RandomWalk2dMobilityModel::MODE_DISTANCE)
  • “Direction”,"随机方向 (radians)."StringValue (“ns3::UniformRandomVariable[Min=0.0|Max=6.283184]”)
  • “Speed”“随机速度 (m/s).”,StringValue (“ns3::UniformRandomVariable[Min=2.0|Max=4.0]”)

2.3. 自定义方式

//在5秒后node节点会沿x轴,y轴,z轴方向分别移动1米,
Ptr<MobilityModel> mob = node->GetObject<MobilityModel> ();
Simulator::Schedule (Seconds (5.0), &MobilityModel::SetPosition, mob, Vector (1, 1, 1));
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ns-3中提供了三种节点移动模型:静态模型、随机游走模型移动模型(Mobility Model)。其中移动模型又分为以下几种: 1. Constant Position Model:恒定位置模型,节点一直保持不动。 2. Random Walk Model:随机游走模型,节点在平面上以随机步长和方向运动。 3. Gauss-Markov Model:高斯-马尔科夫模型,节点在平面上以高斯分布的随机步长和方向运动。 4. Random Direction Model:随机方向模型,节点在平面上以随机方向和常量速度移动。 5. Constant Velocity Model:恒定速度模型,节点以恒定速度沿着一个随机方向移动。 6. Random Waypoint Model:随机航点模型,节点随机选择目标点并以一定速度移动。 7. Random Walk 2D Model:二维随机游走模型,节点在平面上以随机步长和方向运动。 可以通过创建相应的移动模型对象,并将其与节点关联,来实现节点的移动。例如,使用Random Walk 2D Model来实现节点的移动,可以按照以下步骤进行: 1. 创建一个移动模型对象: ```c++ Ptr<RandomWalk2dMobilityModel> model = CreateObject<RandomWalk2dMobilityModel> (); ``` 2. 设置节点的初始位置和速度: ```c++ model->SetPosition (Vector3D (0, 0, 0)); model->SetVelocity (Vector (5, 0, 0)); ``` 3. 将移动模型对象与节点关联: ```c++ node->AggregateObject (model); ``` 在仿真过程中,节点将按照指定的移动模型进行移动。可以使用仿真器的Schedule方法来控制节点的移动时间。例如,以下代码将节点在10秒后开始移动,并在20秒后停止移动: ```c++ Simulator::Schedule (Seconds (10.0), &RandomWalk2dMobilityModel::Start, model); Simulator::Schedule (Seconds (20.0), &RandomWalk2dMobilityModel::Stop, model); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值