① SUMO 中的車輛動力學模型
SUMO 中車輛動力學模型包括兩方面
longitudinal model : 縱向動力學模型,描述車輛加速和減速
lateral model :橫向動力學模型,描述車輛換道
在 longitudinal model 方面,由於 SUMO 主要用於研究車輛的外部行為、多車交互和交通流,對於單個車輛建模精度要求不高,可以近似看作質點,採用比較簡單的 car-following model (跟車模型) 來描述車輛速度和位置變化規律。car-following model 中包含兩種情況:無前車和有前車。
在 lateral model 方面,SUMO 採用 lane changing model ( 參考文獻 )。簡單地說就是以決策樹的方式設定諸多換道條件,只要滿足某些條件,就進行相應的換道操作。
默認的 lane changing model 是瞬間換道,即在一個 simulation step 中完成換道,直觀地看就是車輛在兩個車道之間瞬移。
更加精細的模型包括:
具體設置可以參考 https://sumo.dlr.de/wiki/Simulation/SublaneModel#Sublane-Model
本文主要介紹 car-following model.
要了解 SUMO 中默認使用的改進 Krauss model,需要先了解一下原始的 Krauss model 的建模思想。
Krauss model 來自文獻:
假設 為 leader 與 follower 車間距,其中 為車身長度。
如果要求車輛不相撞,需要滿足
其中
為了計算 , 需要給出速度與剎車距離的函數表達式 和 。下邊用 函數在 處的 Taylor 展開近似替代 函數,忽略高階項得到
下邊的問題就是如何計算導數 .
假設剎車時加速度為 ,則有
其中的積分項對應了剎車加速度為 情況下的剎車距離。
一般我們在計算距離時習慣將積分區間設定為時間,而被積函數為速度。這里是將積分區間設定為速度的變化區間,對時間進行積分。這樣積分之後得到關於速度的函數,以便後續的操作。
將 式帶入 式中得
上述表達式右邊 含有 ,所以需要再整理一下,得到 的顯式表達為
其中原本的 也替換為了最大剎車加速度 .
上述式子就是 SUMO 中 original Krauss model 的安全跟車速度表達式,部分 程序源碼 如下:
這里 式右邊就是安全跟車速度,記做 。但是,這一速度還不是最終車輛採用的跟車速度。與無前車情況類似,我們也要保證跟車速度不能超過允許的最大速度,因此要取安全速度和允許最大速度中的較小值,即
其中 為最大加速度, 為模擬更新步長。
另外,可以引入隨機因子,表示車輛並不一定按照上述安全跟車速度行駛,可以取更小的值,即
其中 為外部設定的 imperfection parameter,表徵了偏離 的程度。
總結演算法步驟:
盡管 SUMO 中包含了上述原始 Krauss model,但是沒有作為默認 car-following model,而是做了較大改動。改進模型與原始的 Krauss 模型的出發點是相同的:在保證不碰撞的前提下,車速盡量的快。但在計算安全速度方面,與原始 Krauss 完全不同。
改進的 Krauss model 依然基於上述公式 ,但並沒有採用泰勒展開方式近似表達剎車距離函數 ,而是直接數值計算。步驟與源碼實現如下:
上式中 為前車速度減到 0 需要的時間。
在 SUMO 源碼中通過 brakeGapEuler 函數 實現上述計算過程。
這里需要注意的是,SUMO 默認採用 Euler 數值積分方式 ,在計算位置時公式如下:
即 時刻的位置等於 時刻的位置加上 時刻的速度造成的位置變化。
明白了這種積分方式才能更好的理解源碼中的計算公式。
得到安全跟車速度之後,其餘部分與原始的 Krauss model 類似的,要與允許的最大速度比較,並且考慮隨機因素。具體在 followSpeed 函數 和 dawdle2 函數 中實現。