SUMO入门(八) - TraCI

TraCI
TraCI/Interfacing TraCI from Python

TraCI 是 “Traffic Control Interface” 的简写。
通过访问正在进行的道路交通模拟,它可以检索仿真对象的值并“在线”操纵它们的行为。

1 使用TraCI

SUMO启动

TraCI 使用基于TCP的客户端/服务器的体系结构来提供对SUMO的访问。

因此,SUMO充当使用其他命令行选项启动的服务器:–remote-port <INT> ,其中<INT>是SUMO用于侦听传入连接的端口。 可以连接的客户端数量可以作为附加选项 –num-clients <INT> 给出,其中1是默认值。 请注意,在多客户端方案中,您必须使用 SetOrder-command 明确指定客户端的执行顺序。

当使用 –remote-port <INT> 选项启动时,SUMO仅准备模拟并等待所有外部应用程序连接并接管控制。
SUMO作为TraCI服务器运行时,将忽略 –end<TIME> 选项,SUMO将一直运行,直到客户端要求仿真结束
使用 SUMO-GUI 作为服务器时,必须使用 播放按钮 或在处理TraCI命令之前设置选项 –start 来启动仿真。

关闭仿真

使用 TraCI 时,将忽略SUMO的 –end<TIME> 选项。 而是通过发出 close命令 来关闭仿真。
要检测所有路径文件是否已用尽且所有车辆都已离开仿真,可以检查命令 getMinExpectedNumber 是否返回0。一旦所有客户端发送了 close 命令,仿真将立即结束。

也可以使用load-command通过新的参数列表重新加载模拟。

TraCI命令

TraCI命令分为13个部分,它们对应于各个模块: gui,lane,poi,simulation,trafficlight,vehicletype,edge,inductionloop,junction,multientryexit,polygon,route,person,vehicle
有关函数的详细列表,请参阅 pydoc generated documentation。命令的源代码可以在eclipse/sumo找到

协议规范

请参阅 TraCI协议规范(包括基本流,消息,数据类型)

2 使用SUMO作为库

通常,TraCI用于耦合多个进程:SUMO服务器进程和一个或多个TraCI客户端进程。

或者,Libsumo可用于将SUMO作为库嵌入到客户端进程中。 这允许使用与客户端库中相同的方法签名,但避免了套接字通信的开销。 Libsumo支持使用SWIG生成客户端库,因此可以与大量编程语言一起使用。

3 使用示例

有一个使用TraCI进行自适应交通灯的教程(使用Python)。
Tutorials / CityMobil 教程 使用TraCI为车辆分配新路线(使用Python)。
Tutorials / TraCIPedCrossing 教程 使用TraCI构建一个带有行人触发交通信号灯的交叉路口。

4 资源

4.1 编程语言接口

PythonInterfacing TraCI from Python 允许使用Python与SUMO交互,支持所有TraCI命令
Java,.NET,…任何可以做SOAP的东西: TraaS是TraCI的Web服务适配器,允许为多个语言生成自动API。 API完整性很高但通常落后于python客户端。 TraaS也可以用作独立的TraCI客户端
Matlab :TraCI4Matlab并非所有TraCI命令都已实现
C++:C++ TraCIAPI 是客户端库,它是SUMO源代码树的一部分(API范围几乎覆盖)
C++:Veins项目提供了一个用于将SUMO与OMNET ++耦合的中间件。 作为基础架构的一部分,它为TraCI API提供了一个C++客户端库(API完整性稍微落后于python客户端)
.NET:TraCI.NET是一个几乎覆盖完整API范围的客户端库

4.2 V2X仿真

TraCI允许将SUMO通信网络模拟器结合使用,以模拟车辆通信。 有关可用解决方案的列表,请参阅 Topics/V2X。

5 性能

使用TraCI会降低仿真速度。 减速量取决于许多因素:每个仿真步骤中TraCI函数的调用数、被调用的TraCI函数的类型、TraCI脚本中的计算过程、客户端语言

例如,考虑在每个模拟步骤期间检索每个车辆的x,y位置(使用python客户端):

   while traci.simulation.getMinExpectedNumber() > 0: for veh_id in traci.vehicle.getIDList():position = traci.vehicle.getSpeed(veh_id)traci.simulationStep()

该脚本每秒可处理约25000辆汽车。
使用embedded python将其增加到每秒约50000辆
通过使用 subscriptions,相同的值检索也可以加速到每秒50000辆车:

   while traci.simulation.getMinExpectedNumber() > 0: for veh_id in traci.simulation.getDepartedIDList():traci.vehicle.subscribe(veh_id, [traci.constants.VAR_POSITION])positions = traci.vehicle.getSubscriptionResults()traci.simulationStep()

