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

ROS /clock话题未发布求助:Gazebo仿真时钟异常排查

解决Gazebo仿真中ROS /clock话题未发布的问题
  • 检查Gazebo时钟发布配置
    确认Gazebo启动时加载了负责时钟发布的ROS插件:libgazebo_ros_init.so和libgazebo_ros_factory.so。如果是自定义launch文件,需确保包含这些插件的配置;若使用官方empty_world.launch,默认会启用时钟发布。同时全局参数use_sim_time需设为true,可通过rosparam get /use_sim_time查看,若为false,执行rosparam set /use_sim_time true临时修正,或在launch文件中添加<param name="use_sim_time" value="true"/>。

  • 验证ROS节点时间同步
    所有依赖仿真时间的节点(包括你的Simple Action Client)必须启用use_sim_time。检查代码中是否存在硬编码使用真实时间的逻辑,比如直接调用ros::Time::now()而未依赖仿真时间参数,这类代码会导致时间不同步,进而阻塞Action Client的等待逻辑。

  • 排查Gazebo与ROS的连接状态
    用rosnode list确认/gazebo节点存在,若不存在则说明ROS插件加载失败,查看Gazebo启动日志的报错信息(比如依赖缺失、插件路径错误)。再通过rosnode info /gazebo检查该节点是否发布/clock话题。

  • 修复环境与网络问题
    确认ROS_MASTER_URI、ROS_IP(或ROS_HOSTNAME)环境变量配置正确,避免节点间通信阻塞。关闭系统防火墙或确保ROS与Gazebo的通信端口开放,防止话题消息被拦截。

  • 重置仿真运行状态
    即使界面显示未暂停,也可在Gazebo界面点击"Play"按钮重新触发运行,部分情况下界面状态与实际进程状态会出现不一致。也可在Gazebo控制台输入physics::get_world()->run()手动启动物理引擎。

  • 优化Action Client等待逻辑
    由于未发布的/clock会导致Action Client的等待函数无限阻塞,可在代码中添加超时判断:

    ros::Duration timeout(10.0);
    if (!action_client.waitForServer(timeout)) {
        ROS_ERROR("Action server not available within timeout");
        return -1;
    }
    

    或在launch文件中添加节点等待/clock发布后再启动客户端:

    <node pkg="rostopic" type="rostopic" name="wait_for_clock" args="echo /clock -n 1" />
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:20:12