基于 VC++的车辆跟驰模型的实现
http://www.paper.edu.cn
常永继,秦鸣
华东交通大学交通工程研究所,南昌 (330013)
E-mail:changyongji1118@yahoo.com.cn
摘 要:本文利用纯微观跟驰模型,在 VC++环境下实现了单车道的车辆跟驰,并给出了在
程序的实现过程中的一些关键代码。
关键词:Visual C++;跟驰模型;交通仿真
中图分类号:U49
1.引言
对城市交通,特别是对交叉口进行交通仿真是解决交通问题的重要方法之一。跟驰模型
在仿真中占有重要地位,笔者在开发的单车道车辆跟驰模拟程序中采用的是纯微观跟车模型
[1]。
2.纯微观跟车模型
在实际交通流中,后车跟随前车是一种常见现象,跟车模型就是用来描述在非自由交通
流状态下后车跟随前车的行驶特性。纯微观跟车模型注重了突出仿真模型的特点,适合于在
计算机仿真中使用[2]。
(1)计算下一个仿真步长里车辆的行驶状态
后车在下一仿真步长里的行驶状态取决于前车与它之间的距离,即要保证如果在此时前
车突然紧急刹车,后车能以正常的减速度平稳地停车而不至于和前车发生碰撞。具体流程图
如图 1 所示。
图 1 下一仿真步长内车辆行驶状态判断流程图
Fig 1 Flow chart of vehicle state judge in the next simulation step
图 1 中:
- 1 -
D——前后车之间的距离
maxD 、 minD —— 前后车之间的最大安全距离和最小安全距离
http://www.paper.edu.cn
V
i
t
( )
2
1
+
V t
(
i
1
+
( ))
+
L
+
D
max
=
V t T
( )*
i
1
+
min
1( )*
a
2
−
normal
V t T L
+=
+
i
D
maxV ——车辆最大速度
iV t
1( )
+ ——后车速度
a
V t
(
−
normal
i
( ))
1
+
iV t
——后车 t 时刻 1( )
+ 速度下的正常减速度
T——后车司机的反应时间
L——前后车之间最小的安全停车距离
(2)确定下一仿真步长里车辆的加/减速度值
根据已经确定的下一仿真步长里车辆的行驶状态来确定加/减速度值,图 2 是计算下一
仿真步长内车辆加速度的时空分析图。
图 2 跟车时空分析图
Fig 2 Analysis of Space-time of car following
图 2 中:
( )D t ——t 时刻前后车之间的车头间距
D t
(
)
''
t
'
)
t+ ——t+ t 时刻前后车之间的车头间距
t T t
+ + + +
t+ ——前车 t 时间内行驶的距离, t 为仿真时间
)
t T t
+ + +
——前后车都停车后的车头间距
)
'
——前车从 t+ t 时刻起开始减速所需停车距离
D t
(
iD t
(
iD t
(
- 2 -
http://www.paper.edu.cn
——后车从 T+t 时刻起减速所需的停车距离
'
''
t
)
t T t
+ + + +
iD t
1(
+
iX t ——t 时刻前车的位置
( )
iX
t
1( )
+ ——t 时刻后车的位置。
t T t
+ +
t
t+ ——后车所需的停车时间
'
t T t
t
+ + + +
D t
(
''
'
'
——前车所需的停车时间
整理后得到:
式中:
''
)
=p+q+r
p X t
( )
=
i
−
X
i
1
+
t
t V t
( )
( )
+
+
i
q
= −
1
2
2
t
−
T
t
*
−
V
i
a
−
normal
a
2
−
normal
t
*
1
+
V t
(
i
( ))
1
+
2
V t
( )
i
V t
(
i
( ))
−
V t
i
1
+
t T
( )(
+
)
−
2
V
i
t
( )
2
1
+
V t
(
i
1
+
( ))
a
−
normal
r
= −
t
2
V t
(
i
1
+
( ))
a
2
−
normal
从安全角度考虑,显然有:
D t
(
t T t
+ + + +
'
''
t
)
≥
L
在程序的运行中,如果后车加速,则将
等分成 n 份(n 取 5~10),依次取
加速度的(n-1)/n、(n-2)/n、(n-3)/n……. 1/n 倍,代入上式进行计算,如果等式成立,
1
+
a
+
normal
V t
(
i
( ))
则为下一仿真步长内后车采用的加速度值。后车减速时,则将
a
−
normal
V t
(
i
( ))
1
+
等分成 n 份(n
a
−
normal
V t
(
i
( ))
取 5~10),依次取加速度
代入式中计算,如果满足条件则为下一仿真步长内后车采用的减速度值。
3.VC++程序的实现
1
+
的 1/n、2n、3/n….. (n-2/)n、(n-1)/n、n/n 倍,
我们利用 VC++中的链表来表示每次产生的车辆,构造如下的链表,将每次产生的车辆
的一些特征值记录下来[3-4]。
Struct car
{
int car_x; //车辆的 x 坐标
int car_y; //车辆的 y 坐标
double car_speed; /车辆的速度
int car_id; //车辆辆编号
double car_speed_limit; //车辆的最高速度
car * pNext;
};
在 onTimer 时钟响应函数中,算出 D, maxD 和 minD ,按照图 1 的流程图进行计算,下
面给出求车辆加速度的函数代码:
/////////////////求当前车辆的加速度////////////////////////
// car_speed_l 前车速度,car_speed_f 后车速度,car_x_l 前车 X 坐标,car_x_f 后车 X 坐
- 3 -
http://www.paper.edu.cn
标
double jiasudu(double car_speed_l,double car_speed_f,int car_x_l,int car_x_f)
{
double a_normal=6; //车辆的正常加速度值,本程序中取 6
for(double i=1.0;i>-0.1;i-=0.1)
{
if (car_x_l-car_x_f+car_speed_l+pow(car_speed_l,2)/24-car_speed_f*2-
pow(car_speed_f,2)/12+(-3/2-car_speed_f/3)*a_normal*i+(-pow((a_normal*i),2)/6)>100)
//此处 100 为本程序中设置的前后车最小安全距离
return a_normal*i;
}
}
车辆减速度的求值和加速度类似,此处就不再给出。求出了车辆在下一仿真步长内的加
/减速度值,就能得到下一仿真步长内车辆的速度。最后遍历链表画出车辆,就能以动画的
形式表现出车辆的跟驰特性了,程序运行效果如图 3 所示。
图 3 单车道车辆跟驰模拟图
Fig 3 Simulation of single lane car-following
4.结束语
本文着重于跟驰模型在 VC++中的实现,用链表来表示各车辆的不同特征值,利用 VC++
的消息循环机制,将公式化的模型用动画的形式表现出来,最后编写出来的仿真程序运行良
好,充分表现出了车辆的跟驰特性。
- 4 -
http://www.paper.edu.cn
参考文献
[1]邹智军.杨东援. 交通仿真系统中的纯微观跟车模型[J]. 同济大学学报,2001 年 8 月,第 29 卷第 8 期
[2]王炜.过秀成. 交通工程学[M]. 南京:东南大学出版社,2000.10
[3]刘运通.石建军.熊辉. 交通系统仿真技术[M].北京:人民交通出版社,2002 年 9 月
[4]戴锋. Visual C++程序设计基础[M].北京:清华大学出版社,2001 年 4 月
Realization of Car-following Model Based On Visual C++
Institute of Traffic Engineering of East China Jiaotong University,Nanchang (330013)
Chang Yongji,Qin Ming
Abstract
Based on pure micro car-following model, car following activity on single lane is realized based on
visual c++, and some key codes in realizing the program are given in the paper.
Keywords:Visual C++;car-following model;traffic simulation
作者简介:常永继(1984-),男,硕士研究生,主要研究方向是交通运输规划与管理。
- 5 -