شبیه سازی شبکه های Vehicular Ad-hoc

بدون ديدگاه

شبیه سازی شبکه های Vehicular Adhoc   با استفاده از

NS2 – SUMO – MOVE

 

 

1 – مقدمه:

 

1 -1 –  معرفی VANET  :

Vehicular Adhoc NETwork یا VANET یک نمونه شبکه سیار است که برای برقراری ارتباط بین وسایل نقلیه مجاور ( IVC = InterVehicle Communication ) و همچنین وسایل نقلیه با تجهیزات ثابت مجاور ( RVC = Roadside to Vehicle Communication ) که معمولا تجهیزات کنار جاده ای هستند ایجاد شده است .

هدف اصلی VANET فراهم آوری امنیت و راحتی برای مسافران است . برای دستیابی به این هدف یک دستگاه خاص الکترونیکی در هر وسیله نقلیه جاسازی می شود که امکان برقراری ارتباط adhoc بین مسافران را برقرار می کند.

چنین شبکه ای باید بدون محدودیت های ساختارهای ارتباطی شبکه ای کلاینت-سرور پیاده سازی شود . هر وسیله نقلیه ای که به یک دستگاه VANET مجهز شده باشد همانند یک گره در شبکه adhoc است و قادر به دریافت و ارسال پیام های دیگران از طریق شبکه بیسیم خواهد بود .

هشدارهای ترافیکی ، علائم جاده ای و مشاهده ترافیک به صورت لحظه ای که از طریق چنین شبکه ای می تواند منتقل شود ، ابزارهای لازم را برای تصمیم گیری در مورد بهترین مسیر به راننده می دهد.

همچنین ارتباطات چند رسانه ای و اینترنت در رنج بیسیم هر وسیله نقلیه فراهم می شود . پرداخت خودکارهزینه پارکینگ و عوارض جاده ای از دیگر کاربرد های شبکه VANET است .

InVANET یا VANET هوشمند ( Intelligent VANET ) در واقع بیانگر یک روش هوشمند در بکارگیری شبکه ی بین خودروهاست .

InVANET    چندین تکنولوژی شبکه بندی adhoc از جمله WiFi IEEE 802.11 b/g ،  WiMAX IEEE 802.16 ، Bluetooth ، IRA و ZigBee  زا یکپارچه می کند تا ارتباط آسان ، ساده ، دقیق و موثر بین خودروها در یک بستر بیسم فراهم شود .

این نوع شبکه همچنین از دیگر تکنولوژی های ارتباطی موجود از جمله DSRC

( Dedicated Short Range Commuinications که در واقع نوعی WiFi است )  ، ازتباطات ماهواره ای و سلولی استفاده می کند .

VANET را می توان به عنوان جزئی از سیستم هوشمند حمل و نقل ( Intelligent Transport System ) دید .

 

 

1 -2 – شبیه سازی VANET :

ایجاد  یک محیط واقعی VANET برای توسعه و تست آن بسیار پر هزینه است . از این رو در توسعه ی چنین شبکه هایی باید به شبیه سازها و بهره گیری از نتایج آنها روی آورد .

در شبیه سازی VANET می توان ا ز شبیه سازهای مختلفی از جمله NS2 یا QualNET استفاده کرد . ( در این مقاله از NS2 استفاده می شود . ) به عنوان مثال اگر می خواهید پروتوکل  مسیریابی بین خودروها را مثلا AODV یا DSDV  گذاشته وراندمان هریک را بررسی و با هم مقایسه کنید می توانید گره ها را به عنوان خودروها در نظر گرفته و روی جنبه های مختلف آن کار کنید .

ولی پیاده سازی مدل حرکتی خودروها در NS2 با جزئیات مورد نظر بسیار دشوار است . به عنوان مثال شما می خواهید سه مدل خودرو با سرعت های متفاوت بر روی مسیر حرکت دهید که خودرو اول فقط باید در خط سمت چپ مسیر حرکت کند و مسیر شما حاوی 4 پیچ و 2 چراغ راهنما است .  پیاده سازی چنین ساختاری نیاز به وقت و مهارت زیادی دارد .

از این رو برای پیاده سازی مدل  های حرکتی مختلف خودرو ها در NS2 از نرم افزار پرقدرت دیگری به نام SUMO استفاده می شود .

SUMO  مخفف واژه های Simulation of Urban MObility  است . و نرم افزاری برای شبیه سازی مدل های حرکتی سیار شهری است .

