C++ TraCIAPI 客户端库#
C++ TraCIAPI 是客户端库,包含在 SUMO 源码树中。 该库可以作为源码发行版的一部分下载。 使用该库的示例代码位于 <SUMO_HOME>/src/traci_testclient/TraCITestClient.cpp。由 Doxygen 生成的文档可以在此处找到: here
构建库#
若要在不构建 SUMO 的情况下构建库,必须存在来自 SUMO 源码目录的以下依赖项:
src/utils/traci/TraCIAPI.h
src/utils/traci/TraCIAPI.cpp
src/foreign/tcpip/socket.h
src/foreign/tcpip/socket.cpp
src/foreign/tcpip/storage.h
src/foreign/tcpip/storage.cpp
src/libsumo/TraCIConstants.h
src/libsumo/TraCIDefs.h
此外,文件 config.h 必须存在,但这些文件可以留空。如果已经构建了 SUMO,则可以在 src 或 cmake-build/src 目录中找到它们。
如果您选择将所有这些文件复制到同一目录中,则 TraCIAPI.h 和 TraCIAPI.cpp 中的包含路径也需要进行修补。
在 Windows 上构建#
必须将文件 ws2_32.lib 添加到项目属性中的链接器文件中(它包含 windows 套接字调用),以避免链接器错误。
TraCI-Testclient#
TraCI-Testclient 是一个用于测试 TRaCI-API 服务器端的应用程序。当将其用作您自己的控制脚本的基础时,需要注意其两种操作模式:
向 SUMO 提供原始 TraCI 命令#
在此操作模式下,支持完整的 TraCI-API。示例输入文件通常如下所示:
repeat 50 simstep2 0
setvalue 0xc4 0x31 veh0 <string> e_vo0
simstep2 200
此模式旨在测试服务器端,不适合构建将 TraCI 调用与自定义代码混合的控制程序。
测试 TraCIAPI 客户端库#
在此模式下,使用客户端库本身。示例代码如下所示:
SUMOTime t = simulation.getCurrentTime();
std::vector<std::string> = edge.getIDList();
示例代码#
#include <iostream>
#include <utils/traci/TraCIAPI.h>
class Client : public TraCIAPI {
public:
Client() {};
~Client() {};
};
int main(int argc, char* argv[]) {
Client client;
client.connect("localhost", 1337);
std::cout << "time in s: " << client.simulation.getTime() << "\n";
std::cout << "run 5 steps ...\n";
client.simulationStep(5);
std::cout << "time in s: " << client.simulation.getTime() << "\n";
client.close();
}
编译(确保已设置 SUMO_HOME)#
g++ -o test -I$SUMO_HOME/src TraCIAPITest.cpp $SUMO_HOME/src/utils/traci/TraCIAPI.cpp $SUMO_HOME/src/foreign/tcpip/socket.cpp $SUMO_HOME/src/foreign/tcpip/storage.cpp
运行#
sumo -c test.sumocfg --remote-port 1337 &
./test
