-
Notifications
You must be signed in to change notification settings - Fork 417
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
executors should be able to operate on callback groups rather than nodes #519
Comments
TODO: - Could not use CallbackGroups as a replacement for CallbackQueues in ROS2, this requires ros2/rclcpp#519 and with that could use callback groups + executors like a callback queue from ROS 1. - Could not replace boost::signal2::signal in ROS2 as std::signal2 is not available. Need change design to not use boot::signal2::signal Workaround: - c++11 not support std::shared_lock, use unique_lock as workaround - no replacement of ros::WallTime::now on ROS2, use tf2::get_now instead. - c++11 has no std::upgrade_lock and upgrade_to_unique_lock, use std::unique_lock as workaround Signed-off-by: Chris Ye <[email protected]>
TODO: - Could not use CallbackGroups as a replacement for CallbackQueues in ROS2, this requires ros2/rclcpp#519 and with that could use callback groups + executors like a callback queue from ROS 1. - Could not replace boost::signal2::signal in ROS2 as std::signal2 is not available. Need change design to not use boot::signal2::signal Workaround: - c++11 not support std::shared_lock, use unique_lock as workaround - no replacement of ros::WallTime::now on ROS2, use tf2::get_now instead. - c++11 has no std::upgrade_lock and upgrade_to_unique_lock, use std::unique_lock as workaround Signed-off-by: Chris Ye <[email protected]>
TODO: - Could not use CallbackGroups as a replacement for CallbackQueues in ROS2, this requires ros2/rclcpp#519 and with that could use callback groups + executors like a callback queue from ROS 1. - Could not replace boost::signal2::signal in ROS2 as std::signal2 is not available. Need change design to not use boot::signal2::signal Workaround: - c++11 not support std::shared_lock, use unique_lock as workaround - no replacement of ros::WallTime::now on ROS2, use tf2::get_now instead. - c++11 has no std::upgrade_lock and upgrade_to_unique_lock, use std::unique_lock as workaround Signed-off-by: Chris Ye <[email protected]>
TODO: - Could not use CallbackGroups as a replacement for CallbackQueues in ROS2, this requires ros2/rclcpp#519 and with that could use callback groups + executors like a callback queue from ROS 1. - Could not replace boost::signal2::signal in ROS2 as std::signal2 is not available. Need change design to not use boot::signal2::signal Workaround: - c++11 not support std::shared_lock, use unique_lock as workaround - no replacement of ros::WallTime::now on ROS2, use tf2::get_now instead. - c++11 has no std::upgrade_lock and upgrade_to_unique_lock, use std::unique_lock as workaround Signed-off-by: Chris Ye <[email protected]>
I would be happy to make a PR on the callback-group-level Executor presented at ROSCon 2018. Recently, I updated the implementation to Crystal, cf. https://github.com/boschresearch/ros2_rclcpp/commits/cbg-executor-0.6.1 |
@ralph-lange I would like to work on your callback-group-level Executor in |
That's of course fine for me - and I'm happy to support you. |
@peterpena, please note that the current port to Foxy is not yet working properly. Somewhere in the rclcpp executor or my callback-groups extension of it, a very subtle change must have come in: You can try it out yourself, by playing around with the five lines from https://github.com/boschresearch/ros2_examples/blob/cbg-executor-foxy/rclcpp/cbg-executor_ping-pong/main.cpp#L124 on. ros2 run cbg-executor_ping-pong_cpp ping-pong io 100000 100000 1 1 My thoughts on this behavior:
|
Hello @ralph-lange, thank you for the thorough explanation on how to test the executor-callback group feature. Based on your comment and suggestion, I have been carefully looking into the behavior of With This is all great, but after, it calls I am still looking through the code and working on the branch. I will keep you updated with other findings. |
Thank you for reporting this finding, @peterpena and for looking even deeper into my code. I always wanted to compare the changes for Crystal (i.e. boschresearch@08e9a1e) with the changes for Foxy (i.e. boschresearch@807b06c) side-by-side but simply had no time so far. |
@peterpena, you were absolutely right. Removing the |
Relates to PR #1218. |
@ralph-lange That is great to hear. Thank you for mentioning the PR here. |
Follow up issue: #1287 |
rcl_action_process_cancel_request() will never return RCL_RET_ACTION_SERVER_TAKE_FAILED. Signed-off-by: Jacob Perron <[email protected]>
Signed-off-by: Emerson Knapp <[email protected]>
This issue has been mentioned on ROS Discourse. There might be relevant details there: https://discourse.ros.org/t/threaded-callback-with-priority-affinity-and-overrun-handler/14977/7 |
Right now, you can only add whole nodes to an executor, but it's come up in a few scenarios where you'd rather have the ability to add selective callback groups to an executor rather than the whole node. This would allow you to do things like have a separate executor for one subscription and the main executor can handle everything else in the node. This is also more similar to how callback queues worked in ROS 1.
Some things to consider:
The text was updated successfully, but these errors were encountered: