使用PLEXE从SUMO .rou文件插入车辆时出现peer shutdown报错的技术咨询
联合仿真插入车辆时的进程崩溃问题排查
报错因果关系梳理
两个表面报错存在明确的前后触发关系,而非独立的两个故障:
tcpip::Socket::recvAndCheck @ recv: peer shutdown是SUMO侧的被动报错:当和SUMO通过Traci协议搭建桥接的Omnet++进程意外终止后,SUMO尝试接收桥接指令时发现对端连接中断,就会抛出该提示- Omnet++退出码139代表进程触发段错误(对应Unix信号SIGSEGV,即内存非法访问),是整个崩溃的核心根因
场景下的常见触发原因
- 组件版本适配矩阵错配:当前选用的Plexe 3.0a2 官方原生适配的Veins版本为4.7,并非你当前使用的Veins 5.0。Veins 5.0调整了Traci桥接的帧结构、SumoTrafficManager的内部调用接口,将Plexe 3.0a2直接对接Veins 5.0运行时,当第一辆车辆被插入、触发桥接层首次车辆状态同步逻辑时,就会因为内存访问越界触发段错误。
- 配置项缺失或错误:将流量管理器修改为
SumoTrafficManager后,没有同步补全Plexe对应的桥接依赖配置。Plexe官方编队示例默认使用IntegratedTrafficManager,切换到SUMO侧导入.rou文件的模式时,若遗漏对应的桥接开关、端口映射配置,会在第一辆车插入时触发空指针访问,直接引发进程段错误。 - 自定义.rou文件格式不兼容:自行编写的.rou文件没有匹配Plexe侧SumoTrafficManager的解析规则。比如文件内没有为编队车辆配置
vClass=evehicle标识、没有按照要求附带编队ID字段,SumoTrafficManager从SUMO拉取第一辆车的属性时,会因为读不到预期字段触发内存越界。
对应解决步骤
- 完成版本对齐:优先替换为Plexe 3.0a2官方验证的兼容组合,即SUMO 1.2.0 + Veins 4.7 + Omnet++ 5.5.1,该组合下SumoTrafficManager的接口逻辑完全匹配,可从根源上消除跨版本接口不匹配导致的段错误。如果需要保留Veins 5.0,需要升级Plexe到4.0及以上版本,不要跨大版本拼接各仿真组件。
- 全量核对.ini配置项:
- 确认
**.wins[*].mobility.managerType字段值和SumoTrafficManager完全一致,没有拼写错误 - 确认Traci桥接的端口映射没有和系统其他进程冲突,启动参数中正确加载了自定义.rou文件的路径
- 确认Plexe编队相关的核心配置没有因为切换流量管理器被意外注释
- 确认
- 校验自定义.rou文件格式:
- 普通社会车辆添加
vClass=passenger类标识,编队车辆添加vClass=evehicle类标识 - 编队车辆定义中按照Plexe要求的格式附加自定义参数,比如编队ID、车辆在编队中的位置,不要使用和Plexe解析规则冲突的自定义参数名
- 普通社会车辆添加
内容的提问来源于stack exchange,提问作者TZerK44
相关产品推荐
相关产品推荐