با این نرم افزار قادر خواهید بود تا جنبه های مختلف یک شبکه خودروها را با جزئیات ایجاد کنید ، نقشه ها را به مدل های حرکتی آماده تبدیل کنید ، یا اطلاعات را از پایگاه داده های سیستم اطلاعات جغرافیایی (GIS) بخوانید و در NS2 از آنها استفاده کنید . به عبارتی می توانید یک شهر را با خودروها ، جاده ها ، علائم راهنمایی و … پیاده سازی کنید .

اگرچه SUMO نرم افزار بسیار قدرتمندی با قابلیت های بسیار زیاد در ایجاد مدل های حرکتی شبکه  های سیار شهری است اما فاقد محیط گرافیکی برای تولید چنین مدل هایی است . برای کار با آن باید به صورت دستی فایل های حاوی مشخصات خودروها ، جاده ها ، و فایل های پیکربندی را ایجاد کرده ، معمولا با فرمت XML یا .sumo.cfg ذخیره کرد و با دستورات متنی آنها را به هم لینک کرده یا فایل های مورد نیاز را تولید کرد .

در این مقاله نرم افزاری را معرفی خواهیم کرد که محیطی گرافیکی برای توسعه مدل های حرکتی سیار شهری و استفاده از آن در NS2 ارائه می دهد .

MOVE که مخفف واژهای Mobility mOdel for VanEt  است در واقعی واسطی بین NS2 و SUMO است .

در این راستا ابتدا روش نصب شبیه ساز NS2 را آموزش داده و با مثالی ساده زوایای کار با آنرا برای شما واضح تر خواهیم ساخت .

سپس SUMO را نصب می کنیم و مثالی از روش ساخت دستی بخشی از یک مدل حرکتی را با استفاده از محیط متنی آن توضیح خواهیم داد .

در ادامه  به معرفی کامل ، نصب و تنظیمات MOVE پرداخته ، مراحل شبیه سازی یک شبکه VANET را با استفاده از آن بیان کرده و در آخر  مثالی عملی از  شبیه سازی حرکت خودروها با استفاده از مسیریابی AODV ارائه خواهیم کرد .

 

2 – شبیه ساز NS2    :

 

2-1- معرفی :

NS2 یک شبیه ساز گسسته – پیشامد در شبیه سازی شبکه های کامپیوتری است .

و از شبیه سازی پروتوکل  های TCP ، Routing و Multicast در شبکه های کابلی و بی سیم و ماهواره ای پشتیبانی می کند .

NS2 به زبان C++ و ورژن شی گرای Tcl یعنی OTcl نوشته شده است .

NS2 رایگان و کدباز است و تحت سیستم عامل های linux ، windows نصب و اجرا می شود .

برای تهیه آن می توانید به وبسایت http://www.isi.edu/nsnam/ns/ns-build.html مراجعه کنید .

 

2 – 2 – نصب :

در این بخش نحوه نصب Network Simulator 2 را در سیستم عامل های لینوکس ( ubuntu 7.10  ) و ویندوز توضیح خواهیم داد :

2 – 2 – 1 نصب NS2 در لینوکس ( ubuntu 7.10 )  :

ابتدا بسته ns-allinone-2.32.tar.gz که حاوی فایل ها مورد نیاز نصب NS2 است دانلود و کامپایل می کنیم :

$ wget link_To_download

$ tar -xzvf ns-allinone-2.32.tar.gz

$ cd ns-allinone-2.32

$ sudo apt-get install build-essential autoconf automake libxmu-dev

 

 

اگر در اجرای این دستور به مشکل برخوردید کامپیوتر را restart  کرده و دستور زیر را اجرا کنید :

$ sudo apt-get install -f build-essential libxt-dev libxt6 libsm-dev libsm6  libice-dev libice6 libxmu-dev

 

و سپس :

 

$./install

 

 

اکنون باید متغیر های محیطی که در فایل  .bashrc قرار دارد را برای کار با NS2 تنظیم کنید.

با دستور locate bashrc مسیر فایل را پیدا کرده و با یک ادیتور آنرا ویرایش کنید :

خطوط زیر را به انتهای فایل bashrc اضافه کنید . البته به جای /your/path مسیر فولدر NS2 را بدهید .

 

# LD_LIBRARY_PATH

OTCL_LIB=/your/path/ns-allinone-2.32/otcl-1.13

NS2_LIB=/your/path/ns-allinone-2.32/lib

