ns3とは
ns3とはネットワークの実験を手軽にするためのものである。
エラーについて
無線通信の実験をする際に起こったエラーである。
しっかりとリファレンス読めばこんな簡単な問題にはぶつからなかったのかもしれないが...英語が苦手のため読み間違えたみたい...
みなさんは気をつけてください。
プログラム一部抜粋
uint32_t size;
size = 100
nodes.Create (size);
MobilityHelper mobility;
mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
"MinX", DoubleValue (0.0),
"MinY", DoubleValue (0.0),
"DeltaX", DoubleValue (50),
"DeltaY", DoubleValue (50),
"GridWidth", UintegerValue (10),
"LayoutType", StringValue ("RowFirst"));
mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
"Bounds", RectangleValue (Rectangle (0, 50, 0, 50)));
mobility.Install (nodes);
エラー内容
assert failed. cond="m_bounds.IsInside (position)", file=../src/mobility/model/random-walk-2d-mobility-model.cc, line=168
terminate called without an active exception
上記のプログラムを簡単に説明すると
SetPositonAllocatorによる格子状10×10に50m間隔に均等に並べる処理を行っている。
SetMoblityModelによる移動方法を記載しそれに応じた処理を行う。
問題なのがSetMoblityModelで使ったns3::RandomWalk2dMobilityModelである
このエラーが起きた原因は、ノードの初期配置の範囲と移動の範囲のズレによるものである。
初期値の設定では、
パラメータ | 値 |
---|---|
ノード数 | 100 |
一列のノードの数 | 10 |
ノードの間隔(x軸) | 50 |
ノードの間隔(y軸) | 50 |
上記のパラメータでは
x軸の最大=ノードの間隔(x軸)*一列のノードの数=50*10=500
y軸の最大=ノードの間隔(y軸)*一列のノードの数=50*10=500
最大値をこの値以上にすればエラーは出ないはず
修正
修正案
mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
"Bounds", RectangleValue (Rectangle (0, 50, 0, 50)));
/*
mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
"Bounds", RectangleValue (Rectangle (x軸最小値,x軸最大値,y軸最小値,y軸最大値)));
修正↓
*/
mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
"Bounds", RectangleValue (Rectangle (0, 500, 0, 500)));
変更すると動くと思うのでやってみてください