【问题标题】:Get live car data from SUMO simulation to java从 SUMO 模拟获取实时汽车数据到 java
【发布时间】:2016-04-11 20:58:33
【问题描述】:

我目前有一个 openstreetmap 转换为用于 10000 辆汽车的相扑,并且时间不受限制。作为学校作业,我们需要做的是使用这些数据并将其加载到我们现有的应用程序中,以测试我们编写的代码的可伸缩性。 问题是我如何能够将每辆车生成的信息加载到单独的 Java 应用程序中。我试过寻找解决方案,但到目前为止都是空的。我希望我只是错过了一些事情并且可以做到这一点。

【问题讨论】:

  • 当你请求 Java 时,为什么将它标记为 python?

标签: java python python-2.7 simulation


【解决方案1】:

基本上有两种方法:

  1. 在使用套接字连接或命名管道写入 Sumo XML 输出时对其进行解析

  2. 使用 TraCI4J 或 TraaS 接口直接连接到 Sumo。

对于第一种方法,您需要在 Java 端打开一个服务器套接字

ServerSocket serverSocket = new ServerSocket(12345);
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(
        new InputStreamReader(clientSocket.getInputStream()));

然后运行 ​​Sumo 将输出定向到套接字。假设您在同一台机器上运行两者并使用排放输出,您应该调用

sumo -c my.sumocfg --emission-output localhost:12345

(当然,您可以选择与 12345 不同的端口,但它们必须匹配两个调用。)

然后你可以解析从 BufferedReader 读取的文件,你可能想读一些关于 XML 解析的东西。

第二种方法将涉及TraaS

String sumo_bin = "c:/Program Files (x86)/sumo/bin/sumo-gui.exe";
String config_file = "simulation/config.sumo.cfg";
SumoTraciConnection conn = new SumoTraciConnection(sumo_bin, config_file);

conn.runServer();

//load routes and initialize the simulation
conn.do_timestep();

//get the CO2 emission for a specific vehicle
double co2 = (double) conn.do_job_get(Vehicle.getCO2Emission("v0"));
System.out.println("CO2: " + co2 + " g/s");

//stop TraCI
conn.close();

有关可用方法和输出,请参阅 TraaSSumo outputs 上的文档

【讨论】:

  • 我正在尝试使用 TraaS 解决方案,但我似乎找不到获取汽车经度和纬度的选项。知道这是否可能吗?
  • 我也遇到了问题。它没有通过 conn.do_timestep() 方法。它确实启动了 gui,并且 gui 中的输出表明加载是从那时开始完成的,不会发生任何事情。你知道这里可能出了什么问题吗?
  • 我对 TraaS 不太熟悉,但我想 convertGeo 函数 sumo.dlr.de/daily/javadoc/traas/de/tudresden/sumo/cmd/… 可以解决问题。
  • 对于第二个问题,也许是个愚蠢的问题,但是您是否开始按绿色播放按钮进行模拟?
  • 哦,该死的我为 do_timestep() 阅读 javadoc 的方式,我认为它会开始模拟。是否可以拨打电话以启动模拟?我确实通过按播放按钮启动了两次,但这会在车辆上引发错误
猜你喜欢
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 2020-01-23
  • 1970-01-01
  • 2023-01-28
  • 1970-01-01
相关资源
最近更新 更多