为相扑和静脉执行 setDisallowed setAllowed 时出错?
Error while Implementing setDisallowed setAllowed for Sumo and Veins?
我正在尝试在使用静脉时为 mysumo 场景 (traci.lane.setDisallowed) 实施 TraCi 命令。我在 TraciCommandInterface.cpp 中创建了一个新命令,例如:
void TraCICommandInterface::Lane::setDisallowed(std::list<std::string> disallowedClasses)
{
TraCIBuffer buf = connection->query(CMD_SET_LANE_VARIABLE, TraCIBuffer() << LANE_DISALLOWED << laneId << TYPE_STRINGLIST << disallowedClasses);
ASSERT(buf.eof());
}
并称呼为:
std::list<std::string> disallowedClasses = {"all"};
if (simTime()==20) {
TraCICommandInterface* cInt = getCommandInterface();
cInt->lane("ed_1_0").setDisallowed(disallowedClasses);
}
问题是我收到错误:
对命令 0xc3 的回答有错误:调度命令 195 后 requestMessage 中的位置错误。预期的命令长度为 38,但读取了 18 个字节。
我执行命令的方式有问题吗?为什么会出现这个问题有什么建议吗?
从 Veins 5.0 开始,TraCIBuffer
只有一些 C++ 数据类型的重载,特别是 std::string
、simtime_t
和 TraCICoord
(参见 here). All other types are sent as stored in memory (by casting to char*
) (see here) - 对于 std::list
.
肯定不是个好主意
关于如何将std::list<std::string>
序列化为表示TYPE_STRINGLIST
SUMO/TraCI期望的二进制blob的copy/paste-able代码,参见TraCICommandInterface::Vehicle::changeVehicleRoute(const std::list<std::string>& edges)
的代码,可用 here.
我正在尝试在使用静脉时为 mysumo 场景 (traci.lane.setDisallowed) 实施 TraCi 命令。我在 TraciCommandInterface.cpp 中创建了一个新命令,例如:
void TraCICommandInterface::Lane::setDisallowed(std::list<std::string> disallowedClasses)
{
TraCIBuffer buf = connection->query(CMD_SET_LANE_VARIABLE, TraCIBuffer() << LANE_DISALLOWED << laneId << TYPE_STRINGLIST << disallowedClasses);
ASSERT(buf.eof());
}
并称呼为:
std::list<std::string> disallowedClasses = {"all"};
if (simTime()==20) {
TraCICommandInterface* cInt = getCommandInterface();
cInt->lane("ed_1_0").setDisallowed(disallowedClasses);
}
问题是我收到错误: 对命令 0xc3 的回答有错误:调度命令 195 后 requestMessage 中的位置错误。预期的命令长度为 38,但读取了 18 个字节。
我执行命令的方式有问题吗?为什么会出现这个问题有什么建议吗?
从 Veins 5.0 开始,TraCIBuffer
只有一些 C++ 数据类型的重载,特别是 std::string
、simtime_t
和 TraCICoord
(参见 here). All other types are sent as stored in memory (by casting to char*
) (see here) - 对于 std::list
.
关于如何将std::list<std::string>
序列化为表示TYPE_STRINGLIST
SUMO/TraCI期望的二进制blob的copy/paste-able代码,参见TraCICommandInterface::Vehicle::changeVehicleRoute(const std::list<std::string>& edges)
的代码,可用 here.