Sumo-hello world對應的gui及檔案操作

GraphL發表於2024-11-21

net.xml junctions + edge

<?xml version="1.0" encoding="UTF-8"?>

<!-- generated on 2024-11-20 15:25:06 by Eclipse SUMO netedit Version 1.21.0
<neteditConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/neteditConfiguration.xsd">

    <input>
        <sumo-net-file value="C:\Program Files (x86)\Eclipse\Sumo\tools\learn\2\hello.net.xml"/>
    </input>

    <output>
        <output-file value="C:\Program Files (x86)\Eclipse\Sumo\tools\learn\2\hello.net.xml"/>
    </output>

    <processing>
        <offset.disable-normalization value="true"/>
    </processing>

    <junctions>
        <no-turnarounds value="true"/>
    </junctions>

    <netedit>
        <new-network value="false"/>
    </netedit>

</neteditConfiguration>
-->

<net version="1.20" junctionCornerDetail="5" limitTurnSpeed="5.50" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/net_file.xsd">

    <location netOffset="0.00,0.00" convBoundary="-90.11,-10.19,49.47,23.03" origBoundary="10000000000.00,10000000000.00,-10000000000.00,-10000000000.00" projParameter="!"/>

    <edge id=":J1_0" function="internal">
        <lane id=":J1_0_0" index="0" speed="4.14" length="1.36" shape="-16.89,21.00 -16.55,21.10 -16.22,21.12 -15.89,21.07 -15.57,20.95"/>
    </edge>

    <edge id="E0" from="J0" to="J1" priority="-1">
        <lane id="E0_0" index="0" speed="13.89" length="78.21" shape="-89.51,-8.02 -16.89,21.00"/>
    </edge>
    <edge id="E1" from="J1" to="J2" priority="-1">
        <lane id="E1_0" index="0" speed="13.89" length="72.09" shape="-15.57,20.95 48.75,-11.62"/>
    </edge>

    <junction id="J0" type="dead_end" x="-90.11" y="-6.54" incLanes="" intLanes="" shape="-90.11,-6.54 -88.92,-9.51"/>
    <junction id="J1" type="priority" x="-16.14" y="23.03" incLanes="E0_0" intLanes=":J1_0_0" shape="-14.85,22.37 -16.29,19.52 -17.48,22.49 -16.59,22.72 -16.15,22.73 -15.71,22.68 -15.28,22.56">
        <request index="0" response="0" foes="0" cont="0"/>
    </junction>
    <junction id="J2" type="dead_end" x="49.47" y="-10.19" incLanes="E1_0" intLanes="" shape="48.02,-13.04 49.47,-10.19"/>

    <connection from="E0" to="E1" fromLane="0" toLane="0" via=":J1_0_0" dir="r" state="M"/>

    <connection from=":J1_0" to="E1" fromLane="0" toLane="0" dir="r" state="M"/>

</net>

以下是對 SUMO<edge><junction><connection> 元素的詳細整理與說明:


1. <edge>

作用:

  • <edge> 表示道路段(edge),是交通網路中的基本單位。
  • 它連線兩個節點(<junction>),幷包含有關道路幾何資訊、車道資訊以及流量規則。

核心屬性:

屬性名 資料型別 描述
id string 唯一識別符號,用於標識這條道路段(如 E0)。
from string 起點節點的 ID(<junction> ID)。
to string 終點節點的 ID(<junction> ID)。
priority int 優先順序(用於控制交叉口車輛流量優先順序)。
function string 可選值,如 internal 表示這是內部邊,用於交叉口邏輯,不是普通道路段。

子元素:

  1. <lane>:
    • 描述道路上的每一條車道的資訊,包括速度限制、長度和形狀等。
    • 關鍵屬性:
      • id:車道的唯一識別符號。
      • index:車道的編號(從右到左,從 0 開始)。
      • speed:車道的最大速度限制(單位:m/s)。
      • shape:車道的幾何形狀(由多個 x,y 座標點連線)。

示例:

<edge id="E0" from="J0" to="J1" priority="1">
    <lane id="E0_0" index="0" speed="13.89" length="78.21" shape="-89.51,-8.02 -16.89,21.00"/>
