本篇内容主要是介绍Prescan和Sumo的联合仿真方式,可以掌握sumo和prescan联合的方式。
01.Sumo简介
Sumo是比较目前比较常见也是开源的交通流仿真软件。他是一个微观的,空间上连续,时间上离散的交通仿真软件,采用c++语言开发,其宏观特征包括带变道的多车道道路,基于道路交叉口的靠右侧行驶规则,支持动态路由,可以管理超过10000条街道的网络。其微观特征包括允许碰撞自由的车辆移动模式,支持单车路由。该软件特点是具有快速的OpenGL图形界面,支持多种网络格式输入,缺点是Sumo本身不能提供网络仿真器所需要的轨迹文件。
Sumo可去官网下载,解压后就可以使用,图形界面软是在解压后bin文件夹下的sumo-gui.exe。使用前最好设置环境变量SUMO_HOME。其实不设置似乎也可以使用,但是会有警告。SUMO_HOME的内容就是安装文件的位置,也就是bin文件夹的上一级目录。
Sumo解压之后,作重要的是bin文件夹下的程序和tools文件夹下的程序。bin文件夹下大部分是可执行文件,但是并不像普通的可执行文件一样打开,而是需要用命令行打开,换句话说,整个功能程序并没有被包装起来,这是出于可裁剪和可维护性角度考虑的。tools下的工具则更多的是用Python写的。
02.Sumo简单建模
由于本篇主题是Prescan和Sumo的联合仿真所以在此简单讲一种在Sumo中快速建模的方式,其他方式有待大家自己学习。
第一步,安装sumo 和对应版本的Python(https://sumo.dlr.de/docs/Downloads.php)
第二步,生成交通流,打开开始菜单栏启动OsmWebWizard,该Python程序会打开OSM官网,大家可以选择感兴趣区域并利用sumo工具设定交通参与者数量(如下图),生成结束后会自动弹出仿真窗口,并且在相应路径下会产生对应工程文件,我们着重关注的是如下几个文件:
-
osm.sumocfg:sumo的配置文件
-
osm.net.xml:路网信息
-
osm.passenger.trips.xml: 交通流信息
第三步:为了能够使得prescan和sumo联合仿真需要在sumo的配置文件中设定于第三方的网络通讯接口(选择未被占用的网络端口如29010)。
第四步:将sumo地图转换成Opendrive导入Prescan。可以利用一下命令将sumo路网转换成可导入Prescan的Opendrive高精度地图
netconvert -s osm.net.xml --opendrive-output WhateverNameYouLike.xodr
第五步:建立prescan实验放置车辆若干,并且放置主车。在实验文件中新建simcpp文件夹,并且编写Prescan C++ main程序和CMakeLists.txt(样本程序可向Prescan技术支持索取)(该联合仿真基于的是Prescan C++版本)
第六步:将Prescan与sumo的接口函数也放置于该实验文件中(接口函数可以向Prescan技术支持索取)。
第七步:修改prescan main.cpp 中的通讯端口使其与在sumo配置文件中的端口一致。
修改实验路径。
第八步:利用Cmake编译Prescan工程(具体步骤见Prescan C++ 版本操作介绍)
第九步:利用vs 编译工程形成可执行文件。
第十步:打开sumo,打开sumo时Starting server on port 1156,说明sumo正在等待prescan打开。运行第九步生成的可执行文件启动prescan当prescan启动后,运行sumo,即可。
更多详细信息,敬请关注公众号【经纬数智】