X11_LIB=/usr/X11R6/lib

USR_LOCAL_LIB=/usr/local/lib

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OTCL_LIB:$NS2_LIB:$X11_LIB:$USR_LOCAL_LIB

 

# TCL_LIBRARY

TCL_LIB=/your/path/ns-allinone-2.32/tcl8.4.14/library

USR_LIB=/usr/lib

export TCL_LIBRARY=$TCL_LIB:$USR_LIB

 

# PATH

XGRAPH=/your/path/ns-allinone-2.32/bin:/your/path/ns-allinone-2.32/tcl8.4.14/unix:/your/path/ns-allinone-2.32/tk8.4.14/unix

NS=/your/path/ns-allinone-2.32/ns-2.32/

NAM=/your/path/ns-allinone-2.32/nam-1.13/

PATH=$PATH:$XGRAPH:$NS:$NAM

به عنوان مثال فولدر NS2 بر روی کامپیوتر من در مسیر /home/omid/Documents/NS2  قرار دارد بنابراین خطوط بالا را با تغییرات زیر در انتهای فایل bashrc کپی کردم .

 

# LD_LIBRARY_PATH

OTCL_LIB=/home/omid/Documents/NS2/ns-allinone-2.32/otcl-1.13

NS2_LIB=/home/omid/Documents/NS2/ns-allinone-2.32/lib

X11_LIB=/usr/X11R6/lib

USR_LOCAL_LIB=/usr/local/lib

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OTCL_LIB:$NS2_LIB:$X11_

LIB:$USR_LOCAL_LIB

 

# TCL_LIBRARY

TCL_LIB=/home/omid/Documents/NS2/ns-allinone-2.32/tcl8.4.15/library

USR_LIB=/usr/lib

export TCL_LIBRARY=$TCL_LIB:$USR_LIB

 

# PATH

XGRAPH=/home/omid/Documents/NS2/ns-allinone-2.32/bin:/home/omid/Documents/NS2

ns-allinone-2.32/tcl8.4.15/unix:/home/omid/Documents/NS2/ns-allinone-2.32/tk8.4.15/unix

NS=/home/omid/Documents/NS2/ns-allinone-2.32/ns-2.32/

NAM=/home/omid/Documents/NS2/ns-allinone-2.32/nam-1.13/

PATH=$PATH:$XGRAPH:$NS:$NAM

خوب حالا میتوانید کامپیوتر را restart  کنید یا از دستور زیر استفاده کنید تا تغییرات اعمال شود .

 

source /.bashrc

 

اگر در تنظیمات پارامتر های محیطی .bashrc خطایی مرتکب شده باشید با اجرای دستور source نمایش داده می شود. ( در شکل زیر بجای  2.32، عدد 2.31 نوشته شده است )

 

برای اینکه از صحت نصب مطمئن شوید دستور ns را اجرا کنید که خط فرمان به شکل % نمایش داده میشود .

برای اجرای Ns Validation suite :

$ cd ns-2.31

$ ./validate

 

 

در هنگام نصب و اجرای NS2 اگر به خطای زیر برخوردید :

The program ‘ns’ is currently not installed. You can install it by typing:

sudo apt-get install host

Make sure you have the ‘universe’ component enabled

bash: ns: command not found

دستور sudo apt-get install host  را اجرا نکنید . این خطا زمانی رخ می دهد که شما متغیر های محیطی را درست تنظیم نکرده باشید .

2 -2 -3 –  نصب NS2 در ویندوز :

 

2 -3 – مثالی برای آشنایی با نحوه کار با NS2 :

در این مثال می خواهیم یک شبکه با 4 نود به نام های n1 ، n2 ، n3 و n4 پیاده سازی کنیم که لینک ارتباطی بین n0 و n2  و همچنین  n1 و n2 از نوع duplex با پهنای باند 2 مگابیت در ثانیه و تاخیر 10 میلی ثانیه است و لینک duplex  بین n2 و n3 دارای پهنای باند 1.7 مگابیت در ثانیه و تاخیر 20 میلی ثانیه است .

 

هر نود از یک صف از نوع DropTail  با حداکثر اندازه 10 استفاده میکند.

n0 حاوی یک عامل tcp و n1 حاوی یک عامل tcp-sink است .

عامل هاي شبکه نشانگر نقاط انتهايي يک اتصال لايه شبکه اند که بسته هاي اين لايه توليد کرده و در طرف ديگر تحويل لايه متناظر مي دهند . بخشي از عامل توسط OTCL و بخشي از آن به زبان C++ طراحي شده است . عامل در پياده سازي پروتکل هاي لايه‌اي مختلف استفاده مي‌شود .

) به طور پیش فرض اندازه پکت هایی که یک عامل tcp میتواند تولید کند 1  کیلو بایت است .

یک عامل tcp sink  پکت های Ack تولید و به فرستنده پیام ارسال میکند و پکت هاب دریافت شده را آزاد میکند . (

جزئیات بیشتر را در حین نوشتن اسکریپت ارائه خواهم داد .

خوب نوشتن اولین اسکریپت Tcl برای پیاده سازی توپولوژی شکل 1-1 را شروع  میکنیم:

میتوانید اسکریپت هایی Tcl را در هر برنامه ویرایشگر متن بنویسید.

nano ns_example.tcl

 

#Create a simulator object

set ns [new Simulator]

 

#Define different colors for data flows (for NAM)

$ns color 1 Blue

$ns color 2 Red

 

#Open the NAM trace file

set nf [open out.nam w]

$ns namtrace-all $nf

 

#Define a ‘finish’ procedure

proc finish {} {

global ns nf

$ns flush-trace

#Close the NAM trace file

close $nf

#Execute NAM on the trace file

exec nam out.nam &

exit 0

}

 

#Create four nodes

set n0 [$ns node]

set n1 [$ns node]

set n2 [$ns node]

set n3 [$ns node]

 

#Create links between the nodes

$ns duplex-link $n0 $n2 2Mb 10ms DropTail

$ns duplex-link $n1 $n2 2Mb 10ms DropTail

$ns duplex-link $n2 $n3 1.7Mb 20ms DropTail

 

#Set Queue Size of link (n2-n3) to 10

$ns queue-limit $n2 $n3 10

 

#Give node position (for NAM)

$ns duplex-link-op $n0 $n2 orient right-down

$ns duplex-link-op $n1 $n2 orient right-up

$ns duplex-link-op $n2 $n3 orient right

 

#Monitor the queue for link (n2-n3). (for NAM)

$ns duplex-link-op $n2 $n3 queuePos 0.5

 

 

#Setup a TCP connection

set tcp [new Agent/TCP]

$tcp set class_ 2

$ns attach-agent $n0 $tcp

set sink [new Agent/TCPSink]

$ns attach-agent $n3 $sink

$ns connect $tcp $sink

$tcp set fid_ 1

 

#Setup a FTP over TCP connection

set ftp [new Application/FTP]

$ftp attach-agent $tcp

$ftp set type_ FTP

 

 

#Setup a UDP connection

set udp [new Agent/UDP]

$ns attach-agent $n1 $udp

set null [new Agent/Null]

$ns attach-agent $n3 $null

$ns connect $udp $null

$udp set fid_ 2

 

#Setup a CBR over UDP connection

set cbr [new Application/Traffic/CBR]

$cbr attach-agent $udp

$cbr set type_ CBR

$cbr set packet_size_ 1000

$cbr set rate_ 1mb

$cbr set random_ false

 

 

#Schedule events for the CBR and FTP agents

$ns at 0.1 “$cbr start”

$ns at 1.0 “$ftp start”

$ns at 4.0 “$ftp stop”

$ns at 4.5 “$cbr stop”

 

#Detach tcp and sink agents (not really necessary)

$ns at 4.5 “$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink”

 

#Call the finish procedure after 5 seconds of simulation time

$ns at 5.0 “finish”

 

#Print CBR packet size and interval

puts “CBR packet size = [$cbr set packet_size_]”

puts “CBR interval = [$cbr set interval_]”

 

#Run the simulation

$ns run

 

 

و برای اجرای آن دستور زیر را اجرا کنید :

ns  ns_example.tcl

 

 

توضیحات ns_example.tcl :

قبل از هر کار در هر اسکریپت tcl برای NS2 باید یک شیئ شبیه ساز ایجاد کرد. این کار با دستور زیر انجام می شود

set ns [new Simulator]

این دستور یک شیئ شبیه ساز NS را ایجاد می کند و آنرا به متغیر  NS منصوب می کند .

با استفاده از روال ها و خصوصیات این شیئ می توان  توپولوژی شبکه را پیاده سازی کرد.

به عنوان مثال شیئ شبیه ساز دارای متدهایی است که عملیات زیر را انجام می دهند :

  • گره ها و خطوط ارتباطی بین آنها را ایجاد می کند .
  • اشیا مربوط به عناصر شبکه ( با attache-agent ) را به یکدیگر متصل می کند .
  • ارتباط بین منابع ترافیکی و دریافت کننده ها را برقرار می کند .
  • پارامتر های نمایش توسط نرم افزار  NAM را مشخص می کند .

(NAM ابزاری برای نمایش گرافیکی شبیه ساز NS است و محیطی را در اختیار می گذارد که بتوان با استفاده از آن حرکت واقعی بسته های داده ای را مشاهده کرد. )

 

$ns color 1 Blue

$ns color 2 Red

این خطوط برای تعیین رنگ جریان پکت ها استفاده می شود. Syntax کلی آن به صورت زیر است :

$ns color fid color

 

در اینجا جریان پکت ها با fid شماره 1  با رنگ آبی و جریان پکت ها با fid شماره 2  با رنگ قرمز نمایش داده می شود.

 

این بخش برای تنظیم محیط گرافیکی نمایش شبیه ساز ( NAM )  است و تاثیری در شبیه سازی ندارد .

NAM برای داده های ترسیم نیاز به یک فایل باز دارد که در اولین خط کد این بخش فایل out.nam رابرای نوشتن باز کرده و نام nf را به آن می دهیم . در خط دوم مشخص میکنیم که شیئ شبیه ساز ، همه ی داده های شبیه سازی که به NAM مربوط می شود را در فایل out.nam  بنویسد.

set nf [open out.nam w]

$ns namtrace-all $nf

 

تعریف روال پایان :

proc finish {} {

global ns nf

$ns flush-trace

#Close the NAM trace file

close $nf

#Execute NAM on the trace file

exec nam out.nam &

exit 0

}

یک روال پایان تعریف کردیم تا در خاتمه کار با فراخوانی آن از شبیه ساز خارج شویم.

 

در این مرحله 4 نود شبکه ایجاد می کنیم . هر نود را با ایجاد یک شیئ جدید با دستور $node تولید کرده و آنرا با دستور set به متغیر های n0 تا n4 اختصاص می دهیم.

 

set n0 [$ns node]

set n1 [$ns node]

set n2 [$ns node]

set n3 [$ns node]

 

اکنون نوبت به ایجاد لینک ارتباطی بین نود ها رسیده است :

$ns duplex-link $node1 $node2 Bandwidth Delay Queue-type

 

پس لینک های ارتباطی را با مشخصات داده شده ( پهنای باند – تاخیر – نوع صف ) تعریف می نماییم.

$ns duplex-link $n0 $n2 2Mb 10ms DropTail

$ns duplex-link $n1 $n2 2Mb 10ms DropTail

$ns duplex-link $n2 $n3 1.7Mb 20ms DropTail

 

همچنین می توان اندازه اندازه صف هر لینک را محدود کرد :

$ns queue-limit $n2 $n3 10

اینجا اندازه لینک ارتباطی بین نود های n2 و n3  را 10  محدود کردیم .

 

برای بهبود شمای توپولوژی شبکه بهتر است مکان نودها را مشخص کرد .

$ns duplex-link-op $n0 $n2 orient right-down

$ns duplex-link-op $n1 $n2 orient right-up

$ns duplex-link-op $n2 $n3 orient right

برای مشاهده ی تاثیر این خطوط بر ظاهر شبیه ساز پیشنهاد میکنم اسکریپت را بدون این خطوط نیز اجرا کنید .

امکان مانیتور کردن پرقدرت در NS یکی از مزایای آن است . در NS میتوان صف هر لینک را نیز مانیتور کرد :

$ns duplex-link-op $n2 $n3 queuePos 0.5

 

حال می توانید بسته ها را در صف ببینید و مشاهده کنید کدام یک دور انداخته می شوند . در اینجا با صف از نوع Droptail فقط پکت های آبی دور ریخته میشود . برای مشاهده تاثیر نوع صف آنرا به SFQ تغییر دهید و دوباره آنرا اجرا کنید :

$ns duplex-link $n0 $n2 2Mb 10ms SFQ

$ns duplex-link $n1 $n2 2Mb 10ms SFQ

$ns duplex-link $n2 $n3 1.7Mb 20ms SFQ

 

 

تا این مرحله فقط سه نود و لینک ارتباطی بین آنها را ایجاد کرده و مکان آنها را در NAM مشخص کردیم ولی هنوز هیچ نوع داده ای برای تبادل بین نودها مشخص نشده است.

در NS  همیشه داده از یک عامل ) agent )  به دیگری ارسال می شود . بنابراین گام بعدی ایجاد عامل های ارسال کننده  ( منابع ترافیکی ) و دریافت کننده داده است.

 

 

برقراری یک اتصال TCP :

set tcp [new Agent/TCP]

$tcp set class_ 2

$ns attach-agent $n0 $tcp

set sink [new Agent/TCPSink]

$ns attach-agent $n3 $sink

$ns connect $tcp $sink

$tcp set fid_ 1

در این خطوط یک عامل TCP ایجاد کردیم. کاربران NS2 می توانند هر نوع عامل یا منبع ترافیکی را  ایجاد کنند . در واقع عامل ها و منابع ترافیکی  شیئ های اصلی در  NS هستند که عمدتا در  C++  پیاده سازی شده و در OTCL لینک می شوند. برای ایجاد عامل ها و منابع ترافیکی ، کاربر باید نام کلاس های این اشیا را بداند ( Agent/TCP ، Agent/TCPSink ، Application/Ftp ). این اطلاعات در مستندات NS موجود است ولی یک راه میانبر برای آن فایل

/ns-2/tcl/libs/ns-default.tcl

است. این فایل حاوی مقادیر پیش فرض پارامتر های قابل پیکربندی برای اشیا شبکه در NS است .بنابراین راهنمای خوبی برای مشخص کردن اینکه چه نوع شی های شبکه در NS قابل دسترس است و پارامتر های قابل تغییر در NS است .

می توانید پارامتر های مناسب برای هر نوع عامل را در صفحه راهنمای  NS ببینید :

