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

ROS Duckiebot与MATLAB Simulink通信异常:无法接收消息求助

解决Duckiebot(ROS)与MATLAB/Simulink收不到消息的问题

1. 修复/etc/hosts修改重启丢失的问题

Duckiebot默认采用只读根文件系统+overlay挂载,直接修改/etc/hosts会在重启后还原,正确操作:

  • 临时挂载根文件系统为可写:
    sudo mount -o remount,rw /
    
  • 编辑/etc/hosts,添加MATLAB主机的IP和主机名(示例:MATLAB主机IP为192.168.1.100,主机名matlab-pc):
    192.168.1.100    matlab-pc
    
  • 保存后执行命令持久化修改:
    sudo duckiebot-configure hostname persist
    sudo sync && sudo reboot
    
  • 重启后验证修改是否保留:
    cat /etc/hosts
    

2. 确认ROS环境变量配置(两端都要检查)

机器人端(Duckiebot):

  • 设置ROS_IP指向机器人自身IP,ROS_MASTER_URI指向ROS Master(可选择机器人或MATLAB主机作为Master):
    # 临时生效
    export ROS_IP=192.168.1.200
    export ROS_MASTER_URI=http://192.168.1.200:11311
    # 若MATLAB作为Master,改为:
    # export ROS_MASTER_URI=http://matlab-pc:11311
    
  • 写入~/.bashrc永久生效:
    echo "export ROS_IP=192.168.1.200" >> ~/.bashrc
    echo "export ROS_MASTER_URI=http://192.168.1.200:11311" >> ~/.bashrc
    source ~/.bashrc
    

MATLAB端:

  • 在命令行设置与机器人端匹配的环境变量,初始化ROS节点:
    setenv('ROS_IP','192.168.1.100');
    setenv('ROS_MASTER_URI','http://192.168.1.200:11311');
    rosinit;
    
  • 若MATLAB作为Master,需先执行rosinit,再让机器人端指向MATLAB的ROS_MASTER_URI。

3. 验证基础ROS通信链路

  • 机器人端发布测试话题:
    rostopic pub /test_chatter std_msgs/String "data: 'hello from duckiebot'" -r 1
    
  • MATLAB端测试订阅:
    # 查看所有可访问话题
    rostopic list
    # 订阅并打印消息
    sub = rossubscriber('/test_chatter', @(msg)disp(msg.Data));
    # 或直接echo话题
    rostopic echo('/test_chatter')
    
    若能收到消息,说明基础通信正常,问题出在特定话题/消息类型;若收不到,继续排查。

4. 检查自定义消息兼容性

如果使用Duckiebot的自定义ROS消息,需在MATLAB中导入:

  1. 执行rosgenmsg指向Duckiebot的消息包路径;
  2. 按照提示将生成的路径添加到MATLAB路径并重启;
  3. 用rosmsg list验证自定义消息是否已加载。

5. 防火墙与端口配置

  • 关闭两端防火墙,或开放ROS相关端口:
    • 开放ROS Master默认端口11311:
      sudo ufw allow 11311/tcp
      
    • 固定ROS动态端口范围并开放(可选,避免端口随机问题):
      机器人端添加到~/.bashrc:
      export ROS_PORT_SPACE=10000-10100
      
      MATLAB端设置环境变量:
      setenv('ROS_PORT_SPACE','10000-10100');
      
      开放端口范围:
      sudo ufw allow 10000:10100/tcp
      sudo ufw allow 10000:10100/udp
      

6. Simulink特定配置检查

  • 确保Simulink的ROS节点配置与MATLAB端一致:ROS Master URI和Node Hostname/IP需匹配;
  • 检查Subscriber模块的话题名称、消息类型与机器人发布的完全一致;
  • 使用ROS Topic Selector确认能看到目标话题;
  • 确保模型中包含ROS Init模块并正确初始化节点。

内容的提问来源于stack exchange,提问作者Marià

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:27:44