静脉模拟中的GetAltitude(标题)

时间:2016-12-20 10:00:00

标签: omnet++ veins sumo

我正在使用Veins 4.4和Omnet 4.6以及Sumo 0.25。

我想获得有关车辆高度的信息。 我刚刚在TraCICommandInterface类中找到了方法getLonLat()。 是否有关于海拔高度或其他方式来获取此类信息的方法?谢谢

我尝试按如下方式修改上述功能:

std::list<double> TraCICommandInterface::getLonLatAlt(const Coord& coord) {
    TraCIBuffer request;
    request << static_cast<uint8_t>(POSITION_CONVERSION) << std::string("sim0")
            << static_cast<uint8_t>(TYPE_COMPOUND) << static_cast<int32_t>(2)
            << connection.omnet2traci(coord)
            << static_cast<uint8_t>(TYPE_UBYTE) << static_cast<uint8_t>(POSITION_LON_LAT_ALT);
    TraCIBuffer response = connection.query(CMD_GET_SIM_VARIABLE, request);


    uint8_t cmdLength; response >> cmdLength;
    if (cmdLength == 0) {
        uint32_t cmdLengthX;
        response >> cmdLengthX;
    }
    uint8_t responseId; response >> responseId;
    ASSERT(responseId == RESPONSE_GET_SIM_VARIABLE);
    uint8_t variable; response >> variable;
    ASSERT(variable == POSITION_CONVERSION);
    std::string id; response >> id;
    uint8_t convPosType; response >> convPosType;
    ASSERT(convPosType == POSITION_LON_LAT_ALT);
    double convPosLon; response >> convPosLon;
    double convPosLat; response >> convPosLat;
    double convPosAlt; response >> convPosAlt;

    std::list<double> geo_coordinates;
    std::list<double>::iterator it;

    geo_coordinates.insert(it,0,convPosLon);
    geo_coordinates.insert(it,1,convPosLat);
    geo_coordinates.insert(it,2,convPosAlt);

    return geo_coordinates;
}

但在调试模式下运行时,它会返回以下错误:

线程1“opp_run”收到信号SIGSEGV,分段错误。 来自/usr/lib/x86_64-linux-gnu/libstdc++.so.6的std :: __ detail :: _ List_node_base :: _ M_transfer(std :: __ detail :: _ List_node_base *,std :: __ detail :: _ List_node_base *)()中的0x00007ffff5ea5543 Python异常无法找到类型std :: __ cxx11 :: list&gt; :: const_iterator :: _ Node: Python异常无法找到类型std :: __ cxx11 :: list&gt; :: const_iterator :: _ Node: Python异常无法找到类型std :: __ cxx11 :: list&gt; :: const_iterator :: _ Node:

1 个答案:

答案 0 :(得分:0)

您的修改在语义上是合理的,但在语法上是错误的。

您错误地使用了std::list::insert。您使用的表单采用插入位置(此处,您的代码似乎提供了未初始化的迭代器),重复计数(此处您的代码似乎提供了似乎是位置偏移的内容),以及要插入的值。

使用insertpush_back语句更改为三个语句会产生工作代码(但请注意,演示模拟会产生缺失值,因为没有定位位置且没有定义高度值)。