SUMO 中的车辆动力学模型

SUMO 中车辆动力学模型包括两方面

longitudinal model: 纵向动力学模型,描述车辆加速和减速

lateral model:横向动力学模型,描述车辆换道

在 longitudinal model 方面,由于 SUMO 主要用于研究车辆的外部行为、多车交互和交通流,对于单个车辆建模精度要求不高,可以近似看作质点,采用比较简单的 car-following model (跟车模型) 来描述车辆速度和位置变化规律。car-following model 中包含两种情况:无前车和有前车。

  • 对于无前车的情形,车辆保持为最大速度,这里最大速度要至少考虑三方面的因素:

    1. 该类型车辆本身能够达到的最大物理速度
    2. 前一时刻速度经过最大加速之后在当前时刻所能达到的最大速度
    3. 当前行驶道路规定的最大速度

    最终的行驶速度为上述三个最大速度中的最小值。

  • 对于有前车的情形,则要计算安全的行驶速度,保证任何情况下(尤其是前车急刹车时)车辆不会相撞。不同的 car-following model 的主要区别就在于如何计算安全行驶速度。目前 SUMO 中采用的 car-following model 为改进的 Krauss model.

在 lateral model 方面,SUMO 采用 lane changing model (参考文献)。简单地说就是以决策树的方式设定诸多换道条件,只要满足某些条件,就进行相应的换道操作。
默认的 lane changing model 是瞬间换道,即在一个 simulation step 中完成换道,直观地看就是车辆在两个车道之间瞬移。
更加精细的模型包括:

  • SublaneModel
  • Simple Continous lane-change model

具体设置可以参考 https://sumo.dlr.de/wiki/Simulation/SublaneModel#Sublane-Model

本文主要介绍 car-following model.

original Krauss model

要了解 SUMO 中默认使用的改进 Krauss model,需要先了解一下原始的 Krauss model 的建模思想。

Krauss model 来自文献:

Stefan Krauß. Microscopic Modeling of Traffic Flow: Investigation of Collision Free Vehicle Dynamics. PhD thesis. 1998

假设 g=x_l - x_f -l 为 leader 与 follower 车间距,其中 ​l 为车身长度。

如果要求车辆不相撞,需要满足

L(v_f) + v_f\tau < L(v_l) + g \tag{1}

其中

  • v_f为 follower 的速度,也就是我们需要计算的量

  • v_l 为 leader 的速度

  • L(v_f) 为 follower 的刹车距离

  • L(v_l)为 leader 的刹车距离

  • \tau 为驾驶员从观察到动作的反应时间

  • g 为前边定义的车间距。

为了计算 ​v_f, 需要给出速度与刹车距离的函数表达式 L(v_f) ​和 L(v_l) 。下边用 L(\cdot) ​ 函数在 \overline{v} = (v_f + v_l) / 2​ 处的 Taylor 展开近似替代 L(\cdot) ​ 函数,忽略高阶项得到

L'(\overline{v})v_f + v_f\tau < L'(\overline{v})v_l + g \tag{2}

下边的问题就是如何计算导数 ​ L'(\overline{v}).

假设刹车时加速度为 \dot{v} = -b(v)​,则有

L'(v) =\frac{d}{dv}\int_v^0 \frac{s}{-b(s)}ds = \frac{v}{b(v)} \tag{3}

其中的积分项对应了刹车加速度为 -b(v) 情况下的刹车距离。

一般我们在计算距离时习惯将积分区间设定为时间,而被积函数为速度。这里是将积分区间设定为速度的变化区间,对时间进行积分。这样积分之后得到关于速度的函数,以便后续的操作。

(3) 式带入 (2) 式中得

v_f < v_l + \frac{g - v_l\tau}{\frac{\overline{v}}{b(\overline{v})}+\tau} \tag{4}

上述表达式右边 \overline{v} = (v_f + v_l)/2​ 含有​ v_f,所以需要再整理一下,得到 v_f​ 的显式表达为

v_f < -b\tau + \sqrt{(b\tau)^2 + v_l^2 + 2bg} \tag{5}

其中原本的 ​-b(v) 也替换为了最大刹车加速度 -b​.

上述式子就是 SUMO 中 original Krauss model 的安全跟车速度表达式,部分程序源码如下:

double MSCFModel_KraussOrig1::vsafe(double gap, double predSpeed, double /* predMaxDecel */) const {
    ...
     double vsafe = (double)(-1. * myTauDecel + sqrt( myTauDecel * myTauDecel + (predSpeed * predSpeed) + (2. * myDecel * gap) ));
     assert(vsafe >= 0);
     return vsafe;
 }

这里 (5) 式右边就是安全跟车速度,记做 ​ v_{safe}。但是,这一速度还不是最终车辆采用的跟车速度。与无前车情况类似,我们也要保证跟车速度不能超过允许的最大速度,因此要取安全速度和允许最大速度中的较小值,即

v_f = \min\{v_{max}, v(t)+a(t)\Delta t, v_{safe}(t)\} \tag{6}

其中 a​ 为最大加速度,\Delta t​ 为仿真更新步长。

另外,可以引入随机因子,表示车辆并不一定按照上述安全跟车速度行驶,可以取更小的值,即

v = \max\{0, v_f-rand(0, \epsilon a) \} \tag{7}

其中 ​ \epsilon\in [0,1] 为外部设定的 imperfection parameter,表征了偏离 v_f ​ 的程度。

总结算法步骤:

  1. (5) 式计算 ​ v_{safe}

  2. (6) 式和 (7) 式计算最终的跟车速度 ​

  3. 由跟车速度更新车辆位置:​x(t+1) = x(t) + \Delta t*v(t+1)

改进的 Krauss model

尽管 SUMO 中包含了上述原始 Krauss model,但是没有作为默认 car-following model,而是做了较大改动。改进模型与原始的 Krauss 模型的出发点是相同的:在保证不碰撞的前提下,车速尽量的快。但在计算安全速度方面,与原始 Krauss 完全不同。

改进的 Krauss model 依然基于上述公式 (1),但并没有采用泰勒展开方式近似表达刹车距离函数 L( \cdot),而是直接数值计算。步骤与源码实现如下:

  1. 计算前车的刹车距离

t = \frac{v_l}{b} \\ L(v_l) = v_lt - \frac{1}{2}bt^2

上式中 t 为前车速度减到 0 需要的时间。

在 SUMO 源码中通过 brakeGapEuler 函数 实现上述计算过程。

这里需要注意的是,SUMO 默认采用 Euler 数值积分方式,在计算位置时公式如下:

x(t+1) = x(t) + \Delta t* v(t+1)

t+1 时刻的位置等于 t 时刻的位置加上 t+1 时刻的速度造成的位置变化。

明白了这种积分方式才能更好的理解源码中的计算公式。

  1. 基于公式 (1) 计算 v_f. 基本思想是找到一个安全跟车速度使得后车在此速度下刹车距离 (包括反应距离) 正好等于前车的刹车距离加上原本两车间距。具体在 maximumSafeStopSpeedEuler 函数中实现。

得到安全跟车速度之后,其余部分与原始的 Krauss model 类似的,要与允许的最大速度比较,并且考虑随机因素。具体在 followSpeed 函数dawdle2 函数 中实现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343