INET移動模塊介紹

1.1Overview

爲了準確評估一個ad-hoc網絡的協議,爲移動主機的運動使用一個真實的模型是很重要的。信號強度,無線電干擾和信道佔用等都取決於節點之間的距離。移動模型的選擇可以顯着影響模擬結果。(例如,數據分組傳送比率,端到端延遲,平均跳數)

有兩種將移動納入仿真模擬的方法:使用軌跡。軌跡包含移動主機的一組動作記錄,像現實生活中觀察到的那樣。使用合成模型。合成模型使用數學模型來描述移動主機的行爲。

有代表移動節點彼此獨立運動的移動模型(實體模型)還有一些表示移動節點彼此依賴(組模型)的移動模型。一些最常用的實體模型是:RandomWalk Mobility Model, Random Waypoint Mobility Model, Random DirectionMobilityModel, Gauss-Markov Mobility Model, City Section Mobility Model。組模型包括:Column Mobility Model,Nomadic Community Mobility Model, Pursue Mobility Model, Reference Point Group Mobility Model

INET框架包含以下跟蹤文件的組件:

BonnMotion:BonnMotion場景生成工具的原生文件格式。

NS2:由Ns2中使用的CMU場景生成器生成的路徑文件。

ANSim:ANSim(Ad-Hoc Network Simulation)工具的ANSim XML跟蹤文件。

將新實體移動模型整合到INET框架中很容易,但羣組移動性尚未得到支持。因此INET附帶的所有模型都是實體模型的實現:

DeterministicMotions:固定節點位置以及節點沿着線。圓或者矩形移動。

RandomWaypoint:包括目的地和速度變化時的隨機暫停時間。

Gauss-Markov:使用一個調整參數來改變移動模式中的隨機程度。

MassMobility:描述了慣性和動量的質點。

ChiangMobility:使用概率轉換矩陣來改變節點的運動狀態。

1.2Mobility in INET

在INET中,移動節點必須包含一個實現IMobility標記接口的模塊。該模塊存儲節點當前的座標,並負責定期更新位置,並在位置發生變化時發出mobilityStateChanged信號。

節點的顯示字符串的p [0]和p[1]字段也被更新,所以如果觀察仿真動畫頁面,節點實際上也是在移動的。節點的當前位置可以從顯示字符串獲得。

無線電仿真(radio)具有一個ChannelControl模塊,用於在通信距離內的節點之間建立通信通道,並在超出範圍時斷開連接。ChannelControl模塊使用mobilityStateChanged信號來確定連接狀態何時需要更新。

拓展新的移動模式有兩種方法。簡單但是比較有侷限性的方法是使用TurtleMobility作爲移動組件,並編寫類似的turtle圖形的腳本。第二種方法是去拓展C++簡單模塊。在這種情況下,移動模塊的C ++類應該來自IMmobility,其NED類型應該實現IMmobility接口。

1.2.1 MobilityBase class

抽象類MobilityBase類是定義所有移動模塊的基礎類。這個類允許定義節點不能離開的立方體區域。這個立方區域由:constraintAreaX,constraintAreaY,constraintAreaZ,constraintAreaWidth,constraintAreaHeight和constraintAreaDepth這些參數構成。當模塊被初始化時,它通過調用initializePosition()方法來設置節點的初始位置。如果initFromDisplayString參數設置爲true,則此方法的默認實現將設置顯示字符串的位置。否則,由 nitialX,initialY和initialZ參數定義初始位置。如果這兩種參數都沒有定義,則再指定區域內隨機給定一個位置。

該模塊負責定期更新位置。爲了達到此目的,它必須定時給自己發送消息。這些消息在handleSelfMessage方法中處理。在派生類中,handleSelfMessage應計算新位置並更新顯示字符串,並通過調用positionUpdated方法來發布新位置。當節點到達約束區域的邊界時,移動性組件必須阻止節點退出。 它可以調用handleIfOutside方法,該方法提供以下策略:

l  reflect of the wall

l  reappear at theopposite edge (torus area)

l  placed at a randomlychosen position of the area

l  stop the simulationwith an error

1.2.2 MovingMobilityBase

當節點在連續軌跡上移動並週期性地更新其位置時,可以使用抽象的MovingMobilityBase類對移動性進行建模。子類只需要實現move方法,負責更新節點的當前位置和速度。

抽象move方法在每個updateInterval步驟中自動調用。當客戶端請求當前位置或速度時,或者當移動方法通過設置nextChange字段在未來時間請求更新時,也會調用該方法。當運動狀態在不是updateInterval倍數的特定時間更改時,可以使用此選項。該方法可以將字段設置爲真以指示節點到達其最終位置並且不需要更多位置更新。

1.2.3 LineSegmentsMobilityBase

移動節點的路徑通常由恆定速度的線性運動組成。節點以某種速度移動一段時間,然後以另一種速度移動另一段時間,依此類推。如果一個移動模型符合這個描述,那麼從LineSegmentsMobilityBase派生實現的C ++類可能是合適的。

模塊首先通過調用setTargetPosition方法來選擇目標位置和目標時間。如果目標位置與當前位置不同,它將開始向目標移動,並在配置的updateInterval間隔中更新位置。當目標位置到達時,它會選擇一個新的目標。

1.3 Implementedmodels

1.3.1 Deterministic movements

StationaryMobility:這個移動模型什麼也不做,可以用於靜止固定位置的模型。

StaticGridMobility:將所有節點放置在矩形網格中。

