【问题标题】:Error while Implementing setDisallowed setAllowed for Sumo and Veins?为 Sumo 和 Veins 实施 setDisallowed setAllowed 时出错?
【发布时间】:2020-12-09 21:39:42
【问题描述】:

我正在尝试在使用静脉时为 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 个字节。

我执行命令的方式有问题吗?有什么建议为什么会出现这个问题?

【问题讨论】:

    标签: omnet++ veins sumo


    【解决方案1】:

    从 Veins 5.0 开始,TraCIBuffer 只有少数 C++ 数据类型重载,特别是 std::stringsimtime_tTraCICoord(请参阅 here)。所有其他类型都以存储在内存中的形式发送(通过转换为char*)(请参阅here)——对于std::list,这当然不是一个好主意。

    有关如何将std::list&lt;std::string&gt; 序列化为代表TYPE_STRINGLIST SUMO/TraCI 预期的二进制blob 的可复制/粘贴代码,请参阅TraCICommandInterface::Vehicle::changeVehicleRoute(const std::list&lt;std::string&gt;&amp; edges) 的代码,here 可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 2018-06-07
      • 2018-12-12
      • 2013-07-05
      相关资源
      最近更新 更多