【问题标题】:Error while accessing Mobility module at the MAC layer of Veins在 Veins 的 MAC 层访问 Mobility 模块时出错
【发布时间】:2019-04-15 20:30:36
【问题描述】:

在 VEINS 4.4 中,可以通过 TraCIMobility 定义的“Mobility”模块在应用层(例如TraCIDemo11p)访问车辆的当前位置。

我按照相同的方法访问底层的 Mobility 模块(MAC1609_4.cc),在初始化函数的第 0 阶段添加了以下语句:

TraCIMobility* mobility = TraCIMobilityAccess().get(getParentModule());

但是,我没有收到任何编译错误,但是当模拟开始时 OMNET 抛出错误并给出以下错误。

模块错误 (MAC1609_4) RSUExampleScenario.node[0].nic.mac1609_4(id=12) 在事件 #2,t = 0.1: 断言:函数 get 中的条件 traci 为假, \veins/modules/mobility/traci/TraCIMobility.h 第 193 行

我已经四处寻找不同的可能解决方案,但是我仍然无法解决这个问题。

相关帖子有:

How to access TraCI command interface from TraCIDemoRSU11p in Veins Car2X simulator?

Transmission of vehicular status in Veins

RoadId() from the BaseWaveApplLayer.cc (VEINS, OMNET++)

How to get Coordinates of each vehicle in VEINS?

【问题讨论】:

    标签: omnet++ veins


    【解决方案1】:

    您正在尝试访问 Mac1609_4 的父模块中的 TraCIMobility 子模块。然而,这不是 Car 而是 Nic80211p,它没有这样的子模块,因此,断言失败。

    当您在层次结构中再上一层时,它应该可以工作,因为然后您使用 Car 模块作为根来查找相应的子模块:

    TraCIMobility* mobility = TraCIMobilityAccess().get(getParentModule()->getParentModule());
    

    请参阅 Car 模块和 Nic80211p 模块以供参考:

    【讨论】:

    • 亲爱的 Julian, 非常感谢您的回复和澄清问题。我现在明白你的观点和错误了。这意味着我们只能在更高层(特别是在 App 层)访问移动模块??
    • 没有。这意味着您应该在表达式中添加另一个对getParentModule() 的调用,如上面的代码所示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    相关资源
    最近更新 更多