SUMO 和 OMNeT++ 与 Java 一起工作
SUMO and OMNeT++ working together with Java
我目前正在写我的学士论文,我的目的是创建一个具有交通模拟器 SUMO 和网络模拟器 OMNeT++ 的 VANET 模拟器。
我知道已经有一个名为 Veins 的项目正在做这件事。
但问题是除了 PHP 或 Java 我不知道其他语言,我认为我需要更多时间去尝试理解 Veins,而不是去做在 Java.
我看到,在 Java 的情况下,有一个名为 traci4j 的库,旨在替代 Java 语言中的 TraCI。
我认为,要完成的第一个重要步骤是能够从 Java 运行 SUMO 和 OMNeT++。一旦我实现了这一点,那么我将继续致力于两个程序之间的数据交换。
然而,我从我的简单程序中对 运行 SUMO-gui 进行了一些试验,但都没有成功:
public static void main(String[] args) throws IOException, InterruptedException {
String configFile = "test/resources/sumo_maps/Test2/Test2.sumo.cfg";
SumoTraciConnection trial = new SumoTraciConnection(configFile,-1);
trial.runServer(true);
}
但我一直收到以下信息。我曾尝试在调试模式下执行此操作,但这是一项非常乏味的工作,最后我什么也得不到。
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 9, Size: 7
at java.util.ArrayList.rangeCheckForAdd(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at it.polito.appeal.traci.SumoTraciConnection.runSUMO(SumoTraciConnection.java:477)
at it.polito.appeal.traci.SumoTraciConnection.runServer(SumoTraciConnection.java:267)
at trial.TrialConnection.main(TrialConnection.java:32)
如果你能告诉我我的想法是什么,我将不胜感激。任何其他关于我的想法和计划我的论文的方式的评论也将不胜感激。
顺便说一句,我正在使用 SUMO 0.25、OMNeT++ 4.6 和 Eclipse Mars.2 Release (4.5.2)
提前感谢您的关注
编辑:
我设法找到了异常的来源,你可以找到它作为答案。但是,我不断收到错误消息:
错误 StatusLogger 未找到 log4j2 配置文件。使用默认配置:仅将错误记录到控制台。
无论如何,这似乎并不影响程序的运行ning,因为我运行它成功了。但是,如果我不按 运行 按钮,它就不起作用!
我发现了 IndexOutOfBoundsException 的来源,似乎当 SumoTraciConnection 调用 runServer(int remotePort, boolean withGui) 时,如果 WithGui 设置为 true,那么它会跳过向列表添加 2 个项目:
if (randomSeed != -1) {
args.add(7, "--seed");
args.add(8, Integer.toString(randomSeed));
}
// this avoids validation of the input xml files; if SUMO_HOME is not set correctly,
// sumo will try to download the schema files from the web and may wait 30 seconds at startup
// for the connection to time out.
args.add(9, "--xml-validation");
args.add(10, "never");
我目前正在写我的学士论文,我的目的是创建一个具有交通模拟器 SUMO 和网络模拟器 OMNeT++ 的 VANET 模拟器。
我知道已经有一个名为 Veins 的项目正在做这件事。
但问题是除了 PHP 或 Java 我不知道其他语言,我认为我需要更多时间去尝试理解 Veins,而不是去做在 Java.
我看到,在 Java 的情况下,有一个名为 traci4j 的库,旨在替代 Java 语言中的 TraCI。
我认为,要完成的第一个重要步骤是能够从 Java 运行 SUMO 和 OMNeT++。一旦我实现了这一点,那么我将继续致力于两个程序之间的数据交换。
然而,我从我的简单程序中对 运行 SUMO-gui 进行了一些试验,但都没有成功:
public static void main(String[] args) throws IOException, InterruptedException {
String configFile = "test/resources/sumo_maps/Test2/Test2.sumo.cfg";
SumoTraciConnection trial = new SumoTraciConnection(configFile,-1);
trial.runServer(true);
}
但我一直收到以下信息。我曾尝试在调试模式下执行此操作,但这是一项非常乏味的工作,最后我什么也得不到。
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 9, Size: 7
at java.util.ArrayList.rangeCheckForAdd(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at it.polito.appeal.traci.SumoTraciConnection.runSUMO(SumoTraciConnection.java:477)
at it.polito.appeal.traci.SumoTraciConnection.runServer(SumoTraciConnection.java:267)
at trial.TrialConnection.main(TrialConnection.java:32)
如果你能告诉我我的想法是什么,我将不胜感激。任何其他关于我的想法和计划我的论文的方式的评论也将不胜感激。
顺便说一句,我正在使用 SUMO 0.25、OMNeT++ 4.6 和 Eclipse Mars.2 Release (4.5.2)
提前感谢您的关注
编辑:
我设法找到了异常的来源,你可以找到它作为答案。但是,我不断收到错误消息:
错误 StatusLogger 未找到 log4j2 配置文件。使用默认配置:仅将错误记录到控制台。
无论如何,这似乎并不影响程序的运行ning,因为我运行它成功了。但是,如果我不按 运行 按钮,它就不起作用!
我发现了 IndexOutOfBoundsException 的来源,似乎当 SumoTraciConnection 调用 runServer(int remotePort, boolean withGui) 时,如果 WithGui 设置为 true,那么它会跳过向列表添加 2 个项目:
if (randomSeed != -1) {
args.add(7, "--seed");
args.add(8, Integer.toString(randomSeed));
}
// this avoids validation of the input xml files; if SUMO_HOME is not set correctly,
// sumo will try to download the schema files from the web and may wait 30 seconds at startup
// for the connection to time out.
args.add(9, "--xml-validation");
args.add(10, "never");