<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ROS2 humble接收回调函数延迟进入的问题]]></title><description><![CDATA[<p dir="auto">环境：ubuntu22.04 + humble<br />
发布：启动时读取rosbag中的100条点云数据到内存中（只读取一次），通过按照4HZ频率发送；<br />
订阅：订阅回调不处理数据，只打印两次进入回调的时间间隔（4HZ理论上间隔为250ms）<br />
问题：遇到两次回调间隔概率性出现超过250ms，达到1s甚至2s；如下面日志图片</p>
<p dir="auto"><img src="/forum/assets/uploads/files/1760943021404-0a992584-d048-485e-b195-0cc4d6a47878-image.png" alt="0a992584-d048-485e-b195-0cc4d6a47878-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">现象：从日志图片看，进入回调间隔2251ms后，后续马上0ms间隔处理完队列中对接的数据。</p>
<pre><code>    void start_publishers() {
        for (auto&amp; [name, topic] : topics_) {
          
            auto qos = rclcpp::QoS(
                        rclcpp::QoSInitialization(RMW_QOS_POLICY_HISTORY_KEEP_LAST, 40));
            qos.reliability(RMW_QOS_POLICY_RELIABILITY_RELIABLE);
            qos.durability(RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL);

            // 创建发布者
            if (topic.type == "pointcloud") {
                topic.publisher = this-&gt;create_publisher&lt;sensor_msgs::msg::PointCloud2&gt;(name, qos);
            } else if (topic.type == "feedback_status") {
                topic.publisher = this-&gt;create_publisher&lt;ros_sms_msgs::msg::FeedbackStatus&gt;(name, qos);
            }

            // 计算发布周期（毫秒）
            auto period_ms = std::chrono::milliseconds((int)(1000.0 / topic.frequency));
            
            // 创建定时器，控制发布频率
            topic.timer = this-&gt;create_wall_timer(
                period_ms,
                [this, &amp;topic]() {
                    publish_message(topic);
                }
            );
        }
    }
</code></pre>
<pre><code>SubDifftime(const std::string &amp; topic_name)
    {
      // 取topic最后3个字符作为节点名称的一部分
      std::string suffix = topic_name.substr(topic_name.length() - 3);
      std::string node_name = "sub_difftime_" + suffix;
      node_ = std::make_shared&lt;rclcpp::Node&gt;(node_name);

      auto qos = rclcpp::QoS(
        rclcpp::QoSInitialization(RMW_QOS_POLICY_HISTORY_KEEP_LAST, 40));
      qos.reliability(RMW_QOS_POLICY_RELIABILITY_RELIABLE);
      
      subscriber_ = node_-&gt;create_subscription&lt;sensor_msgs::msg::PointCloud2&gt;(
        topic_name,
        qos,  // 使用自定义QoS配置
        std::bind(&amp;SubDifftime::callback, this, std::placeholders::_1)
      );

      RCLCPP_INFO(node_-&gt;get_logger(), "Subscribing to topic: %s", topic_name.c_str());

#if 1
      rclcpp::executors::MultiThreadedExecutor executor(rclcpp::ExecutorOptions(), 12);
      executor.add_node(node_);

      
      while (rclcpp::ok()) {
        executor.spin_once(std::chrono::milliseconds(10));  // 每次阻塞10ms，检查是否有新消息
        // 或直接 executor.spin(); （完全阻塞，直到节点退出）
      }
      executor.remove_node(node_);
#else
      rclcpp::spin(node_);
#endif
    };
</code></pre>
]]></description><link>https://fishros.org.cn/forum/topic/4592/ros2-humble接收回调函数延迟进入的问题</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 21:12:52 GMT</lastBuildDate><atom:link href="https://fishros.org.cn/forum/topic/4592.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Oct 2025 00:07:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ROS2 humble接收回调函数延迟进入的问题 on Thu, 23 Oct 2025 11:49:33 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://fishros.org.cn/forum/uid/2">@小鱼</a> 你好，</p>
<p dir="auto">我做了新的尝试，将FastDDS改成强制<strong>UDP通信</strong>，用wireshark抓包，也有同样现象。</p>
<p dir="auto">从抓到包的日志看**，ROS2发送的数据存在延迟发出**，wireshark接收到的包就存在延时，延时之后收到连续的几包。</p>
<p dir="auto">详细日志如下：<br />
1） 日志中在10-22 14:39:02.549559时间出现问题<br />
[INFO] [1761115142.558019205] [subscriber_thread_node_9303776749428128748]: [10-22 14:39:02.549559][TID-140593497855552]!!!sub1 sub_callback_time: 509ms, Size=898560<br />
<img src="/forum/assets/uploads/files/1761219765441-screenshot-from-2025-10-22-15-00-48-resized.png" alt="Screenshot from 2025-10-22 15-00-48.png" class=" img-fluid img-markdown" /><br />
2）wireshark抓包发现，在2025-10-22 06:39:02.557394522 连续收到2个包；（小时为06,是wireshark显示异常，分钟和秒是对应上的）<br />
2025-10-22 06:39:02.571319420收到的是另一个主题sub6的数据<br />
<img src="/forum/assets/uploads/files/1761220015217-screenshot-from-2025-10-22-15-07-49-resized.png" alt="Screenshot from 2025-10-22 15-07-49.png" class=" img-fluid img-markdown" /><br />
3）为了证实确实少发了，通过wireshark查看上一个250ms的时间点2025-10-22 06:39:02.323376345<br />
只有一次数据发送<br />
<img src="/forum/assets/uploads/files/1761220056415-screenshot-from-2025-10-22-15-12-51-resized.png" alt="Screenshot from 2025-10-22 15-12-51.png" class=" img-fluid img-markdown" /><br />
4）再通过wireshark查看上上个250ms的时间点2025-10-22 06:39:02.046650514 和 2025-10-22 06:39:02.058843368 ，在12ms收到了2帧数据(sub1和sub6)<br />
<img src="/forum/assets/uploads/files/1761220107175-screenshot-from-2025-10-22-15-14-33-resized.png" alt="Screenshot from 2025-10-22 15-14-33.png" class=" img-fluid img-markdown" /></p>
]]></description><link>https://fishros.org.cn/forum/post/19170</link><guid isPermaLink="true">https://fishros.org.cn/forum/post/19170</guid><dc:creator><![CDATA[wangmiao900618]]></dc:creator><pubDate>Thu, 23 Oct 2025 11:49:33 GMT</pubDate></item><item><title><![CDATA[Reply to ROS2 humble接收回调函数延迟进入的问题 on Tue, 21 Oct 2025 11:19:09 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://fishros.org.cn/forum/uid/2">@小鱼</a> 你好!<br />
<strong>中间件</strong>：默认的 fastdds (如图)<br />
<strong>数据大小</strong>：898560Byte，大概877.5KB，点云数据。<br />
<img src="/forum/assets/uploads/files/1761045471355-da7dd2c1-24e4-4408-af58-9d1673f0b569-image-resized.png" alt="da7dd2c1-24e4-4408-af58-9d1673f0b569-image.png" class=" img-fluid img-markdown" /></p>
]]></description><link>https://fishros.org.cn/forum/post/19153</link><guid isPermaLink="true">https://fishros.org.cn/forum/post/19153</guid><dc:creator><![CDATA[wangmiao900618]]></dc:creator><pubDate>Tue, 21 Oct 2025 11:19:09 GMT</pubDate></item><item><title><![CDATA[Reply to ROS2 humble接收回调函数延迟进入的问题 on Tue, 21 Oct 2025 07:49:28 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://fishros.org.cn/forum/uid/26699">@wangmiao900618</a> 单个数据多大</p>
]]></description><link>https://fishros.org.cn/forum/post/19149</link><guid isPermaLink="true">https://fishros.org.cn/forum/post/19149</guid><dc:creator><![CDATA[小鱼]]></dc:creator><pubDate>Tue, 21 Oct 2025 07:49:28 GMT</pubDate></item><item><title><![CDATA[Reply to ROS2 humble接收回调函数延迟进入的问题 on Tue, 21 Oct 2025 07:49:20 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://fishros.org.cn/forum/uid/26699">@wangmiao900618</a> 什么中间件</p>
]]></description><link>https://fishros.org.cn/forum/post/19148</link><guid isPermaLink="true">https://fishros.org.cn/forum/post/19148</guid><dc:creator><![CDATA[小鱼]]></dc:creator><pubDate>Tue, 21 Oct 2025 07:49:20 GMT</pubDate></item></channel></rss>