Which ways of communicating with a controller are real-time safe?
Hi there!
I'm developing a custom controller, which in the end should run in a real-time environment. Hence, I would like to ensure, that what I develop is real-time safe. More specific, I would like to know, which possibilities there are to communicate with a controller from outside of the real-time environment. For my use case, the communication itself has not to be real-time safe, but it should not make the controller go out of real-time.
I would be very happy, if somebody could provide better insight into that topic!
Let's start with what I found out up till now. During my work, I saw a couple of possible ways for communication, namely subscribers/publishers, service calls and "normal" (set-)functions providing the ability to change class members of the controller.
Which of them run "where" in terms of "in real-time" or "in non real-time"? One example: In the tutorials there are service calls (realtime_joint_controller) and normal set-functions (JointVelocityController, source code) used to changed the values of class members . Are both ways real-time safe and if so, why? Another example: I read about the special variant of the ROS publisher, which is real-time safe (realtime_tools). Does the description in the package summary imply, that a normal ROS subscriber is not real-time safe?
Let me add, that I am no real-time expert. So, I would appreciate simple explanations! :-)
Thanks a lot for your help!
:-) Marcus