在Bologna scenario中使用此脚本(9000辆车,5000个模拟步骤)时,记录了以下运行时间:
没有TraCI :8s
普通位置检索:90s
使用 subscriptions 检索:42s
使用embedded python进行检索:46s
使用 subscriptions 和 embedded python 进行检索:34s

SUMO入门(八) - TraCI相关推荐

  1. Sumo入门和Traci接口使用

    正好项目中用到Sumo软件, 发现网上关于sumo的中文材料非常少, 所以我想记录一些自己使用sumo过程中的经验和教训; SUMO的官方网站是 https://sumo.dlr.de/pydoc/ ...

  2. python文件路径过滤器_SUMO入门(八) - 从Python引入TraCI接口

    SUMO入门(八) - 从Python引入TraCI接口 TraCI TraCI/Interfacing TraCI from Python TraCI命令分为13个部分,它们对应于各个模块: gui ...

  3. sumo添加车辆_Sumo入门和Traci接口教程

    因为正好项目中用到Sumo软件, 发现网上关于sumo的中文材料非常少, 所以我想记录一些自己使用sumo过程中的经验和教训; SUMO的官方网站是 https://sumo.dlr.de/pydoc ...

  4. SUMO入门(六) - 交通灯

    SUMO入门(六) - 交通灯 Simulation/Traffic Lights 通常,NETCONVERT 和 NETGENERATE 在计算网络期间为交叉口生成交通信号灯和程序. 尽管如此,这些 ...

  5. 脑残式网络编程入门(八):你真的了解127.0.0.1和0.0.0.0的区别?

    本文由"小姐姐养的狗"原创发布于"小姐姐味道"公众号,原题<127.0.0.1和0.0.0.0地址的区别>,收录时有优化和改动.感谢原作者的分享. ...

  6. CSS入门八、CSS3动画

    零.文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789 个人博客-GiteePages:https://bluecusliyou.gi ...

  7. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    转自即时通讯网:http://www.52im.net/ 本文原作者:"水晶虾饺",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说" ...

  8. java游戏开发入门(八) -图像

    java游戏开发入门(八) - 图像 前言 图片资源 首先我们来改造一下我们的Player实体 方法说明 效果展示 完整项目 前言   前面那么多基本上一个游戏需要的逻辑就差不多了,但是看上去还非常丑 ...

  9. SUMO入门(三) - 路网

    SUMO入门(三) - 路网 Networks/SUMO Road Networks SUMO network file 网络文件描述了交通相关的地图.道路和交叉口. 虽然XML文件我们可读,但SUM ...

最新文章

  1. SQL Server(五)——常用函数
  2. c++学习笔记之友元函数
  3. 深入解析Java字节码和字节码操作类库ASM源码解析
  4. 2016电大计算机网考,2016年电大-电大计算机网考题库[].doc
  5. Angular jasmine fixture.detectChanges如何触发directive的set方法
  6. linux c通过文件描述符以及write和read方法对文件进行读写
  7. 4个万无一失的技巧让您开始使用JBoss BRMS 6.0.3
  8. 使用 QuickBI 搭建酷炫可视化分析
  9. C++开源库详细介绍
  10. angularjs1-2,作用域、代码压缩
  11. html视频播放快进按钮,【浏览器插件】Video Speed Controller – 网页视频倍速、快进、回放功能0.07~16 倍...
  12. kafka 拉取的数据排序_Kafka 源码解析之 Consumer Poll 模型(七)
  13. 电力安全工作规程发电厂和变电站电气部分_电气主接线知识精讲!
  14. ASO优化之教你如何得到ASO优化100关键词字符
  15. Android内存和SD卡的数据存取
  16. 5G工业无线网关在物联网的应用优势
  17. luogu P3899 [湖南集训]谈笑风生 线段树合并
  18. sql之浅谈视图的作用
  19. 净值继续回落,短期弱势难改
  20. nodejs中的__filename和__dirname的使用说明

热门文章

  1. 再别康桥 --徐志摩
  2. 缓存模式(Cache Aside、Read Through、Write Through、Write Behind)
  3. 西电计算机学院王宇平,王宇平 | 个人信息 | 西安电子科技大学个人主页
  4. 虚拟地址 线性地址 物理地址 傻傻分不清楚?
  5. 个人阿里云服务器初始化安装服务
  6. 程序员和产品经理的工作强度对比
  7. 读书笔记二《产品经理从入门到精通》
  8. 2021年11月最新搜狗验证码识别,6位全对正确率高达96%
  9. 使用 html5 显示导航路线 谷歌地图api
  10. 2021怀柔一中高考成绩查询入口,北京怀柔县第一职业高中2021年招生录取分数线...