simuilink和ROS2数据联通,Run后一直卡在Initializting

ROS2与Simulink通信故障排查记录

问题描述

环境配置

  • Linux主机:运行ROS2 Humble版本,作为话题发布方
  • Windows主机:运行MATLAB 2024b和Simulink,作为话题订阅方(已关闭防火墙)

故障现象

在ROS2端发布话题后,Simulink启动仿真并使用Subscribe模块订阅消息时,仿真过程会卡在"Initializing"状态无法继续。如果不发布话题,Simulink可以正常进入仿真。

初步验证

在MATLAB命令行进行以下操作,确认了基础连接是正常的:

matlab 复制代码
% 1. 设置ROS域ID接入网络
setenv('ROS_DOMAIN_ID','5')

% 2. 查看话题列表
ros2 topic list
% 结果:可以看到来自Linux主机的/topic_state话题

% 3. 查看消息结构
ros2 msg show pid_interfaces/Command
% 结果:可以正常显示消息组成

进一步测试MATLAB代码订阅功能:

matlab 复制代码
node = ros2node("test_node");
sub = ros2subscriber(node, "/topic_state", "pid_interfaces/Command");
msg = receive(sub, 5);
disp(msg);
% 结果:能够正常接收到话题消息

尝试明确声明使用FastDDS:

matlab 复制代码
setenv('RMW_IMPLEMENTATION','rmw_fastrtps_cpp');
% 结果:问题依然存在

历史背景

值得注意的是,该功能之前是正常工作的。期间最重大的改变是将Windows 10系统升级到了Windows 11。然而,当尝试回退到Windows 10版本后,问题仍然存在。

排查过程

实验一:排除自定义消息的影响

方法 :将自定义消息更换为ROS2默认消息类型
结果 :问题依然存在
结论:故障与自定义消息无关

实验二:排除Windows版本的影响

方法 :从Windows 11回退到Windows 10
结果 :问题依然存在
结论:故障与Windows 10/11版本差异无关

实验三:验证Simulink配置

方法 :重新配置Simulink的所有设置和连接
结果 :问题依然存在
结论:故障与Simulink的配置和接线无关

实验四:在其他设备上测试

方法 :在另一台电脑上全新安装MATLAB 2024b,执行相同的流程
结果:一切正常工作

额外发现

  1. 新电脑未安装第三方杀毒软件,无需关闭防火墙即可正常接收ROS2消息
  2. 新电脑运行Windows 11系统,工作正常,说明Windows 11本身没有问题

结论:问题出在原系统环境上,而非MATLAB本身的bug

实验五:重装MATLAB

方法 :在问题机器上卸载并重新安装MATLAB 2024b
结果 :问题依然存在
结论:单独重装MATLAB无法解决问题

实验六:排除防火墙和杀毒软件的影响

方法 :关闭所有杀毒软件,恢复Windows防火墙
结果 :可以接收消息,但仍然卡在Initializing状态
结论:问题与防火墙设置无关

最终解决方案

系统重装

考虑到数据迁移的复杂性和时间成本,最初计划将项目迁移到其他设备。但最终选择了Windows系统的"重置此电脑"功能(保留个人文件的重装方式)。

重装结果

  • MATLAB意外地没有被重装(可能被识别为个人用户文件)
  • 问题成功解决:Simulink终于能够正常通过初始化阶段
  • D盘的软件未受影响,仅C盘的部分软件(如Unreal Engine)被删除

总结与建议

  1. 问题根因:此问题很可能是由于Windows系统更新或某些系统级配置变更导致的,影响了MATLAB/Simulink的底层通信机制。

  2. 排查思路

    • 先验证基础连接功能(MATLAB命令行测试)
    • 逐步排除各种可能因素(消息类型、系统版本、软件配置等)
    • 在其他环境进行对比测试
    • 考虑系统级别的解决方案
  3. 经验教训

    • 系统升级可能会引入意想不到的兼容性问题
    • 保留个人文件的系统重装是一个相对低成本的解决方案
    • 在进行重大系统变更前,建议先在测试环境验证关键功能
  4. 后续建议

    • 记录当前正常工作的系统配置
    • 考虑创建系统还原点,以便未来快速恢复
    • 对于关键的开发环境,考虑使用虚拟机或容器化部署
相关推荐
要记得喝水2 小时前
C#某公司面试题(含题目和解析)--1
开发语言·windows·面试·c#·.net
小韩博5 小时前
Windows 权限提升(一)
windows
小白的高手之路5 小时前
Matlab中的积分——函数int()和quadl()
matlab
魔都吴所谓7 小时前
【Python】根据开始时间、结束时间计算中间时间
开发语言·windows·python
机器学习之心8 小时前
PINN物理信息神经网络用于求解二阶常微分方程(ODE)的边值问题,Matlab实现
人工智能·神经网络·matlab·物理信息神经网络·二阶常微分方程
syty20208 小时前
flink 伪代码
java·windows·flink
IDOlaoluo9 小时前
TortoiseGit 2.4.0.0 64位安装教程(附详细步骤和Git配置 附安装包)
windows
知行力9 小时前
【GitHub每日速递】不止 TeamViewer 替代!RustDesk 与 PowerToys,Windows 效率神器
windows·github·teamviewer
怒码ing10 小时前
List<?>和List<Object>区别
windows·python·list
豆浩宇12 小时前
学习PaddlePaddle--环境配置-Windows 11 + RTX 4060
人工智能·windows·深度学习·学习·目标检测·计算机视觉·paddlepaddle