</edge>
  • <edge> 表示從 J0J1 的道路段:
    • ID 為 E0
    • 包含一條車道(E0_0),最大速度為 13.89 m/s,長度為 78.21 米。

2. <junction>

作用:

  • <junction> 表示交叉點(junction),是道路段(<edge>)之間的連線點。
  • 它是網路中的節點,所有 <edge>fromto 都必須引用某個 <junction>

核心屬性:

屬性名 資料型別 描述
id string 唯一識別符號,用於標識交叉點。
type string 交叉點的型別:priority(優先交叉口)、traffic_light(訊號燈交叉口)、dead_end(死路)。
x/y float 交叉點的中心座標(以米為單位)。
incLanes string 進入交叉點的所有車道(以空格分隔的車道 ID 列表)。
intLanes string 交叉點內部的車道(內部邊)。
shape string 交叉點的幾何邊界,由一組 x,y 座標點定義。

子元素:

  • <request>:
    • 描述進入交叉點的優先權規則(例如,誰先透過)。
    • 常用於複雜交叉口的優先權或訊號燈邏輯。

示例:

<junction id="J1" type="priority" x="-16.14" y="23.03" incLanes="E0_0" intLanes=":J1_0_0" shape="-14.85,22.37 -16.29,19.52">
    <request index="0" response="0" foes="0" cont="0"/>
</junction>
  • <junction> 表示一個優先交叉點:
    • ID 為 J1
    • 位置座標為 x=-16.14, y=23.03
    • 包含一個進入車道(E0_0)和一個內部車道(:J1_0_0)。

3. <connection>

作用:

  • <connection> 表示道路段(edge)之間的連線關係,用於定義從一個邊的某條車道到另一個邊的某條車道的路徑。
  • 是描述路網邏輯的關鍵,決定了車輛如何在網路中移動。

核心屬性:

屬性名 資料型別 描述
from string 來源邊的 ID(<edge> ID)。
to string 目標邊的 ID(<edge> ID)。
fromLane int 來源車道的索引(從右到左,從 0 開始)。
toLane int 目標車道的索引(從右到左,從 0 開始)。
via string 連線所經過的內部邊(internal edge ID)。
dir string 轉向方向(r 表示右轉,l 表示左轉,s 表示直行)。
state string 連線狀態(通常用於訊號燈控制,如 M 表示允許通行)。

示例:

<connection from="E0" to="E1" fromLane="0" toLane="0" via=":J1_0_0" dir="r" state="M"/>
  • <connection> 表示:
    • E0 的第 0 車道連線到 E1 的第 0 車道。
    • 途經內部邊 :J1_0_0
    • 轉向方向為右轉(dir="r")。
    • 狀態為允許通行(state="M")。

總結對比:

元素 含義 關鍵屬性 作用
<edge> 表示道路段 idfromtopriority 定義路網中的道路,連線兩個節點(交叉點)。
<junction> 表示交叉點或節點 idtypex/yincLanesshape 定義道路的交匯點,連線多個邊。
<connection> 表示道路段之間的連線關係 fromtofromLanetoLanevia 定義從一個邊的車道到另一個邊的車道的路徑和轉向邏輯。

透過這三個元素的組合,SUMO 能夠完整定義路網的結構和邏輯,包括道路、交叉口以及車輛行駛路徑的連線規則。

rou.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- generated on 2024-11-20 16:33:40 by Eclipse SUMO netedit Version 1.21.0
-->

<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/routes_file.xsd">
    <!-- Routes -->
    <route id="r_0" edges="E0 E1"/>
    <!-- Vehicles, persons and containers (sorted by depart) -->
    <vehicle id="v_0" depart="0.00" route="r_0"/>
    <vehicle id="v_1" depart="0.00" route="r_0"/>
    <vehicle id="v_2" depart="0.00" route="r_0"/>
    <vehicle id="v_3" depart="0.00" route="r_0"/>
    <vehicle id="v_4" depart="0.00" route="r_0"/>
    <vehicle id="v_5" depart="0.00" route="r_0"/>
    <vehicle id="v_6" depart="0.00" route="r_0"/>
    <vehicle id="v_7" depart="0.00" route="r_0"/>
    <vehicle id="v_8" depart="0.00" route="r_0"/>
    <vehicle id="v_9" depart="0.00" route="r_0"/>
    <vehicle id="v_10" depart="0.00" route="r_0"/>
