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

本文介绍了如何在Mac环境下安装SUMO,包括配置SUMO_HOME,以及通过Homebrew安装。讲解了如何导入OpenStreetMap地图,生成.net.xml和.rou.xml文件,并使用SUMO-GUI查看地图。此外,文章还探讨了Traci接口在Java和Python中的使用,特别是Python接口的traci.start方法和基本操作,以及如何实现车辆的路径规划功能。
摘要由CSDN通过智能技术生成

因为正好项目中用到Sumo软件, 发现网上关于sumo的中文材料非常少, 所以我想记录一些自己使用sumo过程中的经验和教训;

SUMO的官方网站是 https://sumo.dlr.de/pydoc/ 本文大部分代码相关内容都来源于此网站

一.Sumo的安装

我的环境是macos 安装可以直接使用homebrew安装 brew install sumo 具体的安装教程在sumo官网有详细说明; mac版的安装在这个网址 安装完后记得要在bash-profile(bash)或者zshrc中(zsh)设置SUMO_HOME, 我这里的配置是这样:

#设置sumo, 这个是用homebrew装的

export SUMO_HOME="/usr/local/opt/sumo/share/sumo"

当一切都配置完成之后, 应该可以在终端使用命令sumo看到以下内容

~->sumo

Eclipse SUMO Version 1.3.1

Build features: Darwin-17.7.0 x86_64 Clang 10.0.0.10001044 Release Proj GUI

Copyright (C) 2001-2019 German Aerospace Center (DLR) and others; https://sumo.dlr.de

License EPL-2.0: Eclipse Public License Version 2

Use --help to get the list of options.

也可以使用sumo-gui命令进入sumo的gui客户端, 在mac中是基于XQuartz的

二.Sumo地图导入

我当时参考了这篇博文的内容veins车载通信仿真框架(2)--SUMO地图替换 大家可以去看一下这篇博文, 我简单介绍一下流程: 1.在OpenStreetMap网站上导出你想要研究的区域的地图, 在网页左上方有导出按钮, 然后选择区域之后就可以下载地图文件了, 应该是一个osm文件, 比如map.osm 2.在获得osm文件之后, 我们要用我们研究的地图替换sumo地图中的默认地图第一步, 根据osm文件生成.net.xml道路文件, 进入osm文件所在的目录下, 使用命令

netconvert --osm-files map.osm -o map.net.xml

此时我们会得到一个map.net.xml文件, 在这一步, 我们就可以在终端中输入sumo-gui命令打开gui软件, 然后File - open network 然后选中我们生成的net.xml地图, 就可以在软件中看到我们刚才下载的地图了 - 第二步, 在刚才得到的地图中加入车辆, 因为我是要研究车流量相关的内容, 所以得到一个带车流的地图才有意义, 我们要生成一个.rou.xml车辆行为文件, 首先利用脚本randomTrips.py生成一个.trip.xml文件, 在这个文件中记录了随机生成的车辆的"旅程", 也就是每一辆车从哪儿开到哪儿, 至于具体的路线还是使用randomTrips脚本生成起点到终点的最短路径, 所以这一步使用2个命令

# 这一步是生成trips文件

/usr/local/opt/sumo/share/sumo/tools/randomTrips.py -n map.net.xml -e 100 -l

#生成车的路径行为xml的脚本,

#每p个步长生成1个,

#binomial二项分布系数是8, 1的时候退化成伯努利分布,

#s是种子数,

#e结束时间,

#l是根据道路长度来划分权重, L是根据车道数划分权重, 我这里选的是l;

/usr/local/Cellar/sumo/1.3.1/share/sumo/tools/randomTrips.py -n map.net.xml -r map.rou.xml -e 3600 -l --binomial=8 -p 5 -s 830 -v第三步, 生成.poly.xml地形文件 shell polyconvert --net-file map.net.xml --osm-files map.osm -o map.poly.xml

生成.sumo.cfg文件

这个文件要和net, poly, rou那些文件放一起;

简单总结一下, net文件存了路网的节点和道路信息, rou存储了道路中所有车辆的信息, 比如车速, 多少辆车, 每辆车从哪儿开到哪儿这些信息, poly存储的是地形信息;

### 关于SumoTraCI接口的使用教程 #### 一、理解TraCI接口的作用 TraCI接口用于与SUMO交通模拟器进行交互,允许外部应用程序通过网络连接控制仿真过程中的各个对象。这使得开发者能够动态调整参数、获取实时数据并执行复杂操作而无需依赖图形用户界面[^3]。 #### 二、创建Python项目并与TraCI对接 为了利用TraCI功能开发应用,需先建立一个新的Python工程,并确保已正确安装SUMO及其相关库。接着要导入`traci`模块以便后续编程调用其方法: ```python import os if 'SUMO_HOME' in os.environ: tools = os.path.join(os.environ['SUMO_HOME'], 'tools') sys.path.append(tools) else: sys.exit("please declare environment variable 'SUMO_HOME'") import traci ``` 这段代码片段展示了如何检查环境变量是否存在以及添加必要的工具路径至系统的PYTHONPATH中,从而顺利加载traci库文件[^2]。 #### 三、启动SUMO实例并通过TraCI与其通信 当准备就绪后,可以通过命令行或者直接在Python脚本内部开启一个SUMO进程来进行实验性的会话管理。下面是一个简单的例子说明怎样初始化连接并向服务器发送指令: ```python sumoBinary = "sumo-gui" sumoCmd = [sumoBinary, "-c", "./data/config.sumocfg"] traci.start(sumoCmd) while step < max_steps: traci.simulationStep() # 执行更多自定义逻辑... step += 1 traci.close() sys.stdout.flush() ``` 这里演示了基本流程——指定配置文件位置以指导SUMO加载场景设定;循环迭代推进时间步数直至达到预设的最大值;最后关闭连接释放资源[^1]。 #### 四、实现特定应用场景下的高级特性 对于某些特殊需求而言,比如让电动汽车自动导航到最近可用充电桩处停车充电,则可借助专门设计好的API函数轻松达成目标。例如,通过调用`insertStop()`或`setParkingAreaStop()`可以让选定车辆暂停服务并在完成补给后再恢复行程安排[^5]。 ```python def send_vehicle_to_charge(vehicle_id, charging_station_edge): try: traci.vehicle.insertStop( vehID=vehicle_id, nextStopIndex=0, edgeID=charging_station_edge, flags=64, duration=-1 # 设置为负数表示无限期等待直到充满电为止 ) print(f"Vehicle {vehicle_id} has been instructed to proceed towards the charger.") except Exception as e: print(e) ``` 上述示例提供了一种方式来指挥某辆车驶向指定边界的充电设施旁停靠下来接受电力补充作业。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值