LinearMobility:這是一個具有速度,角度和加速度參數的線性移動模型。角度僅在移動節點撞擊牆壁時發生變化:然後以相同角度反射牆壁。Z軸是一個確定值,只在x-y二維平面內移動。

CircleMobility:以恆定速度繞着平行於X-Y平面的圓移動節點。節點從約束區域的邊界反彈。這個圓通過cx,cy和r三個參數給出;初始位置有startAngle參數給出。節點的位置在updateInterval步驟中刷新。

RectangleMobility:在約束區域周圍移動節點。 配置:速度,startPos,updateInterval。

TractorMobility:將Tractor移動到具有一定行數的字段中。下圖說明了rowCount參數爲2時Tractor的移動情況。軌跡遵循1中的段;2;3;4;5;6;7;8;1;2;3::訂單。 該區域由x1,y1,x2,y2參數配置。

1.3.2 Random movements

此部分我爲涉及,暫不做翻譯。

1.3.3 Replaying trace files

BonnMotionMobility使用BonnMotion的本機文件格式。

該文件是純文本文件,每行描述一個主機的運動。 一行由一個或多個實數的(t,x,y)三元組組成,如下所示:

t1 x1 y1 t2 x2 y2 t3 x3 y3 t4 x4 y4 ...

其含義是給定節點在tk時達到(xk; yk)。 沒有單獨的分割符號,所以x和y座標將在一直重複給出。

Ns2Mobility節點根據NS2中使用的路徑文件進行移動。路徑文件的格式如下:

# ’#’starts a comment, ends at the end of line
$node_(<id>)set X_ <x> # sets x coordinate of the node identified by <id>
$node_(<id>)set Y_ <y> # sets y coordinate of the node identified by <id>
$node_(<id>)set Z_ <z> # sets z coordinate (ignored)
$ns at$time "$node_(<id>) setdest <x> <y> <speed>"# at $time start moving
towards<x>,<y> with <speed>

Ns2MotionMobility模塊有一下參數:

l  traceFile: Ns2路徑文件

nodeId:跟蹤文件中的節點標識符; -1用父模塊的索引代替。

l  scrollX,scrollY:用戶指定的座標轉換

ANSimMobility讀取ANSim工具的路徑文件。

節點正沿着符合此DTD的XML跟蹤文件描述的線性段移動:

<!ELEMENTmobility (position_change*)>
<!ELEMENTposition_change (node_id, start_time, end_time, destination)>
<!ELEMENTnode_id (#PCDATA)>
<!ELEMENTstart_time (#PCDATA)>
<!ELEMENTend_time (#PCDATA)>
<!ELEMENTdestination (xpos, ypos)>
<!ELEMENTxpos (#PCDATA)>
<!ELEMENTypos (#PCDATA)>

此模塊的參數:

l  ansimTrace:路徑文件

nodeId:跟蹤文件中的節點標識符; -1用父模塊的索引代替。

ANSimMobility模塊僅處理position_change元素,並忽略start_time屬性。 它立即開始下一部分的移動。

1.4 Mobility script

TurtleMobility模塊可以通過包含XML格式的移動命令腳本文件進行參數化。TurtleMobility模塊有一下參數:

l  updateInterval更新主機位置的時間間隔。

constraintAreaX, constraintAreaY, constraintAreaWidth, constraintAreaHeight:節點不能離開的約束區域。

turtleScript描述移動的路徑文件。

XML文件的內容應符合以下DTD文件(可在源代碼樹中作爲TurtleMobility.dtd找到):

該文件包含movement元素,每個描述一個軌跡。Movement的id屬性可以用來在ini文件中指定移動軌跡:

**.mobility.turtleScript= xmldoc("turtle.xml", "movements//movement[@id=’1’]")

節點的運動由均勻的線性段組成。 運動狀態由以下變量描述:

l  Position:(x; y)節點當前位置的座標。

l  speed, angle:節點速度的大小和方向。

targetPos:當前的目標位置。如果給定的速度和角度不被使用。

l  targetTime:當前線性運動的結束時間。

l  borderPolicy:下面當中的一個

                  -reflect反彈,向相反方向移動。

                  -wrap出現在對立的另一邊。

                  -placerandom隨機出現在該區域的一個位置。

                  -error當node觸碰邊界時報錯。

 

movement元素可以包含以下命令:

repeat(n) 重複其內容n次,或者如果省略則不重複。

set(x,y,speed,angle,borderPolicy) 修改節點的狀態

forward(d,t) 以當前速度將節點移動t時間或移動到d距離。如果t和d同時給出則忽略速度(也就是在t時間內移動d距離)。

turn(angle) 通過angel增加節點的角度。

moveto(x,y,t) 在給定的時間內移動到點(x; y)。如果未指定t,則以當前速度進行。

moveby(x,y,t) 在給定的時間內通過偏移量(x; y)移動。 如果未指定t,則以當前速度進行。

wait(t) 等待指定的時間。

給出屬性值即可不要添加單位,已經假定距離以米爲單位,時間間隔以秒爲單位,速度以米/秒爲單位。屬性可以包含每次執行命令時評估的表達式。約束區域的限制可以引用爲$ MINX,$ MAXX,$ MINY和$ MAXY。使用隨機數分佈則在評估時會生成一個新的隨機數,因此該腳本既可以描述隨機場景又可以描述確定性場景。

爲了說明模塊的用法,以下展示了一些基礎移動模型如何用路徑腳本實現:

RectangleMobility:

Random Waypoint:

MassMobility:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章