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 表示這是內部邊,用於交叉口邏輯,不是普通道路段。 |
子元素:
<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>
表示從J0
到J1
的道路段:- ID 為
E0
。 - 包含一條車道(
E0_0
),最大速度為 13.89 m/s,長度為 78.21 米。
- ID 為
2. <junction>
作用:
<junction>
表示交叉點(junction),是道路段(<edge>
)之間的連線點。- 它是網路中的節點,所有
<edge>
的from
和to
都必須引用某個<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
)。
- ID 為
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> |
表示道路段 | id 、from 、to 、priority |
定義路網中的道路,連線兩個節點(交叉點)。 |
<junction> |
表示交叉點或節點 | id 、type 、x /y 、incLanes 、shape |
定義道路的交匯點,連線多個邊。 |
<connection> |
表示道路段之間的連線關係 | from 、to 、fromLane 、toLane 、via |
定義從一個邊的車道到另一個邊的車道的路徑和轉向邏輯。 |
透過這三個元素的組合,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.xml
和 rou.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
的連線關係自動找到一條從E0
到E1
的路徑。
- 定義了一輛車(
- 定義車輛如何利用路網中的連線關係來選擇行駛方向,即:
-
重點:行駛方向
- 在沒有明確的
route
或trip
定義時,車輛無法知道行駛路徑,因為它需要明確的指令來選擇方向。
- 在沒有明確的
兩者的關係:連線 vs 方向
檔案 | 定義內容 | 重點 |
---|---|---|
net.xml |
路網結構、道路和交叉口的連線關係 | 定義網路連線關係(哪裡能到哪裡 )。車輛依賴它找到可能的路徑。 |
rou.xml |
交通流、車輛路徑和行駛方向 | 定義行駛方向(車輛從哪裡來,去哪裡 )。依賴 net.xml 中的連線實現。 |
關係說明:
net.xml
提供所有可能的連線關係,為車輛提供基礎路網。- 例如,在
net.xml
中,E0
和E1
是相連的。
- 例如,在
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
(從J0
到J1
)和E1
(從J1
到J2
)這兩條邊。 - 透過
<connection>
定義了E0
和E1
的連線關係。 - 模擬中,車輛可以從
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_0
(index=0
):- 沿
shape
定義的軌跡,無偏移。
- 沿
E1_1
(index=1
):- 相對於
shape
向左偏移 3.2 米。
- 相對於
視覺效果:
- SUMO 會在圖形介面中正確地將車道分開,而不會重疊。
3. 形狀的起始位置 vs 偏移
-
shape
定義的座標:- 是整條道路中心線的幾何路徑。
- 它不會定義每條車道的實際起始位置,車道的幾何路徑由
shape
和index
結合計算。
-
車道的起始座標:
- SUMO 自動根據
shape
和偏移量計算車道的實際位置,確保每條車道都有獨立的幾何中心線。
- SUMO 自動根據
4. 何時需要不同的 shape
?
如果車道的形狀在幾何上確實不同(例如,轉彎車道或交叉口分流),需要定義不同的 shape
:
- 例如,在交叉口中:
- 左轉車道和直行車道的軌跡可能不同。
- 此時可以為每條車道定義獨立的
shape
,以反映其不同的幾何形狀。
5. 總結
- 即使
shape
相同,不同車道透過索引偏移邏輯分佈開,不會重疊。 shape
只是道路中心線的定義,而車道的幾何路徑還取決於車道寬度和索引偏移。- 如果需要明確區分車道幾何路徑,可以為每條車道定義不同的
shape
,但這通常只在交叉口或特殊場景中需要。