首页 > 编程知识 正文

SUMO轨迹输出,rayleigh plesset 方程 模拟

时间:2023-05-04 06:59:16 阅读:136680 作者:14

VANET是一种特殊的自组织网络,其特殊性主要转化为应用场景,因此场景对VANET的仿真至关重要。

在sensor network这样的传统自组织网络中,模拟场景通常是随机分布的,只需随机移动即可; 但车辆运动的规律性和动态性对网络各项指标的性能有很大的影响,评价一个VANET算法(路由、MAC、广播)需要合适的场景。

目前对VANET的协议算法的仿真主要是OMNET、NS2/3两个软件,我使用的是前者。 在OMNET中,本身没有VANET仿真模块。 为了解决这个问题,[1]开发了开源Veins仿真框架。 Veins包含基本的802.11p/1609.4模块和简单的APP应用层数据生成框架。

Veins的模拟需要使用SUMO生成模拟场景。 SUMO其实是一个开源的交通模拟软件,可以生成真实的交通轨迹场景。 之所以真实,是因为综合了车辆的行驶规则、驾驶习惯等重要内容。 SUMO通过Traci扩展包与Veins、NS2等外部程序进行通信,将SUMO中的车辆轨迹输入到其他外部程序中以便使用。

通常,使用SUMO生成场景需要节点文件、edge文件、流文件和route文件。 这些文件都是XML格式。 以高速公路场景为例说明整个过程。

首先定义节点(highway.node.xml)节点包含坐标、id和节点类型type等属性,此处列出的属性是必填属性,其他属性具有默认值或选项。 具体请参考[2]。

nodes nodeid=' node1' x='0' y=' 100 ' type=' priority '/nodeid=' node2' x=' 5000 ' y=' 100 ' type=' priorioriority

在以上面已经定义好的节点基础上,我们定义边edge(highway.edge.xml)。

edgesedgeid=' edge1' from=' node1' to=' node2' priority=' 75 ' num lanes='2' speed=' 40 '/edge id=' edge2' prid 和edges一样,边缘edge也包含很多属性。numLanes定义了那一边的车道数,speed表示那一边的最大行驶速度。 定义edge和node后,使用netconvert命令将其转换为net文件(highway.net.xml ) :

net convert-- node-files=highway.node.XML-- edge-files=highway.EDG.XML-- output-file=highway.net。

pre name=' code ' class=' html ' flowsvtypeid=' vtype0' Accel=' 2.9 ' decel=' 7.5 ' sigma=' 0.5 ' length=' 4.3 '

在猫头鹰文件中

中,定义了车辆类型(包含车辆的各种参数,例如加减速度、驾驶习惯参数、长度和间距等);此外还定义了最重要的车流(flow),车流中包含之前定义好的车辆类型、起始位置和终止位置(以边来作为标识,这说明要定义正常的道路,至少要三个node)、车辆产生间隔(s)period以及车辆插入道路的位置(详细的选项见[3])。
    接下来,使用duarouter命令将net文件和flow文件转化为route文件:

duarouter -n highway.net.xml -f highway.flow.xml -o highway.rou.xml --randomize-flows --random

转化后的route文件如下:

<pre name="code" class="html"><routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo-sim.org/xsd/routes_file.xsd"> <vType id="vtype0" length="4.30" minGap="2.00" maxSpeed="22.22" speedFactor="1.00" speedDev="0.15" color="yellow"> <carFollowing-Krauss accel="2.90" decel="7.50" sigma="0.50"/> </vType> <vehicle id="flow0.0" type="vtype0" depart="0.00" departLane="best" departPos="base" departSpeed="max"> <route edges="edge1 edge2"/> </vehicle> <vehicle id="flow0.1" type="vtype0" depart="1.00" departLane="best" departPos="base" departSpeed="max"> <route edges="edge1 edge2"/> </vehicle>......... <vehicle id="flow0.499" type="vtype0" depart="499.00" departLane="best" departPos="base" departSpeed="max"> <route edges="edge1 edge2"/> </vehicle></routes>

从上面生成的代码可以看出,其实我们可以自己手动的写route文件。

在弄好这些文件后,编写sumo配置文件highway.sumo.cfg:

<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.sf.net/xsd/sumoConfiguration.xsd"> <input> <net-file value="highway.net.xml"/> <route-files value="highway.rou.xml"/> </input> <time> <begin value="0"/> <end value="500"/> <step-length value="0.1"/> </time></configuration>以上文件弄好后,放入OMNET++&Veins中(详见Veins官网和Veins中的例子),就可以进行最后的仿真了。


事实上,要使得自己的场景更符合实际情况,还有很多东西需要注意:首先是车辆的自身参数要符合实际情况(speed factor et. al);其次是车辆跟随模型;此外还需要在duarouter中使用--randomize-flows --random等参数,使得车辆的到达间隔不是一个固定的值。

此外,在很多论文中,作者都倾向于假设车辆在道路上是服从possion分布的,这一点我还没实现。我现在的想法是:固定的period可以对应一个Vehicle/km,以此作为初步解决方案。如果有朋友碰巧看见拙文,并且知道possion分布如何实现,麻烦告知。



[1] http://veins.car2x.org/

[2] http://sumo.dlr.de/wiki/Networks/Building_Networks_from_own_XML-descriptions

[3] http://sumo.dlr.de/wiki/Definition_of_Vehicles,_Vehicle_Types,_and_Routes


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。