2011年12月20日 星期二

Ubuntu不要升到11.10

今天手癢把系統升級到11.10,執行nam的時候出現以下錯誤訊息:
nam:

[code omitted because of length]

: version conflict for package "Tcl": have 8.5.10, need exactly 8.4

    while executing

"package require -exact Tcl 8.4"

老實說我找了好幾篇解決方案,講的都是同一招,而且我還看不懂,擷取其中最後一段:
OK, you have the library, so your executable is not looking in the right place for
 it. To list the libraries an executable needs, run the command: ldd executable
Look at the tcl8.4 in the list -- should not have an explicit location, just a name
, so it would get picked up from a normal library search. If it has an explicit loc
ation, and the location does not have the library, put the link there to the tcl8,4.

  If you installed the executable from an Ubuntu package, then report as a bug. If 
you downloaded from a ramdom location on the internet, then this is the sort of pro
blem you'd expect. You can rebuild it yourself, or add the links to your system to 
make these sort of things work. 

不懂其中ldd是什麼指令,還有executable是代表什麼意思,所以就先不要升級吧!

2011年12月1日 星期四

node.sh

#!/bin/bash
stop=1
#####################################################
#             #
# Collecting information       #
#             #
#####################################################
echo 'Set the node-edge file name without extensions:'
read filename
echo "Filename set:$filename"
echo "Set map size "
echo "Set column(x):"
read x
echo "Set row(y):"
read y
echo "Set the length of raod"
read length

#####################################################
#          #
# Producing road network       #
#          #
#####################################################
echo "<nodes>" > $filename".nod.xml"
echo "<edges>" > $filename".edg.xml"
echo "<edges>" > $filename".side.edg"
node=0
edge=0
side=0
 for((i=0;i<y;i++))
 do
  for((j=0;j<x;j++))
  do
   if test $i -eq 0 && test $j -lt $((x-1));then
    type='priority a'
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+1))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+1))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$((node+1))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$((node+1))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
    if test $j -eq 0;then
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    else
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    fi
    edge=$((edge+1))
    if test $j -eq 0;then
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    else
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    fi
    edge=$((edge+1))
   elif test $i -eq $((y-1)) && test $j -lt $((x-1));then
    type='priority b'
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+1))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+1))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$((node+1))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$((node+1))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
   elif test $j -eq 0 && test $i -lt $((y-1));then
    type='priority c'
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+1))'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$((node+1))'" to="node'$node'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
   elif test $j -eq $((x-1)) && test $i -lt $((y-1));then
    type='priority d'
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
   elif test $i -eq $((y-1)) && test $j -eq $((x-1));then
    type='priority e'
   else
    type='traffic_light'
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+1))'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$((node+1))'" to="node'$node'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    edge=$((edge+1))
   fi
   echo '<node id="node'$node'" x="'$((j*length+5))'" y="'$((i*length+5))'" type="'$type'" />' >> $filename".nod.xml"
   node=$((node+1))
  done
 done
