应该是第一次学SUMO,所以下面的都是最最基本的笔记,单纯就是看看SUMO能干什么。
学习1:这个模拟器是干什么用的,用模拟器能打开的这些文件(xml, netccfg, sumocfg)分别有什么作用
学习2:有哪些案例能跑,最贴近当前学习需求的案例是怎么样的
用homebrew cask安装就可以
sumo-gui需要xquartz,xquartz是电脑上以前安装了的,但它就是跑不起来,所以把xquartz用brew卸了重装解决了问题
再补充一个针对 FXApp::openDisplay: unable to open display :0.0 报错的解决方案:
在新macbook上我又安装了sumo和sumo-gui,但这次xquartz跑不起来。在之前的电脑上xquartz是能被sumo-gui和netedit命令自动唤醒的,但现在不行了;不仅不能自动唤醒,而且就算提前把xquartz打开放在那里也无法连接sumo-gui的端口显示任何东西。


解决方法:

但在我的电脑上显示的是
/opt/X11/bin/Xquartz :1 -listen tcp ......
所以只需要
export DISPLAY=:1
就可以了。当然xquartz还是要提前打开挂在后台等待连接的。能启动就行,懒得再继续修了,估计是没修改ssh config里面的x11 forwarding导致的。
sumo-gui的文件打开窗口非常难用(不是macOS原生),解决办法是在需要打开的文件的路径上运行sumo-gui,这样就可以快速找到需要打开的文件
🔗 [Eclipse SUMO - Simulation of Urban MObility] https://eclipse.dev/sumo/
🔗 [Tutorials - SUMO Documentation] https://sumo.dlr.de/docs/Tutorials/index.html
🔗 [eclipse-sumo/sumo: Eclipse SUMO is an open source, highly portable, microscopic and continuous traffic simulation package designed to handle large networks. It allows for intermodal simulation including pedestrians and comes with a large set of tools for scenario creation.] https://github.com/eclipse-sumo/sumo
c++和python写的
新手教程:🔗 [Tutorials - SUMO Documentation] https://sumo.dlr.de/docs/Tutorials/index.html

hello-world
🔗 [Hello World - SUMO Documentation] https://sumo.dlr.de/docs/Tutorials/Hello_World.html
跟着教程做,基本问题不大,有几个小地方不太一样(因为版本差别较大),但能跑起来
做完hello-world教程后会留下3个文件:
helloworld.net.xml:静态地图文件
helloworld.rou.xml:vehicle,以及vehicle routes的需求文件
helloworld.sumocfg:sumo-gui的运行配置文件
其中,helloworld.sumocfg需要注意:它本身就包含了对helloworld.net.xml和helloworld.rou.xml的路径,所以在sumo-gui里面打开它就能直接跑这个simulator,不需要再单独打开.net.xml和.rou.xml了:

然后根据hello-world的教程做一个进阶版:画一个环形网,一辆汽车会在里面一直转圈(永不停止)
- hello-world的教程里需要修改坐标;但这里只是做个简单的环,所以跳过了这一步
- 环形好做,但永不停止有点难,暂时找不到什么好的方法

然后再做一个带简单交通灯的版本(只看了hello-world的教程):目的是为了提前认识“加入交通灯”的步骤有哪些难点,方便后续看教程的时候留意:
由于坐标懒得调了,所以一开始画出来的十字路口并不是四方通行的(比如中间这个):

所以在创建routes的时候,某些道路会无法被选中,这是因为十字路口的设计有问题
但跑还是能跑起来的,而且这个交通灯确实发挥了作用,可以看到有一辆车在红灯的时候停下来等待,而另一辆车绿灯直接右拐通行:

再看下一个教程:
🔗 [OSMWebWizard - SUMO Documentation] https://sumo.dlr.de/docs/Tutorials/OSMWebWizard.html

可以从openstreetmap上面直接下载真实地图的一切数据,包括一切复杂的信号灯和复杂的道路设计,这个可能是最有用的(省时间省事);还可以给下载的地图同时分配各种车辆、船只、行人。
python文件的路径(macos通过homebrew安装): /usr/local/Cellar/sumo/1.19.0/share/sumo/tools/osmWebWizard.py .
能跑,注意要在合适的路径(比如一个单独的sumo数据文件夹)下面执行python命令,因为地图数据会下载到当前执行命令的目录下面
python命令执行完毕以后会自动调用sumo-gui并跑起来;如果没有调用sumo-gui,说明地图没下完/下载出了问题,这个时候数据文件夹里面大概是没有.sumocfg文件的,只有地图数据
继续看下一个教程:🔗 [Quick Start - SUMO Documentation] https://sumo.dlr.de/docs/Tutorials/quick_start.html
开始有点复杂了,搞不动了,但好在sumo提供了这个教程的数据文件下载:🔗 [sumo/tests/complex/tutorial/quickstart/data at main · eclipse-sumo/sumo] https://github.com/eclipse-sumo/sumo/tree/main/tests/complex/tutorial/quickstart/data
然后在这个quickstart案例的基础上加了2个交通灯:

其他的文件保持不变。
跑起来的时候能看到这些车辆遵循红绿灯的规则,且等待红灯的汽车会排成一队,红灯变绿以后它们会逐个通过绿灯。
甚至,左拐的车流走了一半以后,如果遇到对面的直行车流,这些车还会堵在十字路口中间等待直行车流走完(非常符合现实行车逻辑):

总之就是非常符合现实交通的规则和特性。
再看下一个:🔗 [Driving in Circles - SUMO Documentation] https://sumo.dlr.de/docs/Tutorials/Driving_in_Circles.html
正好解决了我之前做的玩具circle的问题:不知道如何循环移动车辆