在静脉模拟中获取高度(航向)
GettingAltitude (Heading) in Veins simulation
我将 Veins 4.4 与 Omnet 4.6 和 Sumo 0.25 一起使用。
我想获取有关车辆高度的信息。
我刚刚在 TraCICommandInterface class 中找到了方法 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;
}
但是 运行 在调试模式下,它 returns 这个错误:
线程 1 "opp_run" 收到信号 SIGSEGV,分段错误。
std::__detail::_List_node_base::_M_transfer(std::__detail::_List_node_base*, std::__detail::_List_node_base*) () 来自 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 中的 0x00007ffff5ea5543
Python 异常找不到类型 std::__cxx11::list >::const_iterator::_Node:
Python 异常找不到类型 std::__cxx11::list >::const_iterator::_Node:
Python 异常找不到类型 std::__cxx11::list >::const_iterator::_Node:
您的修改在语义上是正确的,但在语法上是错误的。
您使用 std::list::insert
不正确。您使用的形式采用插入位置(此处,您的代码似乎提供了一个未初始化的迭代器)、重复计数(此处您的代码似乎提供了位置偏移量)和要插入的值。
使用 push_back
将 insert
语句更改为三个语句会产生工作代码(但请注意,演示模拟会产生缺失值,因为没有定义位置映射和高度值)。
我将 Veins 4.4 与 Omnet 4.6 和 Sumo 0.25 一起使用。
我想获取有关车辆高度的信息。 我刚刚在 TraCICommandInterface class 中找到了方法 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;
}
但是 运行 在调试模式下,它 returns 这个错误:
线程 1 "opp_run" 收到信号 SIGSEGV,分段错误。 std::__detail::_List_node_base::_M_transfer(std::__detail::_List_node_base*, std::__detail::_List_node_base*) () 来自 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 中的 0x00007ffff5ea5543 Python 异常找不到类型 std::__cxx11::list >::const_iterator::_Node: Python 异常找不到类型 std::__cxx11::list >::const_iterator::_Node: Python 异常找不到类型 std::__cxx11::list >::const_iterator::_Node:
您的修改在语义上是正确的,但在语法上是错误的。
您使用 std::list::insert
不正确。您使用的形式采用插入位置(此处,您的代码似乎提供了一个未初始化的迭代器)、重复计数(此处您的代码似乎提供了位置偏移量)和要插入的值。
使用 push_back
将 insert
语句更改为三个语句会产生工作代码(但请注意,演示模拟会产生缺失值,因为没有定义位置映射和高度值)。