Skip to content
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

Potential TF2 Buffer Timer Interface / Message Filters Design Issue #446

Open
SteveMacenski opened this issue Aug 17, 2021 · 0 comments
Open
Assignees

Comments

@SteveMacenski
Copy link
Contributor

SteveMacenski commented Aug 17, 2021

Required Info:

  • Operating System: Linux
  • Installation type: Binaries
  • Version or commit hash: All in Foxy and newer
  • DDS implementation: N/A
  • Client library (if applicable): rclcpp

Description

We're running into a bit of an issue in ros-navigation/navigation2#2483 with @gezp. The TF2 buffer needs a timer interface in order to create timers in waitForTransform for message filter's tf2_ros subscriber. However, that timer interface is created off of our application's node that could be blocked from running by a long running service/action call or topic callback.

That would yield lots of unsavory error messages when that transforms either failed to be found or timed out because the the timer was never actually called since it's being blocked by another part of the application (at least, I believe that would happen, else that introduces a really nasty blockage while the entire message filter locks up waiting for the timer to run after a service call).

Tracking down the code:

So we wanted to get some design advice about how to prevent this reaction or understand more about this design if the issue I describe is somehow inaccurate. The only solution I see is to somehow isolate TF2 from the application's execution, but not sure how to do that with the timer interface requirement to use message filters. It seems to me like this should be handled internally rather than creating this external interface if it is not possible to use a non-node derived timer interface which can be triggered completely independently from the application's code.

Given TF's importance within the ROS ecosystem, it seems to me that TF should be running largely independently from the application. #442 takes a good step there making sure that TF2 is spinning independent of the node by adding a separate callback group and spinning it within TF. This feels like another place that needs some attention since it is too closely coupled with the application's execution in a very subtle way that could cause real headaches for users of message filters or waitForTransform.

So open questions:

  • Can TF create its own separate timer interface to use internally by default (and an option to set another if you like, similar to the default of spin_thread to true)?
  • Can TF stick the timers into separate callback groups (or the appropriate mechanics for timers) to trigger separately from the applications execution (similar to the changes in Reduce transform listener nodes #442)?
@SteveMacenski SteveMacenski changed the title TF2 Buffer Timer Interface / Message Filters Design Issue Potential TF2 Buffer Timer Interface / Message Filters Design Issue Aug 17, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants