我在aqua-sim中使用了VBF路由。但是,我注意到源数据包永远不会到达接收器!和消耗的能量超过初始能量! 造成这种情况的原因是什么?
这是tcl文件
set opt(chan) Channel/UnderwaterChannel
set opt(prop) Propagation/UnderwaterPropagation
set opt(netif) Phy/UnderwaterPhy
set opt(mac) Mac/UnderwaterMac/BroadcastMac
set opt(ifq) Queue/DropTail/PriQueue
set opt(ll) LL
set opt(energy) EnergyModel
set opt(txpower) 2.0
set opt(rxpower) 0.75
set opt(initialenergy) 10000
set opt(idlepower) 0.008
set opt(ant) Antenna/OmniAntenna
set opt(filters) GradientFilter ;# options can be one or more of
;# TPP/OPP/Gear/Rmst/SourceRoute/Log/TagFilter
set opt(minspeed) 0.2 ;#minimum speed of node
set opt(maxspeed) 3 ;#maximum speed of node
set opt(speed) 0.5 ;#speed of node
set opt(position_update_interval) 0.3 ;# the length of period to update node's position
set opt(packet_size) 50 ;#50 bytes
set opt(routing_control_packet_size) 20 ;#bytes
set opt(ifqlen) 500 ;# max queue length in if
set opt(nn) 401 ;# number of nodes
set opt(x) 3000 ;# X dimension of the topography
set opt(y) 3000 ;# Y dimension of the topography
set opt(z) 1000
set opt(seed) 11
set opt(stop) 5000 ;# simulation time
set opt(prestop) 4990 ;# time to prepare to stop
set opt(tr) "test.tr" ;# trace file
set opt(datafile) "test.data"
set opt(nam) "test.nam" ;# nam file
set opt(adhocRouting) Vectorbasedforward
set opt(width) 100
set opt(interval) 10.0
set opt(range) 500 ;#range of each node in meters
if { $argc > 0 } {
set opt(seed) [lindex $argv 0]
set opt(nn) [lindex $argv 1]
set opt(datafile) [lindex $argv 2]
}
puts "the file name is $opt(datafile)"
puts "the sending interval is $opt(interval)"
# ==================================================================
LL set mindelay_ 50us
LL set delay_ 25us
LL set bandwidth_ 0 ;# not used
Queue/DropTail/PriQueue set Prefer_Routing_Protocols 1
# unity gain, omni-directional antennas
# set up the antennas to be centered in the node and 1.5 meters above it
Antenna/OmniAntenna set X_ 0
Antenna/OmniAntenna set Y_ 0
#Antenna/OmniAntenna set Z_ 1.5
Antenna/OmniAntenna set Z_ 0.05
Antenna/OmniAntenna set Gt_ 1.0
Antenna/OmniAntenna set Gr_ 1.0
Agent/Vectorbasedforward set hop_by_hop_ 0
Mac/UnderwaterMac set bit_rate_ 1.0e4 ;#10kbps
Mac/UnderwaterMac set encoding_efficiency_ 1
Mac/UnderwaterMac/BroadcastMac set packetheader_size_ 0 ;# #of bytes
# Initialize the SharedMedia interface with parameters to make
# it work like the 914MHz Lucent WaveLAN DSSS radio interface
Phy/UnderwaterPhy set CPThresh_ 10 ;#10.0
Phy/UnderwaterPhy set CSThresh_ 0 ;#1.559e-11
Phy/UnderwaterPhy set RXThresh_ 0 ;#3.652e-10
#Phy/WirelessPhy set Rb_ 2*1e6
Phy/UnderwaterPhy set Pt_ 0.2818
Phy/UnderwaterPhy set freq_ 25 ;# 25khz
Phy/UnderwaterPhy set K_ 2.0 ;# spherical spreading
# Initialize Global Variables
#
#set sink_ 1
set ns_ [new Simulator]
set topo [new Topography]
$topo load_cubicgrid $opt(x) $opt(y) $opt(z)
#$ns_ use-newtrace
set tracefd [open $opt(tr) w]
$ns_ trace-all $tracefd
set nf [open $opt(nam) w]
$ns_ namtrace-all-wireless $nf $opt(x) $opt(y)
set data [open $opt(datafile) a]
set total_number [expr $opt(nn)-1]
set god_ [create-god $opt(nn)]
$ns_ at 0.0 "$god_ set_filename $opt(datafile)"
set chan_1_ [new $opt(chan)]
global defaultRNG
$defaultRNG seed $opt(seed)
$ns_ node-config -adhocRouting $opt(adhocRouting) \
-llType $opt(ll) \
-macType $opt(mac) \
-ifqType $opt(ifq) \
-ifqLen $opt(ifqlen) \
-antType $opt(ant) \
-propType $opt(prop) \
-phyType $opt(netif) \
#-channelType $opt(chan) \
-agentTrace OFF \
-routerTrace OFF \
-macTrace ON\
-topoInstance $topo\
-energyModel $opt(energy)\
-txPower $opt(txpower)\
-rxPower $opt(rxpower)\
-initialEnergy $opt(initialenergy)\
-idlePower $opt(idlepower)\
-channel $chan_1_
puts "Width=$opt(width)"
#Set the Sink node
set node_(0) [ $ns_ node 0]
$node_(0) set sinkStatus_ 1
$god_ new_node $node_(0)
$node_(0) set X_ 2000
$node_(0) set Y_ 2000
$node_(0) set Z_ 1
$node_(0) set -cx 2000
$node_(0) set -cy 2000
$node_(0) set -cz 1
$node_(0) set passive 1
set rt [$node_(0) set ragent_]
$rt set control_packet_size $opt(routing_control_packet_size)
set a_(0) [new Agent/UWSink]
$ns_ attach-agent $node_(0) $a_(0)
$a_(0) attach-vectorbasedforward $opt(width)
$a_(0) cmd set-range $opt(range)
$a_(0) cmd set-target-x 2000
$a_(0) cmd set-target-y 2000
$a_(0) cmd set-target-z 1
$a_(0) cmd set-filename $opt(datafile)
$a_(0) cmd set-packetsize $opt(packet_size) ;# # of bytes
for { set i 1 } { $i<$opt(nn)-1 } {incr i } {
set node_($i) [$ns_ node $i]
$node_($i) set sinkStatus_ 1
$god_ new_node $node_($i)
$node_($i) set passive 1
set rt [$node_($i) set ragent_]
$rt set control_packet_size $opt(routing_control_packet_size)
$node_($i) set max_speed $opt(maxspeed)
$node_($i) set min_speed $opt(minspeed)
#$node_($i) set position_update_interval_ $opt(position_update_interval)
set a_($i) [new Agent/UWSink]
$ns_ attach-agent $node_($i) $a_($i)
$a_($i) attach-vectorbasedforward $opt(width)
$a_($i) cmd set-range $opt(range)
$a_($i) cmd set-target-x -20
$a_($i) cmd set-target-y -10
$a_($i) cmd set-target-z -20
$a_($i) cmd set-filename $opt(datafile)
$a_($i) cmd set-packetsize $opt(packet_size) ;
}
然后我从1-399给出我所有节点的位置,如下所示
$node_(1) set X_ 2136.167656
$node_(1) set Y_ 295.493365
$node_(1) set Z_ 584.859352
$node_(2) set X_ 38.448393
$node_(2) set Y_ 1111.699107
$node_(2) set Z_ 375.380589
$node_(3) set X_ 1937.160663
$node_(3) set Y_ 1171.175274
$node_(3) set Z_ 532.478177
..
$node_(399) set X_ 234.898387
$node_(399) set Y_ 1004.866538
$node_(399) set Z_ 985.310608
源节点和tcl文件的其余部分是:
#Set the source node
set node_($total_number) [$ns_ node $total_number]
$god_ new_node $node_($total_number)
$node_($total_number) set sinkStatus_ 1
$node_($total_number) set X_ 1650.370304
$node_($total_number) set Y_ 1166.115416
$node_($total_number) set Z_ 274.908599
$node_($total_number) set-cx 1650.370304
$node_($total_number) set-cy 1166.115416
$node_($total_number) set-cz 274.908599
set rt [$node_($total_number) set ragent_]
$rt set control_packet_size $opt(routing_control_packet_size)
set a_($total_number) [new Agent/UWSink]
$ns_ attach-agent $node_($total_number) $a_($total_number)
$a_($total_number) attach-vectorbasedforward $opt(width)
$a_($total_number) cmd set-range $opt(range)
$a_($total_number) cmd set-target-x 2000
$a_($total_number) cmd set-target-y 2000
$a_($total_number) cmd set-target-z 1
$a_($total_number) cmd set-filename $opt(datafile)
$a_($total_number) cmd set-packetsize $opt(packet_size) ;# # of bytes
set start_time 1.33
for { set j 1 } { $i<$opt(nn)-1 } {incr j } {
$a_($j) set data_rate_ [expr 1.0/$opt(interval)]
$ns_ at $start_time "$a_($j) cbr-start"
set start_time [expr $start_time+0.5 ]
$ns_ at $opt(stop).001 "$a_($j) terminate"
}
# make nam workable
set node_size 10
for {set k 0} { $k<$opt(nn)} {incr k} {
$ns_ initial_node_pos $node_($k) $node_size
}
set opt(stop2) [expr $opt(stop)+200]
puts "Node $total_number is sending first!!"
#$ns_ at 1.33 "$a_($total_number) cbr-start"
#$ns_ at $opt(stop).001 "$a_($total_number) terminate"
$ns_ at $opt(stop2).002 "$a_(0) terminate"
$ns_ at $opt(stop2).003 "$god_ compute_energy"
$ns_ at $opt(stop2).004 "$ns_ nam-end-wireless $opt(stop)"
$ns_ at $opt(stop2).005 "puts \"NS EXISTING...\"; $ns_ halt"
puts $data "New simulation...."
puts $data "nodes = $opt(nn), maxspeed = $opt(maxspeed), minspeed = $opt(minspeed), random_seed = $opt(seed), sending_interval_=$opt(interval), width=$opt(width)"
puts $data "x= $opt(x) y= $opt(y) z= $opt(z)"
close $data
puts "starting Simulation..."
$ns_ run