#done
echo "</nodes>" >> $filename".nod.xml"
echo "</edges>" >> $filename".edg.xml"
echo "</edges>" >> $filename".side.edg"
echo "$filename.nod.xml $filename.edg.xml SAVED!"
#####################################################
#          #
# Convert to net.xml       #
#          #
#####################################################
echo "Convert to net.xml"
netconvert -e $filename".edg.xml" -n $filename".nod.xml" -o $filename".tmp" -v --offset.disable-normalization
echo "Correcting Traffice light phase"
sed -f erase_tls.sed $filename.tmp > $filename.net.xml
rm $filename.tmp
echo $filename".net.xml SAVED!"
netconvert -e $filename".side.edg" -n $filename".nod.xml" -o $filename".side.net" --offset.disable-normalization
#####################################################
#          #
# Create trip file       #
#          #
#####################################################
echo "Set the simulation time(in second)"
read endtime
echo "Simulate from 0s to "$endtime"s."
echo "Create trip file"
~/Dropbox/Graduation/NS2Simulation/sumo-0.13.0/tools/trip/randomTrips.py -n $filename".side.net" -o $filename".trip.xml" -s 19 -b 0 -e $endtime
duarouter  -n $filename".net.xml" -t $filename".trip.xml" -o $filename".rou.xml" -v
echo "Create sumo.tr"
sumo -v -n $filename".net.xml" -r $filename".rou.xml" --netstate-dump $filename".sumo.tr" --vehroute-output $filename".vrou.xml" -b 1 -e $endtime
echo "Set the intensity of viehicles:"
read p
echo "Create mobility tcl file"
java -jar ~/Dropbox/Graduation/NS2Simulation/sumo-0.13.0/tools/traceExporter/traceExporter.jar ns2 -n $filename".net.xml" -t $filename".sumo.tr" -a $filename".act.tcl" -m $filename".mob.tcl" -c $filename".cfg.tcl" -b 1 -e $endtime -p $p
~/Dropbox/Graduation/NS2Simulation/sumo-0.13.0/tools/route/routecheck.py -n $filename".net.xml" $filename".rou.xml" -v
mkdir $filename/
mv $filename.* $filename/
# mv $filename.*.tcl $filename.net.xml $filename.side.net $filename/
# rm $filename.*

用指令使用 SUMO

sumo是用來模擬都市道路的程式,目前最新版本是0.13.1,可以到這邊下載SUMO

支援的平台有windows、linux、Mac等等,我在mac上是成功安裝0.13.0,目前還沒有打算要換成新版,感覺差異不是很大。

通常sumo都會搭配MOVE的圖形化介面使用,但這對於需要大量產生地圖檔的人很不友善,移動滑鼠的時間就超過實際產生地圖的時間了,在這幾個月找了很多文章還有本身附的說明,終於找到可以使用指令產生地圖的方法了

首先要先產生nod.xml跟edg.xml,也就是路口與道路的設定檔,以下範例是我用來產生一般方格道路,只有十字路口有紅綠燈,外環道路沒有燈號:



node=0
edge=0
side=0
 for((i=0;i<y;i++))
 do
  for((j=0;j<x;j++))
  do
   if test $i -eq 0 && test $j -lt $((x-1));then
    type='priority a'
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+1))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+1))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$((node+1))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$((node+1))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
    if test $j -eq 0;then
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    else
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    fi
    edge=$((edge+1))
    if test $j -eq 0;then
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    else
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    fi
    edge=$((edge+1))
   elif test $i -eq $((y-1)) && test $j -lt $((x-1));then
    type='priority b'
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+1))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+1))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$((node+1))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$((node+1))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
   elif test $j -eq 0 && test $i -lt $((y-1));then
    type='priority c'
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+1))'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$((node+1))'" to="node'$node'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
   elif test $j -eq $((x-1)) && test $i -lt $((y-1));then
    type='priority d'
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".edg.xml"
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="2" speed="13.88" />' >> $filename".side.edg"
    edge=$((edge+1))
   elif test $i -eq $((y-1)) && test $j -eq $((x-1));then
    type='priority e'
   else
    type='traffic_light'
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+1))'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$((node+1))'" to="node'$node'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$node'" to="node'$((node+x))'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    edge=$((edge+1))
    echo '<edge id="edge'$edge'" from="node'$((node+x))'" to="node'$node'" priority="75" numLanes="1" speed="13.88" />' >> $filename".edg.xml"
    edge=$((edge+1))
   fi
   echo '<node id="node'$node'" x="'$((j*length+5))'" y="'$((i*length+5))'" type="'$type'" />' >> $filename".nod.xml"
   node=$((node+1))
  done
 done
#done
echo "</nodes>" >> $filename".nod.xml"
echo "</edges>" >> $filename".edg.xml"
echo "</edges>" >> $filename".side.edg"
echo "$filename.nod.xml $filename.edg.xml SAVED!"


再來使用netconvert 結合nod.xml和edg.xml產生net.xml 地圖檔,這是用來產生路徑的根據,所以如果需要控制車輛起始與結束位置,可以從這邊動手腳。

接下來使用tools裡面的randomTrips.py來產生trip檔,好用來讓duarouter產生路徑檔rou.xml