ROS Resources: Documentation | Support | Discussion Forum | Service Status | Q&A

Unreliable communication using executors

I have a problem I can’t solve by myself. I have 2 nodes inheriting from the main Node class, one of them receives data from an IMU and sends it to the other. In the other one frequency of received messages is being calculated.

When I run both nodes separately I get results close to expected ones, so eg for 50Hz publishing I receive messages with ~50Hz frequency, for 25Hz it’s also ~25Hz and so on. The issue starts when I try to start both nodes from an executor. In that case when publishing with 50Hz I receive messages with about 37-38 Hz, for 25Hz - ~18-19Hz and so on. Generally for every frequency above 1 Hz I receive messages with about 2/3-3/4 of the publishing frequency. I tried both single-threaded and multi-threaded executor but it doesn’t seem to change anything, nor does toggling the intra-process communication in nodes’ constructors. I’ve also tried modifying QoS options of this particular connection on both ends but with no effect.

The publishing node has been confirmed to publish data with configured frequency.

Please ask questions on and include the ros2 tag. If you repost the question there, link it and I’ll try to answer your question.

Also, please try to include a minimal example that reproduces the issue.

I followed your advice and posted my problem here:

I found the solution. It seems that it was caused by a rclcpp::sleep_for() found in a different node ran from this executor.