You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Artery仿真运行约140秒后反复崩溃问题咨询

解决Artery仿真中LocalDynamicMap断言崩溃问题

你遇到的这个崩溃是Artery里LocalDynamicMap模块的断言校验失败导致的,这个断言的作用是确保收到的**协作感知消息(CA)**有效期符合ETSI ITS标准要求——标准规定CA消息的有效期必须落在当前仿真时间到当前时间+2秒的区间内,保证消息是新鲜有效的。

可能的原因分析

断言触发说明收到的CA消息expiry值不符合预期,常见诱因有这几个:

  • CA消息配置异常:自定义场景里的CA消息有效期设置超出了1-2秒的合理范围,比如设得过长(如5秒)或过短(甚至消息已经过期)。
  • 时间同步偏差:SUMO与OMNeT之间的时间同步出现问题,导致CA消息的时间戳/有效期和OMNeT的simTime()不匹配。
  • 自定义代码修改了CA处理逻辑:如果你改动过Artery的CA消息生成或处理代码,可能不小心错误计算了expiry值。

分步解决方法

  1. 检查CA消息的配置参数
    打开你的omnetpp.ini,查找CA相关配置项,比如:

    *.traci.launcher.vehicle[*].application.ca.expiry = 1.5s
    *.traci.launcher.vehicle[*].application.ca.interval = 0.1s
    

    确保expiry的值设置在1s到2s之间,这是符合标准的合理范围。如果配置里没有这个项,Artery会用默认值,但自定义场景建议显式指定。

  2. 验证SUMO与OMNeT++的时间同步
    检查launchd.xml里的SUMO启动参数,确认是否设置了正确的步长(比如--step-length 0.1),同时确保Artery默认的时间同步机制正常工作——Artery会自动让SUMO和OMNeT++时间保持一致,若自定义场景修改过时间相关配置,可能导致同步失效。

  3. 调试CA消息的具体数值
    为精准定位问题,可在崩溃代码位置添加日志输出:修改src/artery/application/LocalDynamicMap.cc的updateAwareness函数,在断言前加入日志:

    EV_WARN << "Received CA message - expiry: " << entry.expiry << ", current simTime: " << simTime() << endl;
    

    重新编译Artery后运行仿真,查看崩溃前的日志,就能看到具体的expiry和simTime数值,判断是expiry已过期(≤当前时间)还是过长(≥当前时间+2秒)。

  4. 检查自定义代码的CA逻辑
    如果你修改过CA消息生成代码(比如自定义了Vehicle应用),检查计算expiry的部分:是否错误使用了SUMO时间而非OMNeT++的simTime(),或是计算时单位出错(比如把毫秒当成秒)。

临时应急方案(不推荐长期使用)

如果需要先让仿真跑起来验证其他功能,可以暂时注释掉这个断言(在LocalDynamicMap.cc里把断言行注释掉),但这只是权宜之计——这个断言是为了过滤无效CA消息,长期注释可能导致后续地图感知逻辑出现异常。

内容的提问来源于stack exchange,提问作者M. Hardt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:19:20