</routes>

上面兩個檔案之間的區別

是的,你的理解非常準確!以下是更詳細的闡述,進一步明確 net.xmlrou.xml 的區別與用途:


1. net.xml 的核心:定義連線關係

  • 功能:

    • net.xml 是用來定義整個交通網路的結構和連線關係的。
    • 它描述了路網中的物理元素(道路、交叉口)及其之間的連線邏輯,包括:
      • 哪些道路之間有連線。
      • 每條道路的車道數量、長度和速度限制。
      • 每個交叉口的幾何形狀、優先權規則或訊號燈邏輯。
    • 它是整個交通模擬的基礎,沒有它就無法執行模擬。
  • 核心作用:

    • 定義了網路中所有道路的連線性,即:
      • 從哪裡可以去到哪裡
      • 車道如何連線,如從哪條車道到達哪條車道。
      • 交叉口的內部路徑(例如透過 internal edges 實現轉向的連線)。
  • 重點:連線關係

    • 例如:
      <connection from="E0" to="E1" fromLane="0" toLane="0" via=":J1_0_0"/>
      
      • 定義了 E0 的第 0 車道連線到 E1 的第 0 車道,透過交叉口內部邊 :J1_0_0 實現。
    • 所有可能的連線關係都必須在 net.xml 中預定義,模擬中的車輛只能基於這些連線關係行駛。

2. rou.xml 的核心:定義行駛方向

  • 功能:

    • rou.xml 是用來定義交通流和行駛方向的。
    • 它描述了車輛如何在 net.xml 定義的網路中執行,包括:
      • 車輛的出發時間。
      • 車輛的起點和終點。
      • 車輛的行駛路線(由 edges 序列組成)。
  • 核心作用:

    • 定義車輛如何利用路網中的連線關係來選擇行駛方向,即:
      • 車輛應該從哪裡來,去到哪裡。
      • 車輛在路網上行駛的具體路線是怎樣的(透過哪些 edges)。
    • 例如:
      <trip id="t_0" depart="0.00" from="E0" to="E1"/>
      
      • 定義了一輛車(t_0),從 E0 出發,到達 E1
      • 系統會根據 net.xml 的連線關係自動找到一條從 E0E1 的路徑。
  • 重點:行駛方向

    • 在沒有明確的 routetrip 定義時,車輛無法知道行駛路徑,因為它需要明確的指令來選擇方向。

兩者的關係:連線 vs 方向

檔案 定義內容 重點
net.xml 路網結構、道路和交叉口的連線關係 定義網路連線關係哪裡能到哪裡)。車輛依賴它找到可能的路徑。
rou.xml 交通流、車輛路徑和行駛方向 定義行駛方向車輛從哪裡來,去哪裡)。依賴 net.xml 中的連線實現。

關係說明:

  • net.xml 提供所有可能的連線關係,為車輛提供基礎路網。
    • 例如,在 net.xml 中,E0E1 是相連的。
  • rou.xml 定義具體的行駛路徑,指示車輛如何利用這些連線。
    • 例如,在 rou.xml 中,車輛會選擇從 E0 到達 E1

示例解析

1. net.xml 示例:定義連線

<edge id="E0" from="J0" to="J1" priority="1">
    <lane id="E0_0" index="0" speed="13.89" length="78.21" shape="-89.51,-8.02 -16.89,21.00"/>
</edge>
<edge id="E1" from="J1" to="J2" priority="1">
    <lane id="E1_0" index="0" speed="13.89" length="72.09" shape="-15.57,20.95 48.75,-11.62"/>
