logo资料库

基于VC++的车辆跟驰模型的实现.pdf

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
基于 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 -
分享到:
收藏