Tutorials
https://sumo.dlr.de/docs/Tutorials/index.html
net.xml (道路設定) 和 route.xml (車型別設定 + 車流量設定) + .sumocfg (綜合前兩個xml檔案)
十字路口的例子
https://sumo.dlr.de/docs/Networks/PlainXML.html
Tools
https://sumo.dlr.de/docs/Tools/#tools_by_category
Documentation
https://sumo.dlr.de/docs/index.html
Traffic Light
交通燈的屬性,動態 or 靜態
以下是關於 tlType
屬性中兩種訊號燈型別(static
和 actuated
)的對比表格:
屬性型別 | static |
actuated |
---|---|---|
含義 | 每個訊號燈相位的持續時間是固定的,不會根據交通流量進行調整。 | 綠燈相位的持續時間會根據交通流量資料(如感應線圈檢測)動態調整。 |
適用場景 | - 適用於車流量固定、規律性強的路口,例如每天早晚高峰規律明顯的路口。 - 適合簡單場景,或無需動態控制的情況。 |
- 適用於車流量不穩定、動態變化較大的路口,例如繁忙的城市交叉路口。 - 適合需要更靈活的流量控制以提高通行效率的場景。 |
響應交通狀況的能力 | 無:相位時間是靜態的,不會根據交通流量變化進行調整。 | 有:根據實時交通流量檢測結果(如車輛數量),可以延長或縮短綠燈時間以最佳化交通流。 |
技術要求 | - 不需要額外裝置或感應器,配置簡單,易於實現和維護。 | - 需要配備感應線圈或其他交通流量檢測裝置(例如車輛檢測器),配置較複雜。 |
效率 | - 如果交通流量變化不大,效率較高。 - 如果流量波動較大,可能會導致擁堵或長時間空閒綠燈,效率降低。 |
- 能根據交通流量動態調整,減少無效等待時間,提升路口通行效率。 |
典型場景 | - 鄉村或小型城鎮的簡單路口,交通模式穩定且可預測。 | - 繁忙的城市路口或動態交通場景,例如高峰時段的多向交匯路口,或流量隨機變化的施工路段。 |
詳細補充
-
static
示例:- 固定的訊號燈相位,時間不變,例如:
<phase duration="30" state="GrGr"/> <!-- 東西向綠燈 30 秒 --> <phase duration="30" state="rGrG"/> <!-- 南北向綠燈 30 秒 -->
- 不管車流量是多少,每個方向的綠燈都嚴格執行預設時間。
- 固定的訊號燈相位,時間不變,例如:
-
actuated
示例:- 動態控制的訊號燈相位,例如:
<actuated> <!-- 使用感應器動態調整綠燈時間 --> <phase minDur="10" maxDur="60" state="GrGr"/> <!-- 東西向綠燈,根據流量調整在 10 到 60 秒之間 --> <phase minDur="10" maxDur="60" state="rGrG"/> <!-- 南北向綠燈,根據流量調整在 10 到 60 秒之間 --> </actuated>
- 如果檢測到東向車流量大,則延長東西向綠燈時間;如果車少,則提前切換到南北方向。
- 動態控制的訊號燈相位,例如:
如何選擇?
-
使用
static
的場景:- 流量較小且規律性強的區域。
- 不需要動態最佳化交通流量的地方。
- 預算有限,無法安裝流量檢測裝置。
-
使用
actuated
的場景:- 交通流量動態變化大,需要實時調整訊號燈時間。
- 目標是提高通行效率,減少等待時間。
- 路口具備安裝感應器或流量檢測裝置的條件。
交通燈的屬性,相位控制
是的,你的理解是正確的!前面的 opposites
和 後面的 incoming
、alternateOneWay
的核心區別就在於:
- 前面的
opposites
:可能存在共享的綠燈相位,多個方向(通常是相對方向)同時獲得綠燈,可以有一些衝突。 - 後面的
incoming
和alternateOneWay
:是嚴格的單方向綠燈控制,確保每次只有一個方向的交通流動,沒有共享的綠燈。
具體對比
佈局模式 | 是否共享綠燈相位 | 控制粒度 | 是否允許多個方向同時通行 | 典型場景 |
---|---|---|---|---|
opposites |
是 | 相對方向共享綠燈 | 允許(有衝突可能) | 簡單四向交叉路口,低車流量區域。 |
incoming |
否 | 每個方向單獨相位 | 不允許 | 複雜交叉路口,防止衝突,需要精確控制每個方向車流。 |
alternateOneWay |
否 | 每個方向單獨相位(帶全紅相位) | 不允許 | 窄路、單車道、施工區域等需要交替通行的場景。 |
前面的 opposites
特點
-
共享綠燈相位:
- 左右相對方向(如東向和西向,北向和南向)通常會共享一個綠燈相位。
- 左轉車輛可能會與對向直行車輛發生衝突,要求左轉車輛主動避讓(除非專門為左轉車道分配了相位)。
-
多個方向同時通行:
- 對向方向共享綠燈時,不需要等待另一個方向完全結束,整體通行效率更高。
- 但安全性取決於駕駛員的判斷(如左轉避讓對向直行車)。
後面的 incoming
和 alternateOneWay
特點
-
沒有共享綠燈:
- 每個方向的綠燈完全獨立,其他方向必須為紅燈,不存在衝突。
-
控制粒度更精細:
incoming
:每條進入道路有單獨的綠燈控制。alternateOneWay
:更進一步,確保當前方向車輛完全清空後(透過全紅相位),再允許下一方向通行。
總結
前面模式 (opposites) 的優劣:
- 優點:
- 適用於簡單場景,通行效率較高。
- 方向間共享綠燈,相位數少,設計簡單。
- 缺點:
- 存在潛在衝突(如左轉與對向直行衝突),安全性稍低。
- 不適合車流量大的複雜路口。
後面模式 (incoming 和 alternateOneWay) 的優劣:
- 優點:
- 嚴格避免方向衝突,安全性高。
- 適合複雜路口、狹窄路段或特殊場景。
- 缺點:
- 整體通行效率降低(尤其是
alternateOneWay
需要全紅相位)。
- 整體通行效率降低(尤其是
如果將這三種模式放到實際應用中,選擇依據如下:
opposites
:適合常規、簡單的十字路口或低車流量區域。incoming
:適合複雜的多路口交匯或車流方向差異較大的路口。alternateOneWay
:適合單車道、狹窄區域或必須保證單方向通行的特殊場景。
Node的type,表示路口當中,不同方向車輛行駛的優先順序 (規則)
以下是 Node Types(節點型別) 引數的整理表格:
節點型別 | 描述 | 典型應用場景 |
---|---|---|
priority |
低優先順序邊的車輛需要等待高優先順序邊的車輛透過後再進入交叉路口。 | 簡單的優先順序路口,例如鄉村或小城鎮交叉路口。 |
traffic_light |
交叉口由交通訊號燈控制,透過優先規則避免衝突。 | 城市中的常規訊號燈路口。 |
right_before_left |
來自右側的車輛優先,左側車輛需要讓行(在左行網路中會自動翻轉為 left_before_right )。 |
常用於右行規則的國家,例如歐洲大部分國家。 |
left_before_right |
來自左側的車輛優先,右側車輛需要讓行(僅適用於某些特定地區,例如馬達加斯加)。 | 適用於特殊左行規則的地區。 |
unregulated |
路口完全不受控制,所有車輛自由通行,可能會發生碰撞(交叉口內不進行碰撞檢測,但交叉口外會檢測)。 | 無需規則的非正式路段,例如工地或非正式交匯點。 |
traffic_light_unregulated |
交叉口由訊號燈控制,但沒有進一步規則。如果訊號燈規劃不合理,可能會發生碰撞(交叉口內不檢測碰撞)。 | 訊號燈失效的交叉路口,或臨時交通燈配置。 |
priority_stop |
類似優先順序路口,但次要道路的車輛需要完全停下後再通行。 | 小型十字路口,通常用於低流量的次要路段。 |
allway_stop |
所有進入交叉口的車輛都必須完全停下後通行,類似於 "全向停車路口(All-way stop)" 的規則。 | 北美常見的全向停車路口。 |
rail_signal |
路口由鐵路訊號燈控制,僅適用於鐵路。 | 鐵路和普通道路的交匯處,需要鐵路優先通行的場景。 |
zipper |
用於車道數減少的交匯點,車輛以“拉鍊式(Zipper-style)”方式合流。 | 合流區域,如多車道變為單車道的場景。 |
rail_crossing |
模擬鐵路道口,當火車接近時,會停止道路車輛以允許火車通行。 | 鐵路道口,火車優先的路段。 |
traffic_light_right_on_red |
訊號燈控制的路口,但右轉車輛在確保安全的情況下,可以在任何相位右轉(需要先停止觀察)。 | 美國和部分國家允許右轉車輛在紅燈時通行的路口。 |
dead_end |
沒有任何連線的節點型別,通常由系統自動分配,用於標識死衚衕。 | 死衚衕、沒有出口的終點區域。 |
總結
- 規則型節點(如
priority
、right_before_left
):適用於簡單規則交叉口。 - 訊號控制節點(如
traffic_light
、traffic_light_unregulated
):適用於需要訊號燈管理的複雜路口。 - 特殊節點(如
rail_signal
、zipper
、rail_crossing
):針對特定應用場景,如鐵路道口和合流區。 - 無控制節點(如
unregulated
):適用於沒有明確規則的特殊場景。 - 自動標識節點(如
dead_end
):用於標識沒有連線的區域。
Right-of-way作為邊優先順序的補充
是的,完全正確!如果兩個道路的 Node Type 都是 priority
(或者 priority_stop
),並且僅透過節點型別無法明確決定哪條道路具有更高優先順序時,會進一步依賴 Right-of-Way 中的 Edge Priority(邊優先順序) 來決定通行權。
總結邏輯
-
節點型別是基礎規則:
priority
:低優先順序車輛需要給高優先順序車輛讓行。priority_stop
:次要道路的車輛需要完全停下後再通行,但通行順序仍然由優先順序決定。
-
邊優先順序作為補充規則:
- 當多個方向都屬於同一節點型別時(如兩個
priority
或兩個priority_stop
),Right-of-Way 中的規則會進一步細化,尤其是透過 Edge Priority 決定。 - 邊優先順序的評估依據包括:
priority
(邊的優先順序屬性)。speed
(道路限速)。laneNumber
(車道數量)。
- 當多個方向都屬於同一節點型別時(如兩個
-
最終優先權的決定:
- 邊的優先順序值越高,通行權優先順序越高。
- 如果邊優先順序相同,則可能進一步評估車輛的行駛方向(如:直行優先於左轉)。
舉例說明
場景 1:兩個 priority
型別的邊
- 假設路口有兩條進入邊,節點型別都是
priority
。 - Edge 1:
priority
= 8- 限速 = 60 km/h
- 車道數 = 2
- Edge 2:
priority
= 5- 限速 = 40 km/h
- 車道數 = 1
- Right-of-Way 決策:
- Edge 1 的優先順序更高,因此車輛來自 Edge 1 的方向具有通行優先權。
- Edge 2 的車輛需要讓行。
場景 2:priority_stop
型別的邊
- 假設路口是一個全向停車路口,所有車輛都需要停車,但進入邊優先權不同。
- Edge 1:
priority
= 7- 限速 = 50 km/h
- Edge 2:
priority
= 7- 限速 = 50 km/h
- Right-of-Way 決策:
- 如果兩條邊的
priority
和其他屬性(如限速、車道數)完全相同,則進一步透過行駛方向評估:- 直行優先於左轉。
- 左轉需避讓對向直行車輛。
- 如果兩條邊的
總結
- Node Type 決定基礎規則:如
priority
定義“高優先順序先行”,priority_stop
定義“停車後通行”。 - Right-of-Way 決定更細節的優先權:
- 如果僅靠 Node Type 無法明確優先權,則透過邊的屬性(如 Edge Priority)進一步判斷。
- 邊的優先順序越高,車輛的通行權越高。
其他的規則
以下是對 Special Cases(特殊情況) 規則的詳細整理:
1. 轉彎優先規則(Turning Priority Road)
- 規則:
- 如果某條路被定義為優先通行的轉彎道路(turning priority road):
- 該道路的 所有進入邊(incoming edges) 和 離開邊(outgoing edges) 的優先順序值(
priority
)必須高於非優先道路的邊。
- 該道路的 所有進入邊(incoming edges) 和 離開邊(outgoing edges) 的優先順序值(
- 如果某條路被定義為優先通行的轉彎道路(turning priority road):
- 目的:
- 確保這條道路的流量優先透過,而其他方向的道路必須讓行。
2. 環島優先規則(Roundabouts)
- 規則:
- 環島內的道路邊(edges within the roundabout)始終優先於外部進入環島的道路邊(edges incoming from the outside)。
- 目的:
- 保護環島內部的流量,避免外部車輛進入環島時干擾內部交通。
3. 同一邊的車道合併規則(Lane Merging from the Same Edge)
- 規則:
- 當同一條道路的兩個車道需要合併到同一個目標車道時:
- 如果節點型別為
zipper
:- 兩條車道會對稱地反應,車輛按照“拉鍊式合併”的方式交替進入目標車道。
- 如果節點型別不是
zipper
:- 左車道具有優先權。
- 右車道需要讓行。
- 如果節點型別為
- 當同一條道路的兩個車道需要合併到同一個目標車道時:
- 目的:
- 確保車道合併的有序性:
- 在
zipper
場景下實現平等合併; - 在非
zipper
場景下優先左車道,符合常見交通規則。
- 在
- 確保車道合併的有序性:
總結規則表
場景 | 規則描述 | 優先方向 |
---|---|---|
轉彎優先道路 | 轉彎道路的所有進入邊和離開邊的 priority 值必須高於其他道路。 |
轉彎道路 |
環島優先 | 環島內部的邊優先,外部進入環島的邊必須讓行。 | 環島內部道路 |
車道合併(節點型別為 zipper ) |
兩條車道對稱反應,車輛以拉鍊式方式交替進入目標車道。 | 無優先,交替合併 |
車道合併(非 zipper ) |
左車道優先,右車道需要讓行。 | 左車道優先 |
fringe 作為空間的劃分
是的,你的理解是正確的!可以將 fringe
屬性 看作是對網路空間的一種邏輯劃分,將整個網路劃分為 外部(outer) 和 內部(inner 和 default)。具體來說:
空間劃分的方式
-
外部空間(
outer
):- 定義:網路的邊界,表示與模擬網路範圍之外的現實世界道路直接連線的節點或交叉點。
- 作用:
- 用於表示交通進入或離開模擬區域的入口/出口。
- 通常是路徑生成(如起點或終點)時的重要參考點。
-
內部空間(
inner
和default
):inner
:- 表示內部的邊界節點,但連線的是優先順序較低或已被模擬網路移除的現實道路。
- 這些節點仍屬於模擬網路的一部分,但僅與次要道路相關。
default
:- 表示完全位於網路核心部分的節點,與外部或次要道路無直接聯絡。
- 通常是模擬網路的中間節點,用於描述內部交通流的路徑。
透過 fringe
屬性進行的邏輯劃分
空間型別 | 描述 | 使用場景 |
---|---|---|
外部(outer) | 表示網路的最外圍,與真實世界的外部道路連線。 | - 用於生成路徑的起點或終點。 - 模擬外部流量進入或離開模擬網路。 |
內部邊界(inner) | 表示網路內部的邊界,與次要道路(優先順序較低)或被移除的現實世界道路相連線。 | - 用於內部交通路徑生成,通常在需要模擬與次要道路的潛在連線時使用。 |
內部核心(default) | 表示網路的核心節點,與外部或次要道路無直接聯絡。 | - 僅用於模擬網路的內部路徑計算,例如描述區域內部交通流的移動。 |
舉例說明
-
現實世界對映到模擬網路的情況:
- 實際場景:
- 一個模擬網路表示某個城市區域,外圍的高速公路或連線鄰近城市的道路被截斷,只有該城市範圍內的道路被保留。
- 對應的
fringe
設定:- 高速公路入口/出口節點:標記為
outer
。 - 與次要道路(如鄉村小路)相連的節點:標記為
inner
。 - 城市核心交叉路口:標記為
default
。
- 高速公路入口/出口節點:標記為
- 實際場景:
-
路徑生成的影響:
- 外部路徑:
- 起點或終點位於
outer
節點,模擬外部流量進入城市。
- 起點或終點位於
- 內部路徑:
- 在
inner
或default
節點之間生成路徑,描述區域內部的車輛流動。
- 在
- 外部路徑:
總結
你可以簡單地理解為:
- 外部(outer):連線模擬網路與真實世界的介面。
- 內部(inner 和 default):描述模擬網路內的道路和節點。
- 劃分意義:
- 外部(outer):用於表示網路的邊界。
- 內部(inner 和 default):用於網路內部的交通流動模擬。
這種劃分方式不僅清晰地組織了模擬網路的邏輯,還能有效支援路徑生成、交通流量模擬等任務。
如果你有進一步的疑問或具體應用場景需要解析,隨時告訴我!
Road和Lane的區別
是的,你的理解非常準確!我們可以透過以下解釋進一步細化 road 和 lane 的區別:
1. 定義與層級區別
術語 | 定義 | 示例 |
---|---|---|
Road(道路) | 一條完整的道路,通常指同向行駛的所有車道的集合。 | 假設一條雙向四車道道路:每個方向的兩條車道組成一個單獨的 road(一邊一條)。 |
Lane(車道) | Road 的組成部分,指道路上的一條獨立行車路徑,供車輛按序行駛。 | 同方向的道路包含 兩個 lane:左側車道和右側車道。例如,在高速公路上,超車道是一個 lane,慢車道是另一個 lane。 |
2. Road 和 Lane 的場景對比
場景 | Road(道路) | Lane(車道) |
---|---|---|
道路通行優先權 | 在涉及整條道路的通行權時(如交叉路口、環島),規則通常基於 road 層面。例如: - 轉彎優先道路; - 環島內外優先規則。 | 在一條道路內,如果涉及到具體的車道合併或衝突時,規則基於 lane 層面。例如: - 車道合併(拉鍊式); - 左車道優先合併規則。 |
規則影響範圍 | 影響的是同向道路上的所有車道。例如,環島優先規則會使得整個進入環島的外部道路必須給環島內所有車道讓行。 | 影響的是具體車道。例如,在兩個車道需要合併時,會明確左車道是否優先、右車道是否需要讓行。 |
交通控制型別 | 訊號燈、優先順序規則等更多基於 road 的整體流量管理。 | 通常適用於微觀層面的控制,例如一條車道是否可以自由變道或合併。 |
3. 示例解釋
場景 1:同方向兩條車道的道路
-
假設一條路分為兩條同方向車道:
- 左車道(Lane 1):超車道。
- 右車道(Lane 2):慢車道。
-
如果規則是 Road 層級:
- 整個方向的道路(包括 Lane 1 和 Lane 2)被視為一個整體,例如:
- 轉彎優先規則中,整個道路獲得優先通行權。
- 整個方向的道路(包括 Lane 1 和 Lane 2)被視為一個整體,例如:
-
如果規則是 Lane 層級:
- 只針對某條具體車道,例如:
- 在合併時,Lane 1(左車道)優先,而 Lane 2(右車道)需要讓行。
- 只針對某條具體車道,例如:
場景 2:環島(Roundabout)
- 環島內所有車道屬於 一個 Road。
- 環島內外規則:
- 所有環島內的道路(Road)對外部進入環島的道路(Road)具有優先權。
場景 3:車道合併(Lane Merging)
- 在同一條道路上,兩條車道(Lane)需要合併到一個目標車道:
- 如果節點型別是
zipper
:- 左車道和右車道平等,車輛交替合併。
- 如果節點型別是 非
zipper
:- 左車道優先,右車道需要讓行。
- 如果節點型別是
4. 總結
- Road:代表一整條道路,包含所有同向車道,規則更宏觀。
- Lane:是 Road 的組成部分,代表具體的單個車道,規則更細化。
兩者的區別在於適用範圍:
- 如果規則影響整個方向或所有車道,則是 Road 層級規則。
- 如果規則僅涉及特定車道之間的關係(如合併、避讓等),則是 Lane 層級規則。
如果你還有其他問題或具體場景需要解釋,歡迎隨時問我!
Joining Nodes(合併節點)得到就是junctions
是的,這張圖正是描述 Joining Nodes(合併節點) 的過程以及其效果。
影像解釋
- 左側的影像(未合併的交叉路口)
-
特點:
- 交叉路口由多個獨立的節點(白色點)組成,每個節點之間有單獨的道路連線。
- 可以看到:
- 每條道路的左轉、直行和右轉路徑需要透過多個節點進行。
- 道路連線之間有不必要的複雜性,可能導致路徑計算出現問題。
- 這種情況可能出現在從 OpenStreetMap 或其他地圖資料中匯入時,尤其是在幾何上道路不對齊的情況下。
-
問題:
- 路徑規劃不平滑:例如,左轉軌跡可能呈現折線狀(由多個節點構成的折角路徑)。
- 交通訊號燈複雜:多個節點需要獨立訊號控制,訊號燈設計繁瑣且容易衝突。
- 效率低下:每個節點都需要單獨計算車輛軌跡,增加計算負擔。
-
- 右側的影像(合併後的交叉路口)
- 特點:
- 交叉路口中的多個節點被合併為一個單一的節點(中間的黑色大節點)。
- 所有的左轉、右轉、直行路徑都直接連線到這個節點。
- 道路之間的車道連線(綠色線條)被重新計算和最佳化。
- 優勢:
- 簡化了連線關係:所有道路只需要連線到單一節點,連線更清晰。
- 最佳化了路徑規劃:車輛的轉向路徑更平滑(如左轉可用單一曲線表示)。
- 訊號燈設計更高效:整個路口只需要一個交通訊號燈系統即可控制所有路徑。
- 模擬效率提高:減少了節點數量和連線的複雜性,降低計算成本。
- 特點:
總結
這張圖清晰展示了:
- 左圖 是未合併節點的交叉路口,複雜且容易導致問題。
- 右圖 是透過 Joining Nodes 操作後的合併結果,最佳化了交叉路口的結構、連線和模擬效率。
設定邊的型別
以下是 edge
(道路) 的引數整理表,包括每個引數的名稱、型別和描述:
引數名稱(Attribute Name) | 值型別(Value Type) | 描述(Description) |
---|---|---|
id | id (string) |
邊(道路)的唯一識別符號,必須是唯一的。 |
from | 引用的節點 ID | 邊的起始節點,必須在節點檔案中定義。 |
to | 引用的節點 ID | 邊的終止節點,必須在節點檔案中定義。 |
type | 引用的型別 ID | 邊的型別,引用自 SUMO 邊型別檔案。如果設定型別,可以在型別的基礎上覆蓋部分屬性(如allow , numLanes 等)。 |
numLanes | int |
邊的車道數量,必須是整數值。 |
speed | float |
邊允許的最大速度(單位:m/s)。預設值為 13.9 m/s(約 50 km/h)。 |
priority | int |
邊的優先順序,用於節點的通行規則計算(Right-of-way)。優先順序越高,表示更高的通行權。 |
length | float |
邊的長度(單位:米)。如果未定義,則根據起點和終點節點的距離計算。 |
shape | 列表(x,y 或 x,y,z ,以米為單位) |
邊的幾何形狀,表示多個點的座標序列。路徑通常以from 和to 節點的座標為起點和終點。 |
spreadType | 列舉值("right" , "center" , "roadCenter" ) |
描述車道幾何形狀的計算方式: - right :車道向右偏移(預設值); - center :車道在幾何中心分佈; - roadCenter :道路的中心線為參考。 |
allow | 車輛類別列表 | 允許透過的車輛類別(例如:passenger , bus , truck 等)。 |
disallow | 車輛類別列表 | 禁止透過的車輛類別。 |
width | float |
邊的每條車道的寬度(單位:米),用於視覺化效果。 |
name | string |
道路名稱,不需要唯一,僅用於視覺化。 |
endOffset | float >= 0 |
將停止線從交叉路口向後移動的距離(單位:米),有效縮短邊的長度,並區域性擴大交叉口範圍。 |
sidewalkWidth | float >= 0 |
增加人行道的寬度(單位:米)。預設值為 -1,表示不新增人行道。 |
bikeLaneWidth | float >= 0 |
增加腳踏車道的寬度(單位:米)。預設值為 -1,表示不新增腳踏車道。 |
distance | float |
邊的起點處的公里數(單位:千米)。正值表示公里數沿駕駛方向增加,負值表示減少。公里數沿邊緣計算為 abs(distance + offsetFromStart) 。 |
重要補充說明
-
優先順序(priority):
- 在交叉路口通行規則計算中非常重要。
- 如果未定義,會預設使用車速和車道數來計算優先順序。
-
預設值:
- 如果
numLanes
未設定,預設值為 1。 - 如果
speed
未設定,預設值為 13.9 m/s(約 50 km/h)。 - 如果
length
未設定,則根據節點之間的距離自動計算。
- 如果
-
幾何形狀(shape):
- 允許定義邊的複雜路徑(多段折線)。
- 如果未定義形狀,路徑為起點到終點的直線。
-
允許/禁止車輛(allow/disallow):
- 可以根據車輛類別定義特定車輛是否允許通行。
是否允許通行
這裡描述的是 allow
和 disallow
引數,它們用於控制道路(edge
)的通行許可權(access permissions),幫助在多模式(multi-modal)場景中定義哪些車輛型別可以或不能使用某條道路。
引數的作用和規則
1. 預設行為
- 如果未定義
allow
或disallow
:- 沒有任何通行限制。
- 這意味著所有型別的車輛都可以使用該道路。
2. allow
的規則
- 作用:
- 明確允許的車輛型別列表。
- 僅允許指定的車輛型別使用該道路,所有未列出的車輛都被禁止通行。
- 語法:
allow="<VEHICLE_CLASS> [<VEHICLE_CLASS>]*"
- 例如:
allow="bus bicycle"
表示只有公交車和腳踏車可以使用該道路。
- 例如:
- 適用場景:
- 專用車道(如:公交車專用道、腳踏車道)。
- 禁止某些車輛型別(如貨車)的城市中心道路。
3. disallow
的規則
- 作用:
- 明確禁止的車輛型別列表。
- 所有車輛型別都被允許,除了指定的車輛型別被禁止。
- 語法:
disallow="<VEHICLE_CLASS> [<VEHICLE_CLASS>]*"
- 例如:
disallow="pedestrian"
表示禁止行人進入該道路,但其他所有車輛型別都被允許。
- 例如:
- 適用場景:
- 禁止非機動車的高速公路。
- 允許機動車行駛,但禁止行人和腳踏車。
4. 特殊值 all
- 作用:
disallow="all"
:禁止所有車輛通行。
- 用途:
- 表示完全禁止通行的區域,例如綠化帶、人行隔離區等。
- 注意:
allow="all"
沒有意義,因為預設情況下沒有通行限制。
通行許可權的決策邏輯
-
未定義
allow
或disallow
:- 所有車輛型別都可以通行,沒有任何限制。
-
僅定義
allow
:- 只有列出的車輛型別可以通行。
- 示例:
<edge id="e1" allow="bus bicycle"/>
- 表示:只有公交車和腳踏車可以通行。
-
僅定義
disallow
:- 所有車輛型別都可以通行,除了列出的車輛型別被禁止。
- 示例:
<edge id="e2" disallow="pedestrian"/>
- 表示:行人不能使用該道路,其他車輛型別可以通行。
-
定義
disallow="all"
:- 禁止所有車輛使用該道路。
- 示例:
<edge id="e3" disallow="all"/>
- 表示:該道路完全禁止通行,通常用於非車道區域(如綠化帶)。
常見車輛型別(VEHICLE_CLASS
)
以下是 SUMO 支援的常見車輛型別,可以在 allow
和 disallow
中使用:
型別 | 描述 |
---|---|
passenger |
乘用車(小轎車)。 |
bus |
公交車。 |
bicycle |
腳踏車。 |
truck |
卡車或貨運車輛。 |
motorcycle |
摩托車。 |
pedestrian |
行人。 |
rail |
火車或軌道車輛。 |
tram |
有軌電車。 |
emergency |
緊急車輛(如救護車、消防車)。 |
all |
所有車輛型別(在 disallow 中表示禁止所有車輛通行)。 |
示例
1. 公交車專用道
<edge id="bus_lane" allow="bus"/>
- 解釋:只有公交車可以通行。
2. 禁止行人但允許其他車輛
<edge id="highway" disallow="pedestrian"/>
- 解釋:禁止行人通行,其他車輛型別(如汽車、腳踏車)都被允許。
3. 完全禁止通行的區域
<edge id="green_verge" disallow="all"/>
- 解釋:禁止所有車輛通行,通常用於綠化帶或隔離區。
4. 高速公路,僅允許機動車
<edge id="motorway" allow="passenger bus truck"/>
- 解釋:僅允許乘用車、公交車和貨運車輛通行,禁止行人和腳踏車。
總結
allow
定義允許通行的車輛型別,其他車輛禁止通行。disallow
定義禁止通行的車輛型別,其他車輛被允許。- 如果未定義
allow
或disallow
,則沒有任何限制。 - 使用
disallow="all"
可以完全禁止通行。
這是一種非常靈活的機制,可以為不同型別的道路定義專用車道或限制通行規則。如果你有具體的場景需要配置,可以進一步探討!
車輛車輛的限制
以下是 Lane-specific Definitions(車道特定定義) 的引數整理表,包括每個引數的名稱、型別和描述:
引數名稱(Attribute Name) | 值型別(Value Type) | 描述(Description) |
---|---|---|
index | int |
車道的索引編號:0 表示最右側車道,<NUM_LANES>-1 表示最左側車道。 |
allow | 列表(車輛類別) | 允許使用此車道的車輛類別列表,例如:allow="bus truck" 。 |
disallow | 列表(車輛類別) | 禁止使用此車道的車輛類別列表,例如:disallow="passenger taxi" 。 |
changeLeft | 列表(車輛類別) | 允許從此車道向左變道的車輛類別列表,例如:changeLeft="bus emergency" 。 |
changeRight | 列表(車輛類別) | 允許從此車道向右變道的車輛類別列表,例如:changeRight="passenger truck" 。 |
speed | float |
此車道的最高車速,單位為米/秒(m/s)。 |
width | float |
此車道的寬度,單位為米(用於視覺化)。 |
endOffset | float >= 0 |
將停止線從交叉路口向後移動的距離(單位:米),有效縮短車道長度,並區域性擴大交叉口範圍。 |
shape | 列表(位置:x,y 或 x,y,z ) |
自定義車道的幾何形狀,定義為位置列表。路徑通常以edge 的起點和終點為起始和結束點。 |
type | string |
自定義車道型別的描述,僅用於資訊展示,沒有實際功能。 |
acceleration | bool |
標識此車道是否為高速公路的加速車道(預設值為 false )。 |
補充說明
-
車道索引(
index
)- 從右向左進行編號。
- 最右側車道索引為
0
,最左側車道索引為<NUM_LANES>-1
。
-
通行許可權(
allow
和disallow
)- 透過
allow
和disallow
引數控制車輛類別的通行許可權。 allow
指定僅允許的車輛類別,其他車輛禁止通行。disallow
指定禁止的車輛類別,其他車輛允許通行。
- 透過
-
車道變道限制(
changeLeft
和changeRight
)- 指定哪些車輛類別可以從當前車道向左或向右變道。
- 建議:應允許緊急車輛(
emergency
)變道,即使車道有其他限制,因為緊急車輛通常可以忽略非物理限制。
-
車速(
speed
)- 定義車道的最高車速,單位為 米/秒(m/s)。
- 不同車道可以設定不同的最高車速。
-
幾何形狀(
shape
)- 自定義車道的路徑(多段折線),通常與
edge
的幾何形狀一致,但也可以為某些特殊用途定義獨立路徑。
- 自定義車道的路徑(多段折線),通常與
-
加速車道(
acceleration
)- 如果某車道為高速公路的加速車道,可以將其標記為
true
。
- 如果某車道為高速公路的加速車道,可以將其標記為
示例用法
1. 公交車專用車道
<lane index="2" allow="bus"/>
- 解釋:只有公交車可以使用索引為 2 的車道(通常是最左側車道)。
2. 禁止乘用車和計程車
<lane index="0" disallow="passenger taxi"/>
- 解釋:禁止乘用車和計程車使用索引為 0 的車道(最右側車道)。
3. 允許左變道的車輛
<lane index="1" changeLeft="bus emergency"/>
- 解釋:索引為 1 的車道允許公交車和緊急車輛向左變道。
4. 自定義車道寬度和車速
<lane index="0" speed="20" width="3.5"/>
- 解釋:索引為 0 的車道限制最高車速為 20 m/s,寬度為 3.5 米。
5. 停止線後移
<lane index="1" endOffset="5"/>
- 解釋:索引為 1 的車道停止線向後移動 5 米。
總結
- 引數如
allow
和disallow
為車道提供了細粒度的通行許可權控制。 changeLeft
和changeRight
允許指定變道規則。- 其他引數如
speed
,width
等可以進一步調整車道的特性。 - 自定義這些引數可以滿足複雜的道路模擬需求,特別是在多模式交通模擬中。
split 分道
以下是 Road Segment Refining(道路分段細化) 中 split
元素的引數整理表,包括每個引數的名稱、型別和描述:
引數名稱(Attribute Name) | 值型別(Value Type) | 描述(Description) |
---|---|---|
pos | float |
分段位置,表示在邊(edge)上的距離(單位:米)。如果值為負數,則從邊的末端向前計算距離進行分段。 |
lanes | 列表(車道 ID,整數值) | 定義分段後保留的車道編號列表。例如:lanes="0 1" 表示分段後只保留編號為 0 和 1 的車道。 |
speed | float |
分段後車道的最大速度限制(單位:米/秒)。 |
id | id (string) |
新建立節點的唯一識別符號。如果未設定,將預設生成 ID,格式為 <EDGE_ID>.<POSITION> 。 |
idBefore | id (string) |
分段前邊的 ID(預設為原始邊的 ID)。 |
idAfter | id (string) |
分段後邊的 ID(預設為 <原始ID>.<POSITION> )。 |
type, tl, tlType, shape, radius, keepClear | 參見 #Node_Descriptions | 分段後生成的節點的其他屬性(如型別、交通燈型別等)。 |
功能與作用
-
目的:
- 實現道路的動態細化,調整車道數量或速度限制,而無需將道路劃分為多個固定的邊(
edges
)。 - 提高道路建模的靈活性,例如表示道路拓寬、變窄或限速變化。
- 實現道路的動態細化,調整車道數量或速度限制,而無需將道路劃分為多個固定的邊(
-
常見用法:
- 車道減少:移除某些車道,如主幹道變為輔道。
- 車道增加:增加額外的車道,如進出高速公路的加速或減速車道。
- 速度限制調整:設定不同區段的速度限制,如進入居民區時降低速度。
引數詳細說明
1. pos
- 定義:分段操作的位置。
- 單位:米(m)。
- 用法:
- 如果為正數:從邊的起點開始計算。
- 如果為負數:從邊的末端向前計算。
- 示例:
<split pos="30"/> <!-- 從起點 30 米處分段 --> <split pos="-30"/> <!-- 從終點前 30 米處分段 -->
2. lanes
- 定義:分段後需要保留的車道列表。
- 值型別:整數列表。
- 用法:
- 列出需要保留的車道編號(從右向左編號,
0
表示最右車道)。 - 未設定時,分段後預設保留所有車道。
- 列出需要保留的車道編號(從右向左編號,
- 示例:
<split pos="30" lanes="0 1"/> <!-- 分段後保留編號為 0 和 1 的車道 -->
3. speed
- 定義:分段後車道的速度限制。
- 單位:米/秒(m/s)。
- 用法:
- 分段後為特定路段設定新的速度限制。
- 未設定時,分段後使用預設速度限制。
- 示例:
<split pos="50" speed="10"/> <!-- 分段後設定速度為 10 m/s -->
4. id
- 定義:新建立節點的唯一識別符號。
- 用法:
- 如果未設定,ID 將自動生成,格式為
<EDGE_ID>.<POS>
。 - 可手動指定 ID,用於更好地控制和管理網路結構。
- 如果未設定,ID 將自動生成,格式為
- 示例:
<split pos="30" id="newNode1"/> <!-- 手動設定新節點的 ID -->
5. idBefore
和 idAfter
- 定義:
idBefore
:分段前的邊的 ID。idAfter
:分段後的邊的 ID。
- 預設值:
idBefore
預設為原始邊的 ID。idAfter
預設為<原始ID>.<POS>
。
- 示例:
<split pos="30" idAfter="newEdge"/> <!-- 分段後的邊 ID 為 newEdge -->
6. 其他屬性
type
、tl
(交通燈)、tlType
、shape
、radius
、keepClear
:- 定義分段後新節點的其他屬性(參見節點描述部分的詳細說明)。
注意事項
-
車道編號(
lanes
)基於總車道數- 在定義分段時,
lanes
的最大值為邊的車道總數減 1。
- 在定義分段時,
-
速度限制預設值
- 如果未定義
speed
,分段後的速度限制將使用邊的預設速度。
- 如果未定義
-
雙向道路的分段
- 可以同時為正向和反向邊定義分段。例如:
<edge id="123"> <split id="newNode" pos="150"/> </edge> <edge id="-123"> <split id="newNode" pos="-150"/> </edge>
- 可以同時為正向和反向邊定義分段。例如:
-
位置為 0 的分段
- 如果分段位置為
0
,則分段不會生成新節點,只會直接調整車道數量或速度。
- 如果分段位置為
示例
1. 刪除車道
<edge id="edge1" from="nodeA" to="nodeB" numLanes="3" speed="15">
<split pos="50" lanes="0 1" speed="10"/>
</edge>
- 解釋:
- 邊
edge1
的總車道數為 3,速度限制為 15 m/s。 - 在距離起點 50 米處分段:
- 僅保留車道編號為 0 和 1 的車道。
- 分段後的車速限制為 10 m/s。
- 邊
2. 增加車道
<edge id="edge2" from="nodeX" to="nodeY" numLanes="2" speed="20">
<split pos="0" lanes="0 1"/>
<split pos="30" lanes="0 1 2"/>
</edge>
- 解釋:
- 邊
edge2
最初有 2 條車道。 - 在起點處定義初始車道為 0 和 1。
- 在 30 米處分段,增加一條車道(車道編號為 2)。
- 邊
總結
split
元素使得在同一條邊中可以動態調整車道數量和速度限制,提升了建模的靈活性。- 核心引數包括分段位置(
pos
)、分段後的車道(lanes
)和速度(speed
)。 - 可結合雙向道路和節點屬性定義更復雜的網路結構。
Roundabouts 環形路口
相同道路不同方向的邊,兩個lane
配置內容解釋:
-
定義了兩條邊:
- 邊
a
(從節點X
到節點Y
),有兩個車道(numLanes="2"
)。 - 邊
b
(從節點Y
到節點X
),方向與邊a
相反。
- 邊
-
鄰接關係宣告:
- 在邊
a
中,使用<neigh lane="b_0"/>
指定它的 第一個車道(從編號0開始) 與邊b
的第一個車道(b_0
)相鄰。 - 在邊
b
中,使用<neigh lane="a_1"/>
指定它的 第一個車道(b_0
) 與邊a
的第二個車道(a_1
)相鄰。
- 在邊
具體含義:
這種設定宣告瞭兩條邊的內側車道(最靠近中線的車道)是 鄰接 的,也就是駕駛過程中可以在這些車道之間切換(比如超車或掉頭時)。
-
對於 邊
a
,車道編號:a_0
是靠外的車道。a_1
是靠內的車道,與b_0
鄰接。
-
對於 邊
b
,車道編號:b_0
是靠內的車道,與a_1
鄰接。
應用場景:
這種定義通常用於模擬雙向交通,特別是在需要精確控制車道相鄰關係的模擬場景中,比如道路中線允許臨時超車或者掉頭的情況。
視覺化幫助:
假如我們有如下的雙向道路:
X --------> Y (邊 a, 2個車道: a_0, a_1)
Y <-------- X (邊 b, 1個車道: b_0)
配置說明 a_1 和 b_0 是鄰接的。即:
a_1
(a的內側車道)可以連線到b_0
。- 模擬器中車輛可能會在
a_1
和b_0
之間切換以模擬現實交通。
刪除車道
以下是對上述內容的整理:
刪除邊或車道
在 SUMO 中,可以透過以下方式刪除邊或車道:
-
刪除整個邊:
<edges> <delete id="a"/> <!-- 刪除 id 為 "a" 的邊 --> </edges>
-
刪除某條邊的指定車道:
<edges> <delete id="a" index="0"/> <!-- 刪除 id 為 "a" 的第一個車道 --> </edges>
-
刪除特定型別的所有邊:
- 可以透過在
<type>
元素中使用remove="true"
來刪除某個型別的所有邊。
- 可以透過在
使用type型別輔助邊的定義 + 邊型別描述
邊型別(Edge Types)是用於統一定義邊屬性的工具,簡化了邊的配置。
邊型別檔案的基本資訊:
- 副檔名:
.typ.xml
- 用途: 定義邊型別及其屬性。
- 格式: XML 格式,符合
types_file.xsd
。 - 特點: 專為 SUMO 設計。
邊型別屬性:
- 邊型別的屬性與邊本身的屬性相同,但邊型別中不包括節點的起點和終點。
- 常用屬性包括:
numLanes
: 車道數量。speed
: 允許的最大速度。priority
: 優先順序。allowed/disallowed vehicle classes
: 允許/禁止的車輛型別。
透過邊型別簡化邊的定義
可以在邊的定義中透過 type
屬性引用定義好的邊型別。
邊的定義示例:
<edges>
<edge id="1fi" from="1" to="m1" type="b"/> <!-- 使用型別 "b" -->
<edge id="1si" from="m1" to="0" type="a"/> <!-- 使用型別 "a" -->
<edge id="1o" from="0" to="1" type="c"/> <!-- 使用型別 "c" -->
</edges>
對應的邊型別檔案:
<types>
<type id="a" priority="3" numLanes="3" speed="13.889"/> <!-- 型別 "a" -->
<type id="b" priority="2" numLanes="2" speed="11.111"/> <!-- 型別 "b" -->
<type id="c" priority="1" numLanes="1" speed="11.111"/> <!-- 型別 "c" -->
</types>
解析說明:
- 邊
1fi
使用型別b
,所以它繼承了以下屬性:numLanes=2
,speed=11.111
,priority=2
。
- 邊
1si
使用型別a
,所以它繼承了:numLanes=3
,speed=13.889
,priority=3
。
- 邊
1o
使用型別c
,繼承了:numLanes=1
,speed=11.111
,priority=1
。
總結:邊和邊型別的關係
-
邊型別的作用:
- 避免重複設定相同的屬性,便於統一管理。
- 提高配置的可讀性和可維護性。
-
定義方式:
- 在
<types>
檔案中定義邊型別。 - 在
<edges>
檔案中透過type
屬性引用這些型別。
- 在
-
靈活性:
- 如果需要刪除某些邊或特定型別的邊,使用
<delete>
或remove="true"
即可實現。
- 如果需要刪除某些邊或特定型別的邊,使用
透過以上方式,可以高效地管理複雜路網中的邊和車道定義。
為不同的車輛類別(vehicle class,vClass)設定特定的速度限制
這部分內容解釋瞭如何為不同的車輛類別(vehicle class,vClass)設定特定的速度限制。以下是整理和總結:
透過 <type>
定義車輛類別特定的速度限制
在 SUMO 中,可以在 <type>
元素中使用 <restriction>
子元素為特定的車輛類別設定速度限制。這種方法可以為不同型別的車輛(如卡車、公共汽車等)單獨定義速度限制,而不會影響其他車輛。
示例:
<type id="a" priority="3" numLanes="3" speed="38.89">
<restriction vClass="truck" speed="27.89"/>
</type>
解析:
id="a"
: 定義了型別為a
的邊。speed="38.89"
: 預設速度限制為 38.89 m/s(約 140 km/h)。<restriction>
: 為指定車輛類別設定限制:vClass="truck"
: 表示限制僅對車輛類別為卡車(truck)的車輛生效。speed="27.89"
: 卡車的最高速度限制為 27.89 m/s(約 100 km/h)。
應用場景:
德國高速公路上的卡車限速示例:
- 在德國,高速公路上對小汽車的限速較高(或無上限),但卡車(truck)的最高速度通常不得超過 100 km/h。
- 透過上述定義,卡車的速度限制為 100 km/h,而小汽車仍可以使用更高的速度。
與其他方法的區別:
- 雖然可以透過直接設定卡車的
maxSpeed
屬性來實現限速,但這樣做會失去模擬速度分佈的靈活性(如speedDev
和speedFactor
屬性)。 - 使用
<restriction>
,可以在保持車輛速度隨機分佈的基礎上,強制遵循法定的速度限制。
直接載入 vClass 限速檔案
- 速度限制還可以透過額外的檔案載入到 SUMO 中,適用於更復雜的場景管理。
- 在這種情況下,只需要指定
type
的id
屬性,而限制規則在另一個檔案中定義。
示例:
<types>
<type id="highway_type"/>
</types>
附加檔案:
<restrictions>
<restriction id="highway_type" vClass="truck" speed="27.89"/>
</restrictions>
總結:
-
核心功能:
- 針對特定車輛類別(vClass)設定速度限制,而不影響其他類別車輛。
- 支援更精細化的模擬,比如同時模擬卡車和小汽車在同一路段的不同速度行為。
-
實現方法:
- 在
<type>
元素中巢狀<restriction>
子元素。 - 或者透過單獨的檔案載入速度限制規則。
- 在
-
優勢:
- 與直接設定
maxSpeed
不同,這種方法允許使用速度分佈引數(如speedDev
和speedFactor
),以更真實地模擬車輛速度的變化。
- 與直接設定
關於邊和邊連線,道路和道路連線的設定
以下是整理後的 SUMO 中關於手動設定或刪除邊/車道連線的引數和選項說明:
基本連線設定
定義連線的格式
-
僅定義邊到邊的連線:
<connection from="<FROM_EDGE_ID>" to="<TO_EDGE_ID>"/>
- 允許從邊
<FROM_EDGE_ID>
到<TO_EDGE_ID>
的車輛通行。 - 如果未定義其他連線,預設禁止從
<FROM_EDGE_ID>
到其他邊的通行。
- 允許從邊
-
定義車道到車道的連線:
<connection from="<FROM_EDGE_ID>" to="<TO_EDGE_ID>" fromLane="<INT_1>" toLane="<INT_2>"/>
- 指定從邊
<FROM_EDGE_ID>
的車道<INT_1>
到邊<TO_EDGE_ID>
的車道<INT_2>
的連線。
- 指定從邊
引數說明
引數名 | 資料型別 | 預設值 | 描述 |
---|---|---|---|
from |
referenced edge id | 必填 | 離開連線的邊的名稱。 |
to |
referenced edge id | 必填 | 到達連線的邊的名稱。如果省略或為空,表示禁止從該邊進行任何連線。 |
fromLane |
<INT> |
無 | 連線的起點車道索引(從右向左編號,從0開始)。 |
toLane |
<INT> |
無 | 連線的終點車道索引(從右向左編號,從0開始)。 |
高階連線引數
額外屬性說明
引數名 | 資料型別 | 預設值 | 描述 |
---|---|---|---|
pass |
bool |
false |
是否允許車輛無等待透過此連線。 |
keepClear |
bool |
true |
是否允許車輛阻塞交叉口。 |
contPos |
float |
-1 |
內部交叉點的生成位置(以米為單位),設定為0時不生成內部交叉點。 |
visibility |
float |
4.5 |
可見距離(以米為單位),低於此距離車輛會全速加速透過連線。 |
speed |
float |
-1 |
連線處的最大透過速度(以米/秒為單位)。 |
shape |
list of positions |
無 | 自定義連線形狀(用 x,y 或 x,y,z 格式,不允許空格)。 |
uncontrolled |
bool |
false |
是否不受交通訊號燈控制。 |
allow |
list of vClass |
無 | 允許使用此連線的車輛類別列表。 |
disallow |
list of vClass |
無 | 禁止使用此連線的車輛類別列表。 |
changeLeft |
list of vClass |
無 | 允許左側換道的車輛類別列表。 |
changeRight |
list of vClass |
無 | 允許右側換道的車輛類別列表。 |
length |
float |
無 | 自定義連線的長度。 |
indirect |
bool |
false |
宣告間接(兩步)轉向移動,影響幾何形狀和優先權分配。 |
type |
string |
無 | 設定自定義邊型別,用於應用車輛類別特定的速度限制。 |
刪除連線
格式
-
刪除邊到邊的連線:
<delete from="<FROM_EDGE_ID>" to="<TO_EDGE_ID>"/>
- 刪除從
<FROM_EDGE_ID>
到<TO_EDGE_ID>
的所有連線。
- 刪除從
-
刪除車道到車道的連線:
<delete from="<FROM_EDGE_ID>" to="<TO_EDGE_ID>" fromLane="<INT_1>" toLane="<INT_2>"/>
- 刪除從
<FROM_EDGE_ID>
的車道<INT_1>
到<TO_EDGE_ID>
的車道<INT_2>
的連線。
- 刪除從
引數說明
引數名 | 資料型別 | 描述 |
---|---|---|
from |
referenced edge id | 刪除的源邊名稱。 |
to |
referenced edge id | 刪除的目標邊名稱。 |
fromLane |
<INT> |
刪除的起點車道索引(可選)。 |
toLane |
<INT> |
刪除的終點車道索引(可選)。 |
總結
-
基本連線設定:
- 使用
<connection>
定義從邊到邊、或從車道到車道的連線。 - 未定義的連線會被預設禁止。
- 使用
-
高階屬性:
- 可以設定連線的速度限制、形狀、可見性、允許的車輛類別等,提供更細緻的控制。
-
刪除連線:
- 使用
<delete>
刪除邊或車道間的連線。
- 使用
透過這些設定,可以精確地控制路網的連線行為,滿足複雜的交通模擬需求。
定義從哪條車道出,哪條車道進
這三個圖展示了 SUMO 中透過顯式定義連線如何影響路網的行為。以下是每張圖的詳細解讀:
圖 1: Unconstrained Network (無約束網路)
-
描述:
- 這是一個預設生成的十字路口示例。
- 路網未定義任何具體的連線關係,所有轉向和通行連線由 SUMO 的預設演算法 推斷生成。
- 在這種情況下:
- 每條進入的邊(incoming edge)可以與所有可能的退出邊(outgoing edge)連線。
- 包括直行、左轉和右轉的所有轉向行為都被允許。
-
特性:
- 無顯式約束連線行為。
- 所有可能的連線均被允許,適用於快速構建簡單的路網。
圖 2: Network with Explicit Edge-to-Edge Connections (顯式邊到邊連線)
- 描述:
- 此圖透過一個連線檔案顯式限制了某些邊的連線。
- 示例中,定義了僅允許從 “1si” 到 “30” 和 “20”,以及從 “2si” 到 “40” 和 “10” 的連線。
- 具體 XML 定義如下:
<connections> <connection from="1si" to="30"/> <connection from="1si" to="20"/> <connection from="2si" to="40"/> <connection from="2si" to="10"/> </connections>
- 效果:
- 水平邊(1si 和 2si)僅允許直行或右轉,不允許左轉行為。
- 比預設的無約束網路更有控制力,適合需要限制部分連線的場景。
圖 3: Network with Explicit Lane-to-Lane Connections (顯式車道到車道連線)
- 描述:
- 此圖透過更詳細的連線檔案,顯式定義了每條車道的連線關係。
- 示例中,指定了進入邊的第二條車道與退出邊的特定車道之間的連線:
<connections> <connection from="1si" to="30" fromLane="0" toLane="0"/> <connection from="1si" to="20" fromLane="2" toLane="0"/> <connection from="2si" to="40" fromLane="0" toLane="0"/> <connection from="2si" to="10" fromLane="2" toLane="0"/> </connections>
- 效果:
- 比前一圖進一步細化了車道的連線。
- 例如,從 “1si” 的第 0 車道只能連線到 “30” 的第 0 車道。
- 提供了更細粒度的控制,可用於複雜的交叉口設計或特殊規則實現。
注意事項
-
檔案定義方式:
- 第一張圖未定義連線,預設生成。
- 第二張圖透過邊到邊的連線定義檔案(edge-to-edge connection)。
- 第三張圖透過車道到車道的連線定義檔案(lane-to-lane connection)。
-
重要提示:
- 不要同時對同一條進入邊既定義“邊到邊”連線,又定義“車道到車道”連線,這會導致不確定行為。
總結
- 圖 1 (Unconstrained Network):
- 預設連線,允許所有可能的轉向。
- 圖 2 (Explicit Edge-to-Edge Connections):
- 限制某些邊之間的連線,適合簡單控制的場景。
- 圖 3 (Explicit Lane-to-Lane Connections):
- 精確到車道級別的控制,適合複雜的交叉口和特殊規則。
選擇合適的連線型別定義方式,取決於路網的複雜性和模擬需求。
設定右轉優先順序的降低
這句話的意思是:
自 SUMO 版本 0.9.6 起,可以透過顯式設定優先權規則,使透過某一連線的車輛需要等待另一方向車流通行。這意味著,在交叉路口中,可以人為控制哪些車流有優先權,哪些車流需要等待。
具體來說,這裡提到的例子:
-
網路上下文:
- 這是一個十字路口,其中有水平邊(左右方向)和垂直邊(上下方向)。
- 預設情況下,右轉車輛(right-moving vehicles)總是可以通行,即不受阻礙地完成右轉。
-
優先權調整:
- 透過檔案中的定義,指定讓垂直方向上右轉的車輛(例如從北向東或從南向西的右轉),等待水平方向直行的車輛(例如從西向東或從東向西的直行車流)。
-
實現方法:
- 在連線檔案中使用
<prohibition>
標籤,定義了優先流向(prohibitor) 和 受限流向(prohibited)。 - 例如:
<prohibition prohibitor="2si->1o" prohibited="4si->1o"/>
- prohibitor:
2si->1o
表示從南向北直行的車流有優先權。 - prohibited:
4si->1o
表示從北向東右轉的車流需要等待南向北直行的車流。
- prohibitor:
- 在連線檔案中使用
-
實際效果:
- 當水平直行車輛正在透過時,垂直方向的右轉車輛會被迫等待,直到水平直行車流清空。
- 這種設定打破了預設規則(右轉優先),透過明確的優先權定義,讓特定方向的車輛更順暢地透過路口。
總結:
這句話的核心意思是:
- 預設情況下,右轉車輛可以通行(優先權)。
- 透過設定連線優先規則,可以讓某些車流(如垂直方向右轉車輛)優先權降低,從而需要等待另一車流(如水平直行車流)的通行。
同一方向優先順序的設定
是的,pass="true"
的確是用來改變進入同一目標車道的優先順序的設定。
詳細解讀:
-
預設行為:
- 當多個車道連線到同一目標車道時,右側車道優先(車道編號越小的車道,優先順序越高)。
- 例如,如果有兩條連線:
<connection from="WC" to="CE" fromLane="0" toLane="0"/> <connection from="WC" to="CE" fromLane="1" toLane="0"/>
- 預設情況下:
fromLane="0"
的車流(右車道)會優先進入toLane="0"
。fromLane="1"
的車流(左車道)需要等待。
- 預設情況下:
-
pass="true"
的作用:- 賦予當前連線優先權,即即使它本來不是預設優先順序較高的車道,它也會被優先考慮。
- 例如:
<connection from="WC" to="CE" fromLane="0" toLane="0"/> <connection from="WC" to="CE" fromLane="1" toLane="0" pass="true"/>
- 這表示:
- 即使
fromLane="1"
(左車道)本來不是優先車道,由於有pass="true"
,它現在被賦予了優先權。 fromLane="0"
的車流需要等待fromLane="1"
的車流先透過。
- 即使
- 這表示:
-
優先權控制機制:
- 預設優先權規則:右車道優先。
- 顯式優先權設定:透過
pass="true"
,手動調整特定車道的優先權。 - 實現無衝突的合流:SUMO 會根據這些優先權設定,確保多個車道連線到同一目標車道時不發生衝突。
應用場景:
-
合流控制:
- 在路段合流時,手動設定某些車道的優先順序,確保車輛按預期順序進入目標車道。
-
特殊優先順序需求:
- 模擬現實中某些道路場景,例如:
- 左側車道可能是主車道,因此需要賦予其優先權。
- 右車道可能是匝道車流,需讓主車道車輛先透過。
- 模擬現實中某些道路場景,例如:
總結:
pass="true"
的作用:改變預設的優先權規則,賦予當前連線更高的優先權。- 用法場景:在需要控制車道合流或交叉口車輛通行順序時非常有用。
- 實際效果:SUMO 模擬會根據設定,優先讓有
pass="true"
的連線先透過,從而實現更精確的交通行為控制。
交通燈的設定
以下是關於 SUMO 中交通訊號燈定義(Traffic Light Definitions)以及受控連線(Controlled Connections)的引數設定整理:
<tlLogic>
元素
-
作用:
- 定義交通訊號燈邏輯(訊號計劃)。
- 可以嵌入到
.net.xml
檔案中,也可以單獨載入到模擬中。
-
限制:
- 不支援將 WAUTs(動態訊號計劃切換) 嵌入到
.net.xml
中,必須作為附加檔案載入。
- 不支援將 WAUTs(動態訊號計劃切換) 嵌入到
<connection>
元素
- 作用:
- 定義交通訊號燈與受控連線(車道連線)的關係。
- 用於簡化訊號計劃(例如,透過訊號組將多個連線繫結到同一個訊號階段)。
- 允許單個訊號燈控制多個交叉口。
<connection>
元素引數說明
引數名 | 資料型別 | 描述 |
---|---|---|
from | referenced edge id | 定義車輛離開的邊(來源邊)的名稱。 |
to | referenced edge id | 定義車輛到達的邊(目標邊)的名稱。 |
fromLane | int |
定義進入邊的車道索引(從 0 開始編號,右側為 0)。 |
toLane | int |
定義目標邊的車道索引(從 0 開始編號,右側為 0)。 |
tl | string |
控制此連線的訊號燈 ID(訊號燈控制器 ID)。 |
linkIndex | int |
與 <phase> 元素中的 state 屬性的索引對應,用於控制此連線的狀態。 |
示例說明
1. 交通訊號燈邏輯定義
<tlLogic id="tl1" type="static" programID="1" offset="0">
<phase duration="31" state="GGrr"/>
<phase duration="6" state="yyrr"/>
<phase duration="31" state="rrGG"/>
<phase duration="6" state="rryy"/>
</tlLogic>
-
tlLogic 引數:
id="tl1"
:訊號燈的唯一識別符號。type="static"
:訊號燈型別,表示靜態固定週期訊號燈。programID="1"
:訊號燈的程式 ID。offset="0"
:訊號燈的初始偏移量。
-
phase 定義:
duration
:訊號燈階段的持續時間(單位:秒)。state
:階段狀態,定義各方向訊號燈的顏色:G
:綠燈。y
:黃燈。r
:紅燈。- 每個字元對應一個方向的訊號燈狀態。
2. 定義受控連線
<connection from="edge1" to="edge2" fromLane="0" toLane="0" tl="tl1" linkIndex="0"/>
<connection from="edge1" to="edge3" fromLane="0" toLane="1" tl="tl1" linkIndex="1"/>
- connection 引數:
from="edge1"
:車輛離開的邊 ID(來源邊)。to="edge2"
:車輛到達的邊 ID(目標邊)。fromLane="0"
:來源邊的第 0 車道。toLane="0"
:目標邊的第 0 車道。tl="tl1"
:訊號燈 ID,表示此連線由訊號燈tl1
控制。linkIndex="0"
:訊號燈狀態中對應的索引,表示此連線由<phase>
中的第 0 位字元控制。
訊號燈與受控連線的結合
訊號燈定義:
<tlLogic id="tl1" type="static" programID="1" offset="0">
<phase duration="31" state="GGrr"/>
<phase duration="6" state="yyrr"/>
<phase duration="31" state="rrGG"/>
<phase duration="6" state="rryy"/>
</tlLogic>
state="GGrr"
表示:- 前兩位(對應 linkIndex 0 和 1):綠燈。
- 後兩位(對應 linkIndex 2 和 3):紅燈。
受控連線定義:
<connections>
<connection from="edge1" to="edge2" fromLane="0" toLane="0" tl="tl1" linkIndex="0"/>
<connection from="edge1" to="edge3" fromLane="0" toLane="1" tl="tl1" linkIndex="1"/>
</connections>
- 第 0 和第 1 個連線由
linkIndex
控制:- 當
state="GGrr"
時,edge1->edge2
和edge1->edge3
可以通行。
- 當
總結:
-
<tlLogic>
定義交通訊號燈的邏輯:- 包括訊號燈 ID、型別(靜態/動態)、程式 ID、階段持續時間及對應狀態。
-
<connection>
定義受控連線:- 連線來源邊和目標邊,同時指定控制此連線的訊號燈和對應的訊號階段索引。
-
linkIndex
的作用:- 透過索引將訊號燈的狀態(
state
)與連線繫結,實現特定連線的通行控制。
- 透過索引將訊號燈的狀態(
-
使用建議:
- 如果需要簡化訊號控制,可以將多個連線繫結到相同的
linkIndex
,實現分組控制。 - 使用
netconvert --plain-output-prefix
可以提取示例檔案,快速瞭解定義格式。
- 如果需要簡化訊號控制,可以將多個連線繫結到相同的
行人
是的,<crossing>
和 <walkingArea>
在 SUMO 中的功能和現實中的對應關係可以理解為:
1. <crossing>
:斑馬線
-
功能:
- 用於定義行人過街的位置,即行人從一個道路邊(
edge
)跨越到另一個道路邊的路徑。 - 現實中對應斑馬線或人行過街道。
- 用於定義行人過街的位置,即行人從一個道路邊(
-
典型特性:
- 通常與車輛行駛的道路(
edge
)相關聯,定義行人橫跨這些道路的路徑。 - 可以設定優先權(
priority
):priority=true
:車輛需要為行人讓行(如訊號燈控制的斑馬線)。priority=false
:行人需要等候車輛空隙(如無優先權的普通斑馬線)。
- 形狀(
shape
)通常是一條直線,但可以根據需要定義為曲線或其他形狀。
- 通常與車輛行駛的道路(
-
現實示例:
- 十字路口中連線兩個行人道的斑馬線。
- 單獨的道路斑馬線(如在非訊號燈控制的街區中)。
2. <walkingArea>
:行人道
-
功能:
- 用於定義行人專用區域,通常是步行道、人行道或行人活動的開放區域。
- 連線多個行人道或與其他行人過街設施(
<crossing>
)相連。
-
典型特性:
- 主要用於行人專屬的路徑或區域。
- 形狀(
shape
)可以定義為多邊形,表示行人道的邊界。 - 可以與行人過街設施(
<crossing>
)搭配使用,為行人提供完整的通行路徑。
-
現實示例:
- 路口角落的步行區域。
- 與道路平行的人行道。
- 行人廣場或開放區域(如商場入口或公園步行區)。
3. <crossing>
和 <walkingArea>
的關係
<crossing>
(斑馬線)通常連線兩個<walkingArea>
(人行道或步行區域)。- 在模擬中,它們共同定義了行人如何在路網中移動:
- 行人從一個步行區域(
<walkingArea>
)出發。 - 使用
<crossing>
橫穿車道(edge
)。 - 到達另一個步行區域(
<walkingArea>
)。
- 行人從一個步行區域(
總結:現實對應關係
SUMO 元素 | 現實對應 | 用途 |
---|---|---|
<crossing> |
斑馬線或行人過街道 | 行人橫穿車輛車道時的路徑,定義行人與車輛的互動關係。 |
<walkingArea> |
人行道、步行區或行人活動區域 | 行人的專用區域,連線行人設施(如斑馬線),用於構建完整的行人網路。 |
透過這兩者的組合,可以模擬真實世界中行人和車輛的互動,併為行人提供完整的出行路徑設計。