C++ TraCIAPI

Caution

此库已不再维护。请使用 libtracilibsumo

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,则可以在 srccmake-build/src 目录中找到它们。

如果您选择将所有这些文件复制到同一目录中,则 TraCIAPI.hTraCIAPI.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