</edge>
<connection from="E0" to="E1" fromLane="0" toLane="0"/>
  • 描述內容:
    • 定義了 E0(從 J0J1)和 E1(從 J1J2)這兩條邊。
    • 透過 <connection> 定義了 E0E1 的連線關係。
    • 模擬中,車輛可以從 E0 的車道駛入 E1 的車道。

2. rou.xml 示例:定義行駛方向

<routes>
    <route id="r_0" edges="E0 E1"/>
    <trip id="t_0" depart="0.00" from="E0" to="E1"/>
</routes>
  • 描述內容:
    • 定義了 r_0 這條行駛路線,車輛從 E0 行駛到 E1
    • trip 定義了一輛車(t_0),出發時間為 0 秒,行駛路徑為 E0 -> E1

總結:連線關係 vs 行駛方向

  • net.xml 是關於“基礎設施”的檔案:

    • 描述了所有道路和車道的連線關係,定義了車輛在網路中可能行駛的路徑。
    • 模擬不會自動生成車輛的行駛路徑。
  • rou.xml 是關於“車輛動態”的檔案:

    • 定義了車輛如何使用這些連線關係,描述了行駛方向和交通流動態。
    • 它依賴於 net.xml 提供的連線資訊。

因此,可以簡單理解為:

  • net.xml 描述“連線關係”——哪裡可以去哪裡。
  • rou.xml 描述“行駛方向”——車輛從哪裡來,去哪裡,以及怎麼走。

關於相同shape與不同shape的問題

SUMO 的 shape 定義了車道的中心線,而車道寬度和位置由車道索引(index)和 SUMO 的渲染邏輯決定,因此即使 shape 相同,車道也不會重合。

以下是詳細解釋:


1. shape 的作用

  • shape 定義了車道的中心線:

    • 它指定了一條曲線(由一組座標點組成),表示車道的幾何路徑。
    • 所有車輛都沿著這條曲線的軌跡移動。
  • 車道的寬度由 SUMO 預設設定:

    • 在 SUMO 中,車道有預設寬度(通常為 3.2 米,可透過選項調整)。
    • 每條車道相對於中心線會偏移一定的距離,偏移量由車道的 index 和預設寬度決定。

2. 為什麼不會重合?

即使 shape 相同,車道透過 車道索引(index 的偏移計算邏輯分佈開來。

SUMO 的偏移邏輯:

  • 每個車道的中心線會以預設寬度 向左或向右偏移
  • 偏移量 = 車道寬度 × 車道索引
    • 車道索引 0 不偏移,沿 shape 直接繪製。
    • 車道索引 1 向左偏移一條車道寬度。
    • 車道索引 -1(如果有): 向右偏移一條車道寬度。

示例:

假設車道寬度為 3.2 米E1 有兩個車道,shape 均為:

shape="-15.57,20.95 48.75,-11.62"
  • E1_0index=0):
    • 沿 shape 定義的軌跡,無偏移。
  • E1_1index=1):
    • 相對於 shape 向左偏移 3.2 米。

視覺效果:

  • SUMO 會在圖形介面中正確地將車道分開,而不會重疊。

3. 形狀的起始位置 vs 偏移

  • shape 定義的座標:

    • 是整條道路中心線的幾何路徑。
    • 它不會定義每條車道的實際起始位置,車道的幾何路徑由 shapeindex 結合計算。
  • 車道的起始座標:

    • SUMO 自動根據 shape 和偏移量計算車道的實際位置,確保每條車道都有獨立的幾何中心線。

4. 何時需要不同的 shape

如果車道的形狀在幾何上確實不同(例如,轉彎車道或交叉口分流),需要定義不同的 shape

  • 例如,在交叉口中:
    • 左轉車道和直行車道的軌跡可能不同。
  • 此時可以為每條車道定義獨立的 shape,以反映其不同的幾何形狀。

5. 總結

  • 即使 shape 相同,不同車道透過索引偏移邏輯分佈開,不會重疊。
  • shape 只是道路中心線的定義,而車道的幾何路徑還取決於車道寬度和索引偏移。
  • 如果需要明確區分車道幾何路徑,可以為每條車道定義不同的 shape,但這通常只在交叉口或特殊場景中需要。

相關文章