Veins5.1中TraCIMobility无getCurrentPosition()如何获取节点当前位置
问题原因
Veins 5.1版本的TraCIMobility类已经移除了getCurrentPosition()接口,所以你调用该方法会提示不存在。
解决方案
你现有代码中使用的getPositionAt(simTime())本身就是官方指定的替代方法,如果你调用该方法仍然报错,按以下步骤排查修改:
1. 修正命名空间缺失问题
你头文件中定义mobility_veins时没有加veins命名空间,会导致编译器无法正确识别类类型,修改头文件对应代码:
// 修改前 TraCIMobility* mobility_veins; // 修改后 veins::TraCIMobility* mobility_veins;
同时确认已经引入对应头文件:
#include <veins/modules/mobility/traci/TraCIMobility.h>
2. 更稳定的两种获取位置的替代方案
你代码中已经声明了其他可用的指针,可以直接调用更易用的接口,不需要依赖TraCIMobility:
- 方案A:通过
VeinsInetMobility指针获取
VeinsInetMobility封装了适配INET框架的位置接口,直接调用getCurrentPosition()即可:veins::Coord veh_pos = mobility->getCurrentPosition(); - 方案B:通过TraCI车辆接口直接查询
你已经初始化了traciVehicle指针,可以直接从SUMO侧查询车辆实时位置:veins::Coord veh_pos = traciVehicle->getPosition();
以上两种方案不需要额外引入头文件,兼容性更强,推荐优先使用。
内容的提问来源于stack exchange,提问作者Nehal
相关产品推荐
相关产品推荐

