赞
踩
车联网可以通过veins+omnetpp+sumo联合的方式进行仿真。其中veins可以配置车联网的参数,omnetpp可以仿真网络的连接和衰减,而sumo可以生成道路网和车辆流用于仿真。
目录
近年来,随着汽车数量持续增长,城市交通拥堵日趋凸显,再加上道路的越发增多,如没有一种手段使道路信息实时更新,人们出行难度与出行效率就会越发不尽如人意。车辆的增多不仅引发了交通堵塞、空气污染等诸多现实问题,并给交通安全带来了较大影响,严重影响到人们的生活质量和社会的发展。车联网的出现,使得道路信息的传递方便快捷,使得人们能够更好的认识道路与周边信息,改善了出行效率,保障了驾驶安全。
车联网于国外起步较早,旨在推动车间网联系统的发展,其中基本的功能包括导航或者求救,且近年来已经能够实现简单的实时通信(如实时导航与实时监控)。目前车联网的进一步发展将建立在互联网技术之上。
目前,发展车联网已经逐步提到了国家创新战略层面。在未来,车载互联网将与人工智能和大数据分析等技术结合在一起,并逐步与移动互联网相结合,不仅能为用户提供更具个性化的定制服务,更能够推动自动驾驶等的智能交通系统的发展。
车联网(Internet of Vehicles)概念引申自物联网(Internet of Things),是以车内网、车际网和车载移动互联网为基础,按照约定的通信协议和数据交互标准,在车-X(X:车、路、行人及互联网等)之间,进行无线通讯和信息交换的大系统网络,是能够实现智能化交通管理、智能动态信息服务和车辆智能化控制的一体化网络,是物联网技术在交通系统领域的典型应用。
车联网的实现需要多端协作推动标准化的制定,但目前而言,这个目标还远远没有达成。
在布局方面:有的车企自主研发,有的车企与互联网技术公司合作,比如奥迪中国、通用、一汽大众、奔驰、宝马等大型汽车制造商都纷纷与百度达成了战略合作。
现在车联网的实现分为三类:
(1)每个车企各自为战
自建“智能、联网”汽车,例如:福特SYNC、宝马iDrive、通用OnStar、上汽inkaNet、长安Incall等,不同牌子的车无法交互。
究其根本,主要是他们还停留在端的层面,他们能完成汽车内容的信息传输和交换,但真正的车联网还需要接入互联网,通过互联网与车外的一切(路况、前后车、行人等)实现交互。
(2)对操作系统应用车载App的开发
利用联网技术,使汽车与手机连接,实现司机对汽车更便捷、智能化的控制。
但carplay基于ios系统运行,有些应用基于Android系统运行,这解决了云端的问题,但如何实现两者信息互通,也是未来标准化的方向。甚至出现了以手机为端,通过投屏的方式投射到中控大屏显示。这种方式固然解决端与云的问题,但交互的不便使得其不能长久发展。
第三类,是盒子+App的组合,通过盒子,完成数据传输到云,并显示在App上的一种方法。
这种方法可以说是目前比较进步的做法,既能获取到相应的汽车状况数据也能实现数据的传输与显示。
这三类方式是在探索车联网最终实现的不断尝试,但目前车联网的实现仍然面临不少问题:
(1)产业链的多方博弈,缺少领头
涉及车联网的主要有以下几方:汽车制造、内容提供及移动通信,车联网为他们都带来不少机遇。
汽车行业可以由单纯的汽车销售,转化为硬件、内容、服务一体化的移动出行服务商;同时又能让通信运营商及内容提供商,迅速绑定车主高端客户群体。
但是车联网产业链上有汽车厂商、移动运营商、汽车电子企业、互联网科技公司等诸多玩家,他们都从自身资源及技术优势入局,试图在未来车联网市场上分一杯羹,但是由谁来主导、制定标准、分配利益,进而实现整个产业的协同发展,至今仍是一个难题。
(2)核心技术的突破问题
车联网涉及多个领域的技术突破,例如通信速度和运行速度提升,智能语音技术的准确度,视觉识别系统的准确性,车辆标识与互通等,这些都是需要一步步进行技术升级与革新的。
(3)数据互通问题
这个问题与问题一类似,每个车企都希望自己能首先实现车联网,这种前提下的各自开发存在数据不互通的问题,数据是车联网的根本,通过对数据的统一处理和算法方能造就统一的车车互联,或者是制定一个大家共同遵守的标准。
在这种情况下,最好的方式是通过一个统一的云端平台实现,在这方面,互联网行业的大佬们或许更有能力。
但是,随着技术的不断发展,车联网的实现前景是可以期待的。在政府政策的扶持下,各方共同努力下,人们对智慧城市的满腔期望中,车联网的步伐正一步一步向前迈进。
本车联网是基于无基础设施设计的,考虑到一些地区和道路上,设置基站耗资或者偏远地区设置基站投资不成正比等原因,采用无基础设施的模式。此外采用无基础设计的模式车联网的设计还比较灵活。
车联网当中,车辆之间的通信要求很高,以便对车辆的行为进行及时快速的协调。
设计思路:主要基于目前计算机通信网络的网络设计理念来进行车联网的设计
设计对照:详见下图
图一.设计对照图
参照计算机通信网络的内容,先对车辆进行ID的设计,之后把车辆当作路由器可以进行消息的转发和组网互联。最后就需要考虑车辆之间的路由转发,把计算机通信网络中的路由转发方案进行改进,应用到我们的车联网设计当中。
设计流程:在我们的设想中,车联网中的每一辆汽车只会与它附近的车辆直接通信,通过下文将要提到的车联网ID系统识别对方的身份,同时考虑到路况多变,车联网中的链接应该是动态的,笔者设想的链接方式如下:
图二.组网示意图
图中中心×号的为当前车辆,其他的为其他车辆。当其他车辆进入虚线框中时,我们的当前车辆会和它建立预链接但是不传递除位置外过多信息。当车辆进一部进入实线框中时,我们的车辆会和它建立全连接。此时它们之间通过这个局域网共享许多的行驶信息。
当车辆之间建立局域网之后,就是车辆之间的消息发送和接收。因为该车联网的设计是没有基础设施(基站等)进行支撑的。所以我们就采用分布式设计,采用分布式路由算法进行路由转发。
考虑到在同一个车联网组成的局域网中,我们只需要区分这个局域网内的每一辆车并且使得新加入局域网内部的车辆他的ID不会和局域网内已有的车辆ID重复。
我们的设想是,当车辆启动时,它会和一个管理车联网的大平台进行通信,此时平台要分配给它一个ID。那么我们是怎么做到同一局域网内ID不同的呢?因为我们车辆的通信一般是一个小范围的通信,所以每个车联网的大平台只需要管理它这一部分地区的车辆的ID信息不重复,当车辆行驶到另一个平台管理的区域时,就像移动通信互联一样,平台会重新给他分配一个ID,这样就可以实现我们所要求的功能。
图三.车辆IP设计
关于车辆互联组网的逻辑过程如下图所示:
图四.组网简易流程图
具体流程如下:当车辆在行驶的过程当中,如果在车辆设定组网半径的范围内没有其他车辆,车辆就无法与其他车辆进行组网;反之,在组网半径内的车辆都可以进行组网进行通信。
关于组网的具体方式是:
每隔一定的时间,车辆会定时向外界广播自己的信息(自己的ID,当前节点的位置、速度、所处道路ID等信息)。然后周围的车辆接收到这些相关信息之后会加入自己的邻居节点信息表内。
由前面的组网方式可以知道,车辆在一定范围内可以进行组网。在构成一张网络拓扑图之后,由于在整个车联网当中,车辆的数目有限,我们直接采用分布式路由中的洪泛协议进行转发。
具体流程就是:车辆当有信息要转发的时候,就把信息向邻接的路由器进行转发,之后相应的进行转发,不转发入口处的路由信息。
车辆路由转发洪泛的详细设计:
图五.路由洪泛
当车辆有消息要进行转发时,就会进行洪泛,指导匹配到目的IP 的车辆。洪泛过程中也会采用一定的措施来解决广播风暴等问题。
在仿真及验证部分,我们查阅资料,了解到车联网可以通过veins+omnetpp+sumo联合的方式进行仿真。其中veins可以配置车联网的参数,omnetpp可以仿真网络的连接和衰减,而sumo可以生成道路网和车辆流用于仿真。
由于本次仿真采取三个软件联合仿真的方式,三个软件之间版本需要互相适配。通过veins官网的查询和前人的经验,最终决定采用veins-4.7.1+omnetpp-5.4.1+sumo-0.30.0的版本进行仿真。
在编译omnetpp之前电脑上应该首先安装好python和mingwenv,否则会导致编译失败。之后打开omnetpp文件夹中的mingwenv.cmd便可以进入命令行,输入./configure后等待便可以完成编译。完成编译后输入omnetpp便可打开窗口如下:
|
通过在上文中的命令行中使用cd指令进入veins中的examples/veins文件中,通过命令C:/che/sumo-0.30.0/bin/sumo.exe -c erlangen.sumo.cfg让sumo基于sumo.cfg的配置文件运行。之后用命令C:/che/veins-veins-4.7.1/sumo-launchd.py -vv -c C:/che/sumo-0.30.0/bin/sumo.exe建立omnetpp和sumo的连接。当显示“Listening on port 9999”说明应用间的TCP通信已经建立。
通过OpenStreeMap导出想要仿真的路段,网址为https://www.openstreetmap.org/
通过选中区域后导出,便可以得到.osm格式的文件。
要想完成路网的转换并且生成车辆流文件,必须完成对SUMO_HOME的配置。否则在调用.py文件时会报错找不到SUMO_HOME。
配置方法:打开系统的环境变量设置,添加一个变量为SUMO_HOME,路径为sumo的文件夹。
之后在Path中讲sumo文件夹下的bin和tools都加入其中。
|
在系统变量和用户变量中都进行同样的操作后关机重启。
将第一步中生成的osm文件放入sumo下的tools文件夹中,在此文件夹中打开cmd控制台。通过命令netconvert --osm-files map.osm -o map.net.xml便可以生成路网文件。在生成的过程中可能会有很多warning,这是因为有些类型的路面,如铁轨等被视为不稳定路面,我们可以不用在意他,只要最后提示success即为成功。
基于已经生成的路网文件,我们便可以继续调用sumo给的工具生成随机车辆流。通过命令python randomTrips.py -n map.net.xml -r map.rou.xml -e 200 -p 0.1 -l便可以生成车辆流文件。其中-e后表示车辆流结束时间,要与之后的仿真时间对应。
当有了路网文件和车辆流文件后,我们需要使用配置文件来连接和运行他们。在同一个文件夹中新建记事本后写入以下内容:
- <?xml version="1.0" encoding="iso-8859-1"?>
-
- <configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.sf.net/xsd/sumoConfiguration.xsd">
-
- <input>
- <net-file value="erlangen.net.xml"/>
- <route-files value="erlangen.rou.xml"/>
- <additional-files value="erlangen.poly.xml"/>
- </input>
-
- <output>
- <tripinfo-output value="tripinfos.xml"/>
- <fcd-output value="fcd.xml"/>
- </output>
-
- <time>
- <begin value="0"/>
- <end value="1000"/>
- <step-length value="0.1"/>
- </time>
-
- <report>
- <no-step-log value="true"/>
- </report>
-
- <gui_only>
- <start value="true"/>
- </gui_only>
-
- </configuration>
其中重要的内容为input和output。通过input选择路网文件、车辆流文件以及建筑物文件。通过output可以输出仿真结果,最后通过画图展示。
保存后重命名为erlangen.sumo.cfg。之后使用sumo.gui.exe的方式打开。能够正常在sumo中仿真说明路网文件和车辆流文件没问题。
|
我们将每辆车定义为一个网络节点,其网络信息由网络层管理并且传输到其应用层控制车辆的行为。其结构图如下:
其中nic为网络控制器接口,我们采用802.11p协议,这个协议本身为了快速车辆之间互联而设计。
之后再修改omnetpp.ini文件,配置车辆网络的衰减模型、车辆之间的连接方式以及连接距离等重要参数后便可以开始仿真。
具体的仿真窗口如下:
|
其中最左边的窗口可以看到我们整个仿真文件的结构。
|
而下方窗口可以看到实时的事件情况。
|
|
图中红圈标注的70号车在103s000ms002us216ns455ps时发出突发事件提醒给周围车辆。
|
大概一秒的时间,周围车辆便全部收到提醒。
|
之后再过1s的时间后70号车收到ack。可以看到消息传递的速度非常快,能够满足车联网对于实时性的要求。
车辆在路中行驶时,极易形成一个车队的形式,那么消息从车队的头部传导到尾部的时间也是其中的一个重要参考指标。
|
第31秒时,车队的头端发送突发事件,最终用时两秒多完成从车队头到车队尾11个车的传递。
|
车辆的速度与事件的关系图如下:
|
图中不同颜色代表不同车辆随时间的速度变化。可以看到大部分车辆在大多数时候都可以保持较高的车速,只有在出现突发状况(红绿灯、变道、车辆汇入)的时候车速会下降。说明此车联网具有高效性,能够保证车辆尽量快地运行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。