-
Notifications
You must be signed in to change notification settings - Fork 522
Closed
Labels
Description
Bug report
Required Info:
- Operating System:
- ros:rolling-ros-core docker
- Installation type:
- binaries
- Version or commit hash:
- 28.3.3-1noble.20240919.221549
- DDS implementation:
- Fast-RTPS
- Client library (if applicable):
- rclcpp
Steps to reproduce issue
A topic is being published at a high frequency while a subscribed node calls rclcpp::spin_some() at a lower frequency.
#include <rclcpp/node.hpp>
#include <rclcpp/executors.hpp>
#include <std_msgs/msg/string.hpp>
int main(int argc, char *argv[]) {
rclcpp::init(argc, argv);
rclcpp::Node::SharedPtr pub_node = std::make_shared<rclcpp::Node>("publisher");
auto pub = pub_node->create_publisher<std_msgs::msg::String>("topic", 100);
int count = 0;
auto timer_pub = pub_node->create_wall_timer(std::chrono::milliseconds(100), [&]() -> void {
std_msgs::msg::String msg;
msg.data = std::to_string(count);
count++;
pub->publish(msg);
std::cout << "Published: " << msg.data << std::endl;
});
std::thread pub_node_thread([&]() {
rclcpp::spin(pub_node);
});
rclcpp::Node::SharedPtr sub_node = std::make_shared<rclcpp::Node>("subscriber");
auto sub =
sub_node->create_subscription<std_msgs::msg::String>("topic", 100, [](std_msgs::msg::String::ConstSharedPtr msg) {
std::cout << "Received: " << msg->data << std::endl;
});
while (rclcpp::ok()) {
std::cout << "Running spin_some" << std::endl;
rclcpp::spin_some(sub_node);
std::this_thread::sleep_for(std::chrono::seconds(1));
}
pub_node_thread.join();
rclcpp::shutdown();
return 0;
}Expected behavior
According to its description, rclcpp::spin_some should execute "any immediately available work", so I would expect it to process all the available messages in the subscriber queue.
Running spin_some
Published: 0
Published: 1
Published: 2
Published: 3
Published: 4
Published: 5
Published: 6
Published: 7
Published: 8
Published: 9
Running spin_some
Received: 0
Received: 1
Received: 2
Received: 3
Received: 4
Received: 5
Received: 6
Received: 7
Received: 8
Received: 9
Published: 10
Published: 11
...
Actual behavior
It only processes one message in the queue at a time, causing it to accumulate.
Running spin_some
Published: 0
Published: 1
Published: 2
Published: 3
Published: 4
Published: 5
Published: 6
Published: 7
Published: 8
Published: 9
Running spin_some
Received: 0
Published: 10
Published: 11
...
Additional information
Reactions are currently unavailable