( http://www.isi.edu/nsnam/ns/doc/index.html )

روال attach-agent  یک عامل ایجاد شده را به یک نود پیوند می دهد .

$ns attach-agent node agent

به عنوان مثال :

$ns attach-agent $n0 $tcp

 

قدم بعدی ساختن یک اتصال شبکه منطقی بین اتصالات است. کد زیر یک ارتباط شبکه را با تنظیم آدرس مقصد و گروه آدرس پورت برای هر شبکه برقرار می کند .

 

$ns connect agent1 agent2

به عنوان مثال درکد زیر :

$ns connect $tcp $sink

ارتباط منطقی بین عامل های tcp و sink برقرار شده است .

 

 

در این مرحله منبع ترافیکی FTP را ایجاد میکنیم.

 

#Setup a FTP over TCP connection

set ftp [new Application/FTP]

$ftp attach-agent $tcp

$ftp set type_ FTP

 

 

ایجاد عامل udp  و برقراری ارتباط از نوع udp بین n1 و n3

#Setup a UDP connection

set udp [new Agent/UDP]

$ns attach-agent $n1 $udp

set null [new Agent/Null]

$ns attach-agent $n3 $null

$ns connect $udp $null

$udp set fid_ 2

 

set cbr [new Application/Traffic/CBR]

$cbr attach-agent $udp

$cbr set type_ CBR

$cbr set packet_size_ 1000

$cbr set rate_ 1mb

$cbr set random_ false

 

این خطوط یک تولید کننده ترافیک CBR را به عامل UDP متصل میکند. ( CBR مخففی است برای Constant Bit Rate  )

اندازه بسته روی 1000  بایت تنظیم شده است و سرعت تولید 1 مگابایت در ثانیه است.

خوب هم اکنون تنظیمات شبکه انجام شده است . قدم بعدی نوشتن یک سناریوی شبیه سازی است .

شیئ شبیه ساز توابع برنامه ریزی مختلفی دارد که مهمترین آن تابع time است :

$ns at time  “String”

این شیئ برای زمانبندی شبیه ساز استفاده می شود .

$ns at 0.1 “$cbr start”

$ns at 1.0 “$ftp start”

$ns at 4.0 “$ftp stop”

$ns at 4.5 “$cbr stop”

CBR کار خود را در ثانیه 0.1 شروع می کند و در ثانیه 4.5 خاتمه می دهد و همچنین منبع ترافیکی ftp کار خود را در ثانیه 1.0 آغاز و در ثانیه 4.0 به اتمام می رسد .

 

در آخر کار عامل ها را از یکدیگر جدا می کنیم . اگر چه این کار لازم نیست .

 

$ns at 4.5 “$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink”

 

 

خط آخر نیز برای اجرای ns  است .

 

3 –  SUMO ( Simulation of Urban Mobility )

 

3 -1 – معرفی :

SUMO یک شبیه ساز ترافیک است . این بدین معناست که SUMO قادر به شبیه سازی در اندازه یک شهر است .

البته این شبیه ساز می تواند برای شبیه سازی شبکه های کوچک نیز استفاده شود .

SUMO تحت سیستم عامل های windows و Linux قابل اجراست . برای کسب اطلاعات بیشتر و دریافت این نرم افزار به وبسایت SUMO به آدرس http://sumo.sourceforge.net مراجعه کنید .

3 -2 – نصب شبیه ساز SUMO  :

در این بخش نحوه نصب  SUMOرا در سیستم عامل های لینوکس ( ubuntu 7.10  ) و ویندوز توضیح خواهیم داد :

3 -2-1- نصب در Linux ( ubuntu 7.10 ) :

برای نصب SUMO ابتدا باید پیشنیاز های آنرا نصب کنیم :

# sudo apt-get update

# sudo apt-get install build-essential

# sudo apt-get install xorg-dev

# sudo apt-get install python

# sudo apt-get install python-dev

# sudo apt-get install libxext-dev

# sudo apt-get install libx11-dev

# sudo apt-get install freeglut3 freeglut3-dev libglut3 libglut3-dev

# sudo apt-get install libgl1-mesa libgl1-mesa-dev

# sudo apt-get install libjpeg62-dev libgtk2.0-dev

# sudo apt-get install libxxf86vm-dev libbz2-dev

# sudo apt-get install libglu1-mesa-dev

# sudo apt-get install mesa-common-dev xlibmesa-glu libgludev libsdlm-dev

xlibmesa-gl-dev libartsc0 libartsc0-dev

# sudo apt-get install libxerces27 libxerces27-dev libxml-xerces-perl

 

همچنین نیاز به بسته های Xerces (XML-parser)  ، FOX-Toolkit (GUI Toolkit) ، PROJ

(Cartographic Projections Library)و GDAL (Geospatial Data Abstraction Library) داریم که می توانید این بسته ها را به ترتیب از وبسایت های زیر دریافت و کامپایل کنید .

http://xerces.apache.org/xerces-c/index.html

http://www.fox-toolkit.org/

http://trac.osgeo.org/proj

http://www.remotesensing.org/gdal

و در آخر نصب بسته SUMO :

./configure –with-fox=$HOME –with-proj-gdal=$HOME –with-xerces=$HOME –prefix=$HOME

make

make install

 

 

برای پیدا کردن اطلاعات بیشتر در مورد پارامترهای اسکریپت ./configure در SUMO به لینک زیر مراجعه کنید :

http://sumo.sourceforge.net/wiki/index.php/LinuxBuild

برای اطمینان از نصب موفق SUMO  می توانید محیط گرافیکی آنرا با استفاده از دستور ./sumo-guisim  اجرا کنید .

به عنوان مثال فرض کنید SUMO در مسیر /home/temp/sumo-0.9.8  واقع است ، برای اجرای آن دستورات زیر را اجرا کنید :

cd /home/temp/sumo-0.9.8/src

./sumo-guisim

 

اگر نصب شما بدون اشکال باشد ، محیط گرافیکی SUMO ( شکل زیر (  ظاهر خواهد شد :

 

 

3-2-2 – نصب در ویندوز :

نصب SUMO در ویندوز به مراتب ساده تر از نصب آن در لینوکس است .

برای نصب SUMO در ویندوز به بسته Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)  نیاز است. این بسته را از لینک زیر دریافت و نصب کنید :

http://www.microsoft.com/downloads/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647&displaylang=en

سپس نسخه SUMO مخصوص ویندوز را از لینک زیر دانلود کرده و آنرا از حالت فشرده خارج سازید. به همین سادگی SUMO نصب شد . برای اجرای محیط گرافیکی و دیگر اسکریپت ها  به شاخه bin در فولدر SUMO بروید.

http://sumo.sourceforge.net/downloads/downloads.shtml

 

3 -3 مثالی برای آشنایی با نحوه کار با SUMO  :

در این بخش با مثالی بسیار ساده با اصول کار با شبیه ساز    SUMO آشنا می شویم.

در این مثال ساده ترین شبکه ممکن را ایجاد کرده و اجازه میدهیم یک خودرو در آن را رانندگی کند .

تمامی فایل های این مثال در /data/tutorial/hello در مسیر نصب SUMO موجود است .

در SUMO شبکه خیابان ها از گره ها  ( noede ) و لبه ها (edge  ) تشکیل شده است . لبه ها ، گره ها را به یکدیگر متصل می کنند. بنابراین اگر بخواهیم یک شبکه با دوخیابان ایجاد کنیم که به یکدیگر متصل باشند ، به 3 گره و دو لبه نیاز داریم .

گره ها :

گره ها حاوی دو پارامتر کلیدی طول – عرض جفرافیایی ( فاصله تا مبدا به متر ) و شناسه ( id : برای دسترسی های بعدی ) می باشند .

<nodes>

<node id=”1″ x=”-500.0″ y=”0.0″ />

<node id=”2″ x=”+500.0″ y=”0.0″ />

<node id=”3″ x=”+501.0″ y=”0.0″ />

</nodes>

 

 

شما می توانید از یک ویرایشگر متنی به انتخاب خود برای ذخیره دستورات بالا استفاده کنید و آنرا با نام hello.nod.xml ذخیره کنید که nod.xml پسوند پیش فرض برای فایل حاوی تنظیمات گره در SUMO است .

لبه ها :

در این مرحله گره ها را با لبه ها به یکدیگر متصل می کنیم. اینکار به همین سادگی گفتن آن می باشد.

پارامتر fromnode گره ابتدای لبه و پارامتر tonode گره پایانی لبه را مشخص می کند . پارامتر id نیز یک شناسه برای دسترسی های بعدی فراهم می آورد .

<edges>

<edge fromnode=”1″ id=”1to2″ tonode=”2″ />

<edge fromnode=”2″ id=”out” tonode=”3″ />

</edges>

 

 

داده ها را در فایل hello.edge.xml ذخیره کنید .

اکنون که گره ها و لبه ها را داریم ، می توانیم از اولین ابزار SUMO به نام netconvert  برای ایجاد کردن شبکه استفاده کنیم. ( اطمینان حاصل کنید که در مسیری هستید که ابزار netconvert موجود است . )

> netconvert –xml-node-files=hello.nod.xml –xml-edge-files=hello.edg.xml –output-file=hello.net.xml

 

این دستور شبکه ما را در فایل hello.net.xml ایجاد می کند.

مسیرها :

اکنون ما یک شبکه داریم و به یک خودرو نیاز داریم تا در آن ویراژ دهد !!

در SUMO ، خودروها دارای نوع هستند که خصوصیات اصلی آنها از جمله طول ، شتاب ، حداکثر سرعت و … را مشخص می کند . علاوه براین خودرو به پارامتری به نام sigma نیاز دارد که یک رفتار تصادفی را با توجه به مدل خودرو تولید کند . مقداردهی صفر به این پارامتر باعث تولید یک خودرو قطعی ( deterministic ) می شود.

اکنون یک مسیر برای خودرو ایجاد می کنیم که دو لبه را در بر می گیرد.علت اینکه از 2 لبه برای مثال استفاده کردیم این است که یک خودرو هنگامی که به انتهای یک لبه می رسد ناپدید می شود .

 <routes>  <vtype accel=”1.0″ decel=”5.0″ id=”Car” length=”2.0″ maxspeed=”100.0″               sigma=”0.0″ />  <route id=”route0″>1to2 out</route>  <vehicle depart=”1″ id=”veh0″ route=”route0″ type=”Car” /></routes> 

 

کد ها در فایل hello.ru.xml ذخیره می کنیم .

پیکربندی :

در این مرحله تمامی فایل ها را در بک فایل پیکربندی با هم پیوند می دهیم.

<configuration>

<files>

<net-file>hello.net.xml</net-file>

<route-files>hello.rou.xml</route-files>

</files>

<simulation>

<begin>0</begin>

<end>10000</end>

</simulation>

</configuration>

 

 

و در فایل hello.sumo.cfg  ذخیره می کنیم .

اکنون می توانیم شبیه سازی را با دستور زیر در محیط متنی

 > sumo -c hello.sumo.cfg 

یا با دستور زیر در محیط گرافیکی SUMO اجرا کنیم .

 > guisim -c hello.sumo.cfg 

 

 

3 – MOVE  :

نوشتن دیدگاه

نشانی ایمیل شما منتشر نخواهد شد.